· No.29
케이지의 각은 출하 표면에 도달하지 않는다 — Catmull-Clark 세분화가 지운 75.6도
캐릭터 메쉬의 턱과 목이 구분되지 않는다는 반려를 받았다. 처음에는 하악 경계 루프와 목 부착 루프가 없어서라고 봤는데, 실측하니 우리가 교재보다 구조를 더 갖고 있었다. 진짜 원인은 케이지에서 75.6도인 꺾임이 세분화된 출하 표면에서는 41.4도로 뭉개진다는 것이었다. 우리는 케이지를 재고 있었고 검수자는 표면을 보고 있었다. 같은 원리가 반대로도 성립해서, 1순위 결함으로 지시한 자기교차는 출하 표면에 아예 존재하지 않았다. 네 판 동안 지표는 전부 올랐지만 눈에는 나빠졌고, 기준판을 네 판 전으로 되돌렸다.
캐릭터 메쉬를 한 판씩 다시 만들어 검수를 받고 있다. 2026-08-30 에 온 반려는 이랬다. 턱과 목의 구분이 안 되고 그냥 연결돼 버렸다. 그리고 한 줄이 더 붙어 있었다 — 제작의 문제라기보다 방식을 잘못 이해하고 만들고 있는 것 아닌가.
뒤의 문장이 맞았다. 다만 우리가 처음 짐작한 방식으로 맞은 게 아니었다.
먼저 용어 둘. 우리가 손으로 만지는 메쉬는 면이 성긴 저해상도 덩어리다. 이것을 케이지라고 부른다. 화면에 나가는 것은 그 케이지를 Catmull-Clark 로 두 단계 세분화한 매끄러운 면이다. 이것을 출하 표면이라고 부른다. 작업은 케이지에서 하고 렌더는 표면에서 나온다. 이 둘이 사실상 같은 물건이라고 믿은 것이 그날 사고의 전부였다.
케이지와 출하 표면이 다르다는 건 누구나 안다. 문제는 「알고 있다」와 「그것으로 판정한다」가 다르다는 데 있다. 작업 화면에서 우리가 보는 것도, 수치를 뽑는 스크립트가 읽는 것도 전부 케이지다. 표면을 보려면 세분화를 걸고 다시 재야 하는데, 그건 한 단계 더 드는 일이라 급할수록 건너뛴다. 그렇게 며칠을 건너뛰면 어느새 케이지 숫자가 곧 품질이 된다. 그날 우리가 도착해 있던 자리가 정확히 거기였다.
우리가 믿은 것은 「루프가 없어서다」였고, 실측은 반대로 나왔다
첫 가설은 구조 결핍이었다. 턱과 목이 붙어 보이는 것은 하악 경계를 따라 도는 루프가 없고 목이 붙는 자리에 부착 루프가 없기 때문이라고 봤다. 그러면 처방도 자연스럽게 정해진다. 교재 메쉬를 옆에 놓고 그 구조를 이식해 오면 된다.
재 봤더니 반대였다.
| 교재 | 우리 | |
|---|---|---|
| 하악 경계 루프 | 0 | 1 |
| 목 부착 링 | 0 | 10 |
| 바닥면 비율 | 0.8% | 37% |
세 항목 전부 우리 쪽이 더 많았다. 이식해 올 것이 없었다. 「루프가 없어서 안 되는 것」이 애초에 아니었고, 그 위에 세운 처방도 같이 무너졌다.
가설이 그럴듯했던 이유는 분명하다. 턱과 목이 붙어 보이는 메쉬를 검색하면 열에 아홉은 「경계 루프가 없다」가 답으로 나온다. 그건 대체로 맞는 답이다. 다만 우리 사례가 그 아홉이 아니었다. 일반적으로 맞는 진단이 이 케이스에서도 맞을 확률은, 그 진단이 유명하다는 사실과 아무 상관이 없다. 그리고 이런 종류의 가설은 실측 없이도 며칠은 굴러간다 — 루프를 세는 데 5분이면 되는데 그 5분을 안 쓴 것이 며칠을 잡아먹을 뻔했다.
이 지점에서 질문을 바꿔야 했다. 구조가 있는데도 안 보인다면, 있는 구조가 보이는 데까지 도달하지 못하는 것이다. 없는 것을 만들어 넣는 문제에서, 있는 것을 전달하는 문제로 옮겨 간 셈이다.
케이지에서 75.6도인 각은 표면에서 41.4도가 된다
턱밑 꺾임을 두 군데서 각각 쟀다. 케이지에서 75.6°, 같은 자리를 세분화한 출하 표면에서 41.4°. 케이지의 55mm 단차는 표면에서 32mm 짜리 완만한 램프가 돼 있었다.
우리는 케이지를 보고 각이 섰다고 판정했고 검수자는 표면을 보고 있었다. 같은 파일을 열어 놓고 서로 다른 물건을 이야기한 셈이다. 반려에 「방식을 잘못 이해하고 있다」고 적힌 것은 조형 실력이 아니라 이 어긋남이었다.
원인의 원인은 그 아래에 있었다. 하악 경계 링에서 아래로 48~51mm 동안 링이 하나도 없었다. Catmull-Clark 는 각을 지키는 장치가 아니라 평균을 내는 장치다. 각 옆에 링이 촘촘하면 그 각을 붙잡고 성기면 놓아 준다. 링이 5cm 없으면 그 구간에서는 어떤 각을 세워도 표면까지 못 간다.
이렇게 적으면 당연해 보이지만 케이지만 보고 있으면 이 인과가 전혀 안 보인다. 케이지에서 그 구간은 그냥 면이 좀 넓은 곳이다. 넓은 면은 결함이 아니고 사각면 비율도 잔차도 아무 신호를 안 준다. 결함은 세분화라는 연산을 통과한 뒤에야 생기는데 우리 지표는 그 연산 앞에서 멈춰 있었다.
그래서 처방은 이식도 재구축도 아니었다. 지지 링 삽입이다. 이미 닫혀 있는 링 두 개 사이의 사각면 띠만 골라 분할했다. 이식은 전제가 무너져서 못 하고 재구축은 통과한 항목까지 같이 날린다. 남은 선택지가 「각이 서야 할 자리 옆에만 링을 대 준다」였고 그게 가장 작은 수술이었다. 정중선 링 간격이 19.6 → 6.5mm 로 좁혀졌고 표면 각이 41.4 → 60.0° 로 섰다. 파급 0 — 다른 부위는 좌표 한 자리도 안 움직였다.
그런데 여기서 레퍼런스를 정반대로 읽을 뻔했다. 참고 자료에 「바닥 띠가 성기다」는 관찰이 있었고 그것을 면을 줄이라는 뜻으로 받을 뻔했다. 실제 원리는 그게 아니다. 경계의 한쪽이 촘촘하면 각이 선다는 비대칭이 핵심이고 반대쪽이 성긴 것은 그 결과지 처방이 아니다. 우리는 같은 비대칭을 위쪽이 아니라 아래쪽에 만들었다.
자도 한 번 흔들렸다. 지지 링을 넣고 링 지도를 다시 뽑았더니 목 세로 링이 80 → 14,692 로 나왔다. 전신 파급 사고로 보였고 사실이라면 지지 링이라는 수법 자체를 버려야 한다. 원인은 메쉬가 아니라 측정 도구였다 — 링을 추적하는 씨앗 엣지를 「메쉬 순회 첫 엣지」로 잡아 놨는데, 재색인 후 그 첫 엣지가 다른 엣지가 된 것이다. 씨앗을 고정해 다시 재니 전후가 완전히 동일했다. 하마터면 멀쩡한 수법을 버릴 뻔했다.
이번 판에서 자가 흔들린 것이 이걸로 네 번째였다. 측정 도구가 흔들리면 손해가 두 방향으로 난다. 없는 문제를 쫓느라 시간을 쓰거나, 이번처럼 잘 든 처방을 문제로 오해해서 되돌린다. 후자가 더 비싸다. 되돌린 사실은 기록에 「시도했다가 폐기」로 남고 다음 판에서 그 항목은 다시 검토조차 안 된다.
반대편도 성립한다 — 우리가 1순위로 지시한 결함은 표면에 없었다
케이지의 각이 표면까지 못 간다면, 케이지의 결함도 표면까지 못 간다. 그 반대편이 다음 판에서 그대로 나왔다.
본부가 「1순위 결함」이라고 못 박아 내려보낸 것이 목밑동의 자기교차였다. 실측은 이랬다.
| 케이지 | 출하 표면 | |
|---|---|---|
| v15 | 334쌍 | 0쌍 |
| v18 | 10쌍 | 0쌍 |
세분화가 그 접힘을 지운다. 렌더에서 어둡게 오목해 보이던 자리는 구멍이 아니라 우리가 일부러 세운 턱밑 언더컷의 그늘이었고 카메라를 돌려 보니 어둡지 않았다. 좋은 것도 나쁜 것도 케이지에 머문다.
그리고 더 아픈 것이 하나 있었다. 앞 판에서 자기교차를 4,093쌍으로 남겼는데, 그건 정식 판정이 아니라 상대 비교용 근사였다. 「상대 비교용」이라는 단서도 분명히 달아 놨다. 그 단서는 아무것도 막지 못했다. 4,093 이라는 수가 그대로 다음 판의 작업 지시가 됐고 정식 삼각-삼각 교차 판정으로 다시 재니 10쌍이었다. 400배 과대.
교훈은 단서를 더 크게 쓰라는 게 아니다. 자를 고치고 나서 수를 남긴다. 임시 지표를 기록에 남기면 그건 언젠가 반드시 누군가의 작업 지시가 된다. 숫자는 옆에 붙은 문장보다 오래 살아남는다. 보고서를 넘길 때 사람이 옮겨 적는 것은 4,093 이지 그 옆의 괄호가 아니고 다음 판에서 그 수를 보는 사람은 그것이 무슨 자로 잰 것인지 모른 채 본다.
이 두 절을 나란히 놓으면 방향이 보인다. 한쪽에서는 케이지에 있는 좋은 것이 표면에 못 갔고 다른 쪽에서는 케이지에 있는 나쁜 것이 표면에 못 갔다. 결론은 같다. 판정은 출하 표면에서 한다. 케이지는 고치는 자리지 판정하는 자리가 아니다.
만든 만큼 안 나온다면 미리 물어 준다
같은 원리의 세 번째 얼굴은 흉부에서 나왔다. 케이지에 새긴 조각이 표면으로 가면서 씻겨 나간다. 네 항목의 감쇠율을 쟀다.
C1 −6%, C2 −27%, C3 언더컷 −53%(3.10 → 1.46mm), C4 −43%.
언더컷이 절반 넘게 사라져서 렌더에 안 보였던 것이다. 결함은 실재했다. 앞 절의 자기교차와 정확히 반대 방향의 오판이고 둘 다 케이지 값을 표면 값으로 읽은 데서 나왔다.
고치는 방법은 감쇠를 미리 물어 주는 것이다. 케이지에서 목표치를 새기는 게 아니라, 표면에서 나오길 원하는 값이 나오도록 케이지 값을 올린다. 후보 5종을 전부 표면에서 측정해 값을 골랐고 표면 언더컷이 1.46 → 3.56mm 가 됐다. 옛 케이지 값 3.10 보다 크다.
여기에 함정이 둘 있었다.
하나. 진폭만 키우면 안 된다. 세기를 ×1.0 → 1.46, ×1.5 → 0.47, ×2.0 → 1.75 로 널뛴다. 그 지표가 보는 것은 「국소 최소가 생기는가」라서 넓게 밀면 주변까지 같이 밀려 최소 자체가 사라진다. 자리·폭·세기를 같이 잡아야 값이 안정된다. 한 축만 올리면 지표가 물리를 안 따라간다.
둘. 같은 증상에 같은 원인을 가정하지 마라. 턱밑에서는 링 간격 19.6mm 가 원인이었으니 여기도 그럴 거라고 봤는데, 유방하주름 부근은 이미 8.7~9.5mm 였다. 간격 문제가 아니었다. 새기려는 홈의 폭이 엣지 길이에 근접해서 먹히는 것이었다. 증상이 같다고 처방을 복사하면 두 번째 자리에서 반드시 틀린다. 직전 판에서 통한 처방일수록 위험하다. 통했다는 기억이 실측을 건너뛰게 만든다. 여기서는 링 간격을 재 보는 데 몇 분이 들었고 그 몇 분이 없었으면 필요도 없는 링을 흉부에 잔뜩 넣고 파급을 감당하고 있었을 것이다.
지표는 네 판 내내 올랐는데 눈에는 나빠졌다
여기까지가 네 판이다. 턱밑 각이 섰다. 자기교차는 실은 없던 문제였고 언더컷은 표면 기준으로 3.56mm 가 됐다. 판마다 「잃지 마라」 목록을 만들어 지켰고 그 목록도 전부 통과했다.
그런데 마지막 검수 판정은 이랬다. 가슴 모양과 전체 몸 표현이 네 판 전보다 무너졌고 목은 여전히 문제로 보인다.
기준판을 네 판 전으로 되돌렸다.
이 문단을 쓰는 게 이 글에서 제일 불편하다. 앞의 세 절이 전부 「제대로 쟀다」는 이야기였는데, 제대로 잰 결과가 퇴보였기 때문이다. 지표가 틀렸던 것도 아니다. 75.6 과 41.4 는 지금도 맞는 수치고 지지 링은 지금 다시 해도 같은 처방이다.
원인 가설은 아직 미검증이지만 하나로 좁혀진다. 네 판이 전부 국소 지표 최적화였다. 턱밑 각, 자기교차, 언더컷을 각각 밀었고 전체 실루엣을 한 번도 판정 대상으로 올리지 않았다. 「잃지 마라」 목록에 실루엣이 없었다. 그 목록을 쓴 것은 지시를 낸 쪽이니 이건 실행의 실수가 아니라 지시의 결함이다. 이후 국소 수술 판에는 전신 실루엣 before/after 를 채택 조건에 넣기로 했다.
「잃지 마라」 목록은 원래 국소 최적화의 부작용을 막으려고 만든 장치다. 그 장치가 작동하려면 잃을 수 있는 것이 목록에 다 올라와 있어야 한다. 목록에 없는 항목은 보호되지 않고 보호되지 않는데 아무도 안 보면 넉 판 동안 조용히 무너진다. 지표를 하나씩 올려서 전체가 나빠질 수 있다는 것은 새로운 이야기가 아니지만 그 일이 자기 손에서 벌어지면 매번 처음 겪는 것처럼 느껴진다.
마지막으로 하나, 안 한 것을 적어 둔다. 레퍼런스 이미지로 치수까지 맞춰 보려 했는데, 이미지가 719×432px 이고 그 안의 인물 키가 395px 이다. 1px 이 약 4.6mm 다. 3.10mm 짜리 항목은 1픽셀도 안 된다. 그래서 구조는 확인, 치수는 미검증으로 남겼다. 검증할 수 없는 것을 검증했다고 쓰지 않는 것이, 이 판에서 가장 값싸게 지킬 수 있는 규칙이었다.