개요

말로만 그림을 설명하고 상대가 그리게 하는 게임에서, 그리는 쪽이 갑자기 스케치 세 장을 내밀며 “이 중에 뭐야?”라고 물으면 어떻게 될까?

AI로 플레이어 로봇을 모델링하면서 도면을 아무리 자세히 그려도 blockout(큰 덩어리만 잡은 초안)에서 더 나아가지 않았다. 그래서 설명을 더 하는 대신 AI가 일하는 틀, 하네스를 만들었다. 고쳐도 되는 범위, 고친 뒤 재야 할 것, 남겨야 할 기록을 저장소 규칙과 코드로 정해 둔 것이다.

그러자 장면이 바뀌었다. 내가 추상적으로 말한 것이 후보 보드로 렌더되어 돌아왔고, AI가 이 중 어느 쪽이냐고 되물었다. 고치기 전에 먼저 재고, 잰 숫자와 수정안부터 보여줬다. 그게 이번 작업에서 제일 기억에 남는다.

그리고 결론은 반대쪽에 있었다. 5일 동안 후보를 수십 개 만들었지만, 아직 AI로 일정한 퀄리티의 3D 에셋을 뽑지는 못한다. 그 사이에 무엇이 있었는지 적어보겠다!

하네스: 설명 대신 규칙

도면을 더 그리는 대신, 저장소(ai-modeling-pipeline) 하나에 규칙을 모았다. ChatGPT 6.1-sol과 Claude Opus 5.5가 이 저장소의 규칙을 읽고 Blender 작업을 한다.

규칙 왜
원본과 이전 후보는 지우지 않고, 수정은 항상 새 후보 파일에 마음에 안 들면 언제든 되돌리려고
승인된 파츠·꼭짓점만 고친다 하나 고치다 이웃이 어긋나는 걸 막으려고
고친 뒤 새 프로세스에서 다시 열어 범위 밖 변경이 0인지 잰다 “몸통만 바꿨다”를 말이 아니라 숫자로
blockout은 언제든 버릴 수 있는 임시 모델로 취급한다 초안 위에 디테일을 쌓다가 통째로 갈아엎지 않으려고
디자인 승인, 핵심 형상 승인, 최종 승인을 따로 받는다 한 번의 “좋아”가 모든 단계를 통과시키지 않게
모르는 건 UNKNOWN으로 두고 PASS로 바꾸지 않는다 책상에게 PASS를 준 일을 반복하지 않으려고

마지막 줄은 앞 글의 책상 사건 때문이다. 도면 없이 만든 상자 모양 첫 모델이 간섭 검사 900개를 통과했었다. “도면을 닮았나”는 아무도 재지 않았는데도.

수정 한 번은 이 순서로 돈다.

하네스 안에서 수정 한 번이 도는 순서 개념도. 재기, 보드로 묻기, 사람이 고르기, 새 후보에 실행, 새 프로세스에서 검증, 후보로 보존

③만 내가 한다. 나머지는 AI가 하지만, 내가 “진행”이라고 답한 계획(파일 해시와 범위가 묶인 묶음)과 다르면 실행 단계에서 막힌다.

추상적인 말이 보드가 되어 돌아왔다

처음 이 순서가 제대로 돈 건 앞발이었다. 당시 모델(paw-74)의 앞발은 노란 가시 세 개가 앞으로 튀어나와 있었고, 시안의 뭉툭한 발과 달랐다.

AI는 먼저 시안을 파츠 단위로 분석해 왔다. 그 과정에서 도면끼리의 충돌도 찾아냈다. 정면 그림의 발가락은 3개인데 발바닥 클로즈업은 4개였다. 어느 쪽을 따를지는 AI가 정하지 않고 물었고, “정면 3개 + 발바닥 큰 패드 1개”로 정했다. 뒷발은 어느 그림에서도 발바닥이 안 보여서, 추측으로 채우지 않고 이번 범위에서 뺐다.

그다음부터는 계속 보드였다.

  • 발끝 캡 모양: 곡선 식이 다른 후보 여러 개를 렌더 → C
  • 발가락 패드: 시안의 노란 패드 대신 채굴 손톱으로 바꿨다. 시안에 없는, 내 디자인 결정이다.
  • 손톱 모양: 크기·방향 후보 → B(크림색 갈고리, 1.4배)
  • 앞다리 길이: 줄이기·안쪽으로 돌리기 등 다섯 후보 → A(0.8배, 방향 유지)

시안 정면·사선·앞발과 paw-74, paw-75-c1, paw-75-c2의 정면·사선·낮은 사선 비교 보드. c1부터 앞발에 크림색 손톱이 달린다

도면을 그릴 땐 내가 설명하고 AI가 해석했다. 여기선 AI가 해석 후보를 그려 오고 내가 골랐다. 말로는 “뭉툭하게”까지밖에 못 했던 걸, 그림 몇 장을 보고 고르는 건 쉬웠다.

이렇게 바뀐 앞발은 좌우 대칭 오차 0.07mm(이전 7.8mm), 앞발 하나 286개 삼각형(이전 352개)으로 기록됐고, 앞발 두 개 말고는 아무것도 바뀌지 않았다는 재열기 검사가 남았다.

고치기 전에 먼저 재고 보여준다

몸통으로 넘어가서도 같은 장면이 반복됐다. 몸통 아래 바닥판과 외피가 만나는 곳에 단차가 보여서, 그걸 고쳐 달라고 했다. AI는 바로 고치지 않고 먼저 쟀다.

  • 옆면은 1mm 이내로 맞는다.
  • 가장 큰 단차는 앞쪽 턱 구간: 턱 아래 끝이 바닥판보다 약 9mm 낮다.
  • 턱 안쪽 사선 벽이 바닥판 앞 끝을 관통하고 있다. 서로 겹치는 삼각형 쌍 162개.
  • 뒤쪽은 간격 약 2mm, 높이 차 4~9mm.

그리고 수정안을 네 개(A/B/B+/C) 들고 왔다. C를 고르자 앞쪽만 다루는 C1을 계획했고, 옆면·뒤쪽까지 포함한 C2도 같이 보여 달라고 하자 둘을 나란히 비교해 줬다. C2를 실행한 결과 겹침은 162쌍에서 21쌍으로 줄었다.

측면 실루엣도 마찬가지였다. 도안의 측면 윤곽(빨간 선)에 맞춰 달라고 하자, 얼굴 앞 윤곽이 평균 약 14.5mm 뒤에 있고 정수리가 15~23mm 낮다는 측정부터 나왔다. 계획은 S1 → S2 → S3 → S4로 이어졌고, 측면 실루엣 겹침 비율(IoU, 1이면 완전 일치)은 0.892에서 0.936까지 올라갔다.

턱 구간 비교 보드. c2, S3, S4의 측면·사선·정면·아래 클로즈업과 측면 윤곽 overlay(빨강: 도안, 파랑: c2, 초록: S3, 자홍: S4)

중간에 “아직도 하단부의 빨간 선에 닿지 않는 것 같은데 이유가 있어?”라고 물었더니, 배 아래 빨간 선은 몸통이 아니라 바닥 그림자라는 답이 돌아왔다. 내가 말한 건 안면 부의 턱 위치였는데, AI는 다르게 해석을 하고 있었다는게 구체적으로 돌아왔었다( 약간 처음 돌아온 답을 보고 하.. 이게 맞나? 라는 생각밖에 없었다. )

AI가 “좋아 보인다”고 해도 PASS가 아니다

이 하네스에서 AI는 판정을 하지 않는다. 측정 결과는 “범위 안 / 범위 밖 / 모름”으로만 남고, 측정이 PASS를 만들지 않는다. 시각적인 판단(이 실루엣이 도면 같나, 이 음영이 어색한가)은 끝까지 사람 몫으로 남겼다.

AI 판정을 믿지 않은 데는 근거가 있다.

  • 단순한 도형 과제(두 원이 겹치나, 선이 몇 번 교차하나)에서도 최신 VLM의 평균 정확도가 60%에 못 미쳤다는 결과가 있다( VLMs are Blind, 논문 초록 기준 ). 3D 모델의 미세한 어긋남은 정확히 그런 “가깝고 겹친” 판단이다.
  • 두 결과 중 뭐가 낫냐고 물을 때, 순서만 바꿔도 GPT-4의 결론이 같게 나온 비율이 70%에 못 미쳤다( Judging LLM-as-a-Judge ). 그래서 AI 비교는 두 순서로 각각 묻고, 결론이 같아도 “의심” 표시만 하고 PASS는 주지 않게 했다.

대신 숫자로 잴 수 있는 건 숫자로 쟀다. 열린 모서리, 한 모서리를 셋 이상이 공유하는 비정상 모서리, 이웃 면끼리 방향이 뒤집힌 곳, 면적 0인 면, 삼각형 예산, 그리고 렌더 없이 계산하는 실루엣 IoU.

저장소에는 “지금 단계에서 해야 할 것”을 계약 코드에서 계산해 현재 단계만 출력하는 도구도 있었다. 전체 계획 약 26KB를 현재 단계 체크리스트 약 1.1KB로 줄인 것이다.

그래도 규칙은 내가 확인하지 않으면 건너뛰어졌다. 몸통을 단순화하던 중 “현재 레포지토리 규칙을 제대로 지키고 있는 거야?”라고 묻자, AI는 절차를 빠뜨렸다고 인정했다. 지난 단계의 승인을 소급해서 만들지 않고 읽기 전용으로 다시 검사했더니, 단순화한 외피에서 서로 관통하는 삼각형 4쌍이 나왔다. 그 후보는 채택할 수 없게 됐다.

그래서 얼마나 나왔나

몸통 후보는 F37부터 F52까지 이어졌다. 그중 F51은 고정된 렌더를 보고 내가 시각 항목을 직접 수용했고, 핵심 형상 승인까지 받아 디테일 단계 진입이 허락됐다(삼각형 예산 8000개 중 5184개).

도안 4면(정면·측면·후면·상면)과 F51, 후속 후보의 같은 방향 렌더 비교 보드

그다음 F52에서 후면 해치를 구형 뒤판에 맞추고, 턱을 하나의 볼록면으로 다시 만들고, 귀를 둥글게 했다. 그런데 형상이 바뀌자 F51에서 받은 시각 수용은 이어지지 않았다. 바뀐 모양은 다시 봐야 하니 UNKNOWN으로 돌아갔고, 몸통 깊이가 명세보다 15mm 얕아 치수 항목은 FAIL이 됐다.

같은 날 예전 blockout에서 새 갈래(V4C1)를 열어 턱 덮개를 붙여 보기도 했다. 실루엣 IoU는 정면 0.877 → 0.897, 측면 0.887 → 0.911로 올랐지만, 도안처럼 턱판이 얼굴 패널을 덮어 마감하는 모양은 꼭짓점을 옮기는 것만으로는 안 됐다. 가장자리가 톱니처럼 깨졌고, 새 테두리 띠를 추가하는 토폴로지 작업이 필요하다는 판단으로 멈췄다.

도안의 턱 부분 클로즈업과 V4C1 이전·이후 비교. 크림색 턱판과 노란 날개가 붙었다

게임용으로 승인해 Unity 패키지까지 묶은 버전(game-v042)도 있었다. 높이 0.6m로 Unity import까지 확인했지만, 리깅·LOD는 없고 비정상 모서리 때문에 충돌체는 단순한 캡슐로 대신해야 했다.

게임용으로 승인한 game-v042 모델의 사선 렌더. 노란 몸통, 검은 얼굴, 주황 링 눈, 큰 자주색 귀, 발가락 패드가 있는 검은 발

결국 이 중 게임에 들어간 모델은 없다.

아직은 일정한 퀄리티를 뽑을 수 없다

하네스를 씌우고 나서 확실히 달라진 건 있다. 추상적인 말이 보드로 돌아왔고, 고치기 전에 숫자가 먼저 나왔고, 마음에 안 들면 “원복하고 다른 작업 하자” 한마디로 되돌릴 수 있었다.

그래도 일정한 퀄리티에는 닿지 못했다. 기록을 돌아보면 막힌 자리는 매번 비슷했다.

  • 좋다/나쁘다는 끝까지 사람이 봐야 했다. 측정이 도와주는 건 “얼마나 틀렸나”까지고, “이게 더 귀엽나”는 매 후보마다 내가 봤다.
  • 모양이 바뀌면 이전 승인이 사라진다. F51에서 받은 수용이 F52에서 전부 다시 UNKNOWN이 됐다. 고칠 때마다 검토가 처음부터다.
  • 디테일은 토폴로지 작업이었다. 턱 덮개처럼 면을 새로 짜야 하는 순간, 꼭짓점 이동만 허락된 안전한 도구로는 깔끔하게 안 됐다. 그렇다고 AI가 쓴 코드로 면을 마음대로 다시 짜게 하면 하네스를 씌운 이유가 사라진다.
  • 후보마다 결과의 결이 달랐다. v042, F51, F52, V4C1은 같은 도면에서 출발했지만 귀 모양, 발, 얼굴 비율이 다 다르다.

그래서 이번 모델링은 여기서 접고, 모델링과 게임 프로토타입 컨셉 자체를 피봇하기로 했다. 지금은 이 게임의 원초적인 재미부터 확인해 보고, 그 뒤에 무엇을 만들지 정할 생각이다.

아직 확인하지 못한 것

  • 실제 Blender 모델과 실제 에셋에서의 측정 정확도와 시간(저장소 테스트는 합성 데이터 기준)
  • 꼭짓점 이동 대신 bevel·extrude 같은 정해진 연산만 허락하는 도구로 토폴로지 작업을 안전하게 맡길 수 있는지
  • AI 쌍대 비교를 붙였을 때 내 판단과 얼마나 일치하는지(비용 대비 개선폭이 작아 보류함)
  • 사람 모델러가 같은 도면으로 작업했을 때와 비교한 시간·수정 횟수

더 읽어볼 만한 것들

소감

파이프라인을 만들고 나서 내가 추상적으로 던진 말이 그림으로 바뀌어 돌아오고, AI가 역으로 질문하던 순간이 제일 기억에 남는다. 그런데 결국 도달한 결론은 아직 AI로 일정한 퀄리티의 3D 에셋을 뽑지 못한다는 거였다..