프롬프트 한 줄이 게임 속 3D 소품이 되기까지 — Meshy API로 아트 생산을 파이프라인화한 하루

들어가며 — "누군가 실행해보고 싶은 게임"을 일주일 안에

1편에서 카드 40장·적 8종·3D 유닛까지 AI로 만든 이야기를 했다. 이번 편의 목표는 더 실전적이다: 이번 주 안에, 남에게 보여줄 수 있는 데모를 만든다. 첫인상을 결정하는 타이틀 → 브리핑 → 월드맵 동선을 하루 만에 갈아엎었고, 그 과정에서 아트 에셋 생산을 명령 한 줄짜리 파이프라인으로 만들었다.

결과 요약:

  • 월드맵을 플랫 2D → 3D "지휘소 모래판" 디오라마로 전면 리뉴얼 (에셋 0개, 순수 프로시저럴로 시작)

  • GPT 콘셉트 시트 1장 → 게임 픽토그램 8종 추출·적용 30분

  • 프롬프트 → 이미지 → 3D → 텍스처 → GLB 전 과정을 스크립트 하나로 자동화

  • 소품 8종(P0 노드 마커 4 + 데코 3 + 신규 1)을 한 세션에 병렬 생성


최종 결과 — 30×30 헥사 지형 위 "지휘소 모래판" 월드맵. 지형·아이콘·범례 전부 오늘 만든 것


① 오전 — 월드맵 리뉴얼: 레퍼런스를 "원리"로 번역하기

아침의 월드맵은 어두운 배경에 색칠한 육각형 몇 개가 떠 있는 수준이었다. 레퍼런스로 PRESERVE(코지 헥사 디오라마)와 BattleTech용 3D 프린팅 지형(HEXTECH)을 잡았는데, 여기서 첫 번째 교훈이 나왔다: 레퍼런스는 베끼는 게 아니라 원리를 추출해서 번역한다.

웹 리서치 에이전트를 백그라운드로 돌려 BattleTech 규칙과 HEXTECH 제품 구조를 조사시켰고, 40년 검증된 원리 두 개를 가져왔다:

  1. 고도는 정수 레벨로만 — 연속 하이트맵 금지. 실루엣 자체가 정보가 된다

  2. "평면 = 지형 타입, 입체 = 고도" 채널 분리 — 상면은 페인트, 측면은 절개토. 프리즘 2-머티리얼

이걸 Godot 프리미티브(6각 실린더)만으로 구현했다. 외부 에셋 0개. 여기에 fog는 "미정찰 = 센서 음영 지대", 정찰하면 지형이 테이블에서 솟아오르는 연출을 붙였다. 줌인/줌아웃(휠·핀치)까지 넣으니 진짜 사령부 테이블을 내려다보는 감이 났다.


같은 날 리뉴얼한 타이틀 — Black Ops One 스텐실(OFL) + 기존 키아트 + 코드 드로잉 버튼


신규 브리핑 화면 — 타자기 연출의 diegetic 작전 브리핑. 소프트 튜토리얼을 겸한다


② 사건 1 — 시트 한 장이 30분 만에 게임 UI가 되다

월드맵 노드 아이콘이 이모지(⚔💰🏥💀)였다. GPT Image에 에셋 가이드 문서 자체를 시각화한 콘셉트 시트를 그리게 했더니, 소품 7종 렌더 + 아이콘 8종 + 로고까지 한 장에 담아 왔다.


GPT가 그린 콘셉트 시트 — 이 한 장이 오늘 작업의 "발주서"가 됐다

여기서 생산성 포인트: 이 시트는 그대로는 못 쓴다. 하지만 아이콘 영역의 좌표를 계산해 자르고, 흰 글리프의 휘도를 알파 채널로 변환하는 스크립트를 짜면 — 8종의 투명 PNG가 즉시 나온다. 크롭 → 알파 추출 → 512px 정규화 → 게임 연동(타일 아이콘·날씨 배지·범례 2곳)까지 30분. 손으로 아이콘 8개를 그렸다면 하루짜리 작업이다.


시트에서 자동 추출한 픽토그램 8종 — 그대로 assets/icons/에 승격


③ 사건 2 — "3D가 되는 이미지"의 규격으로 검수하다

1편의 핵심 교훈 — 다음 단계의 입력 규격을 역산해서 만든다 — 이 이번에도 그대로 적용됐다. 소품 렌더 7장을 Meshy image-to-3D에 넣기 전에 규격 검수를 돌렸다:

  • 가는 봉·체인·격자는 뭉개진다 → 통신탑 사다리 제거, 부재 굵게

  • 배경색이 비치는 구멍은 진짜 구멍으로 해석된다 → 모래주머니 진지 안쪽에 바닥을 그려 채움

  • 세계관 톤 충돌 — 보스 깃발이 뿔 달린 워해머풍으로 나옴 → "2040s militia, no fantasy elements"로 재생성

  • 팔레트 정합 — 주황 레드록 바위 → 모래판 황토(#8E7D5B~#B3A17A)로

7장 중 4장을 이 기준으로 재생성했고, 재생성 프롬프트는 전부 가이드 문서에 축적했다. 검수 기준이 문서화되면 다음 발주부터는 첫 판에 통과한다.

모래 구덩이의 3D 모델


검수 통과판 outpost — 링 안쪽이 모래 바닥으로 채워져 "구멍" 오해석 위험이 없다


④ 전환점 — "DCC 브리지가 뭐야?"에서 시작된 자동화

Meshy 웹에서 모델을 뽑다가 DCC 브리지 메뉴를 보고 조사하던 중 공식 Meshy MCP 서버의 존재를 알게 됐다. 여기서 판이 바뀌었다:

  1. MCP 서버를 등록하고, 패키지 소스를 직접 열어 내부적으로 치는 REST 엔드포인트를 역추적했다

  2. 알고 보니 웹 UI 없이 API만으로 이미지 생성(text-to-image) → 3D 변환(image-to-3D) → 텍스처 → GLB 다운로드가 전부 된다

  3. 그렇다면 웹에서 클릭할 이유가 없다. 스크립트로 만든다

그렇게 나온 것이 tools/meshy_pipeline.py:

tools/worldmap_props.json   ← 소품 이름 + 프롬프트 매니페스트
        │
        ▼  ① 입력 이미지 없으면: text-to-image (스타일 접두 자동 부착)
meshy_input/<name>.png
        │
        ▼  ② GLB 없으면: image-to-3D (3,000폴리·텍스처 포함·대칭 auto)
<name>.glb + thumbs/<name>.png (검수 썸네일)

설계 포인트:

  • 멱등(idempotent) — 이미 있는 산출물은 건너뛴다. 실패해도 그냥 다시 실행

  • 일괄 제출 → 병렬 폴링 — Meshy 큐가 알아서 병렬 처리, 7종도 한 번에

  • 크레딧 리포트 — 시작/종료 잔액을 찍어 비용이 항상 보인다

  • GPT로 만든 이미지든 Meshy로 만든 이미지든 같은 폴더에 두면 혼용된다

MESHY_API_KEY=msy_... python3 tools/meshy_pipeline.py            # 전체
MESHY_API_KEY=msy_... python3 tools/meshy_pipeline.py --only dead_tree  # 신규 1종


파이프라인 산출물 1호 — supply_cache GLB (3,000폴리·텍스처 포함). 방수포와 스트랩 디테일까지 살아남았다


⑤ 생산성 — 숫자로 보는 전후 비교

작업

파이프라인 이전

이후

소품 1종 (이미지→3D→GLB)

웹 UI 클릭 ~10분 + 대기 + 수동 다운로드·개명

명령 한 줄, 방치 (~4분/건, 병렬)

소품 7종 일괄

순차 반복 1시간+

한 번 실행, 폴링 자동

신규 소품 추가

이미지 툴 열고 → 프롬프트 → 저장 → 변환 → 다운로드

매니페스트에 2줄 추가 후 재실행

UI 아이콘 8종

개별 생성 or 수작업 (반나절~하루)

시트 1장 → 추출 스크립트 30분

비용 가시성

웹에서 잔액 확인

실행마다 사용 크레딧 자동 리포트 (텍스처 포함 1건 ≈ 15cr)

그리고 파이프라인의 진짜 가치는 속도가 아니라 반복 가능성이다. 2막(Black Meridian) 소품이 필요해지면? 매니페스트에 프롬프트를 추가하고 한 줄 실행하면 끝. 아트 발주가 "작업"에서 "설정"으로 바뀌었다.

같은 날 게임 쪽 성과 (전부 헤드리스 테스트 17종 그린 유지):

  • 타이틀·브리핑·월드맵 3화면 리뉴얼 + 배포 빌드(macOS/Windows zip)

  • 월드맵: 3D 모래판 + 30×30 지형 + 줌 + 픽토그램 8종 적용

  • 커밋 15건, 밸런스 백로그에 신규 메커니즘 후보(#0037: 고도→전투 시작 조건)까지 등록


배운 것 정리

  1. 레퍼런스는 원리로 번역한다. PRESERVE를 베꼈으면 코지 게임이 됐다. "정수 레벨 스택 + 2채널 분리"라는 원리만 가져오니 우리 세계관의 모래판이 됐다.

  2. 입력 규격 역산은 만능 열쇠다. 1편의 A-포즈 교훈이 이번엔 "구멍 없는 바닥, 굵은 부재, 무채색 배경"으로 재등장했다. 툴이 바뀌어도 원칙은 같다.

  3. 웹 UI에 손이 가면 파이프라인화를 의심하라. MCP/API가 있는 툴은 전부 스크립트가 될 수 있다. 클릭 10번이 명령 1줄이 된다.

  4. 멱등 설계가 자동화의 절반이다. "있으면 건너뛴다" 하나로 재실행·부분실행·혼용이 전부 공짜가 된다.

  5. 검수 기준을 문서에 축적하라. 4장 재생성의 이유를 가이드에 남기니, 다음 발주는 첫 판에 통과한다.



3부 (2026-08-10 추가) — 유닛 편: 3D의 승리, 3D의 패배, 그리고 2D로의 피벗

2편 마무리에서 예고한 "유닛 애니메이션 파이프라인"의 실제 전개다. 결론부터:
3D 풀체인을 완성했고, 그 다음 버렸다. 그리고 버리는 과정에서 더 좋은
파이프라인이 나왔다. 매몰비용과 싸운 기록이라 실패담이자 성공담이다.

⑥ 3D 풀체인의 승리 — 유닛당 명령 3줄, 전투 액션 27클립

Meshy에 rigging API가 있다는 걸 확인하고 소품 파이프라인을 유닛으로 확장했다:

T-포즈 이미지 → image-to-3D → 자동 리깅(walk/run 무료) → 액션 카탈로그(3cr/개)
→ Animation 리소스만 추출(.res, 7MB GLB → 30~67KB) → 카드 태그→모션 매핑

여기까지는 압도적이었다. 분대 3인 × 액션 9종(대기·사격·투척·방어·수신호·치료·
피격·다운·근접) = 27클립을 명령 몇 줄로
뽑았고, 카드를 내면 태그에 따라 다른
모션이 나가는 아키텍처(Across the Obelisk 방식)까지 붙였다. 텍스처가 워시아웃되는
문제는 retexture API(UV 보존)로, 뻣뻣한 3D 룩은 셀 셰이더 + 인버티드 헐 아웃라인 +
오소 카메라 + 12fps 스텝 재생(스파이더버스 트릭)으로 눌렀다.


3D 유닛 첫 인게임 — 여기서부터 채도 복원과 툰 패스를 쌓아 올렸다

게임 내 다양한 ​​캐릭터 그룹의 스크린샷


좌→우: 기본 렌더(워시아웃) → retexture(채도 복원) → 툰 패스. 단계마다 나아지긴 했다


3D 모션 키프레임 — 전투 자세, 무릎쏴 사격, 피격 스태거. 모션 자체는 공짜로 쏟아졌다

중간에 배운 웃픈 교훈 하나. 대기 자세가 자꾸 "원숭이"처럼 나왔는데, 원인은
Combat_Stance 클립이 소총을 쥔 전제의 자세라는 것 — 우리 유닛은 리깅 안전을
위해 빈손이었다. 총 잡을 팔이 허공에 웅크려 있으니 유인원이 된 것이다. 클립에는
전제 조건이 있다.


대기 자세 후보 3종 비교 — 가운데(중립 서기)를 채택했다. 오른쪽은 기지개였다


자세 교정 후 — 여기까지가 3D의 최선이었다

⑦ 3D의 패배 — 클로즈업이 모든 걸 무너뜨렸다

와이드샷 스크린샷은 그럴싸했다. 그런데 게임을 실제로 실행하고 유닛을 크게 본
순간이 왔다:


Meshy 3D의 실제 상한 — 물렁한 지오메트리, 텍스처에 그려진 디테일. 더 파도 여기까지다

AI image-to-3D는 "멀리서 보는 소품"에는 충분하지만 "가까이서 보는 캐릭터"에는
상한이 명확
했다. 셰이더를 더 만지고 텍스처를 다시 구워도 이 벽은 안 깨진다.
월드맵 소품(2편)에서 통했던 파이프라인이 유닛에서 실패한 이유는 단순하다 —
소품은 클로즈업당하지 않는다.

여기서 며칠을 더 팔 수도 있었다. 대신 결정을 그림으로 만들었다.

⑧ 목업 드리븐 결정 — 한 장이 논쟁을 끝냈다

마침 아트 북극성으로 유니콘 오버로드 전투 화면(와이드샷·양측 그룹 대치·과장
VFX)이 잡혀 있었다. 그래서 "3D를 거치지 않는 길"을 코드로 합성해서 보여줬다
이미 가지고 있던 2D 컨셉아트를 macOS Vision으로 컷아웃해 유닛으로 쓰고, 적 무리
8기 + HP바 + 참격 VFX까지 얹은 목업:


결정을 끝낸 한 장 — 2D 일러스트 유닛의 체급은 3D 렌더와 비교가 안 됐다

이 목업의 제작 시간은 30분. 며칠짜리 논쟁("더 파면 나아질까?")을 30분짜리
그림이 끝냈다.
유닛 = 2D 확정.

⑨ 그런데 애니메이션은? — AI 영상이 답이었다

2D의 유일한 약점은 애니메이션이다(Spine 수작업 리깅은 1인 개발 병목). 해답은
image-to-video: 캐릭터 이미지를 Gemini에 넣고 동작 영상을 생성한 뒤, 프레임을
따서 스프라이트로 굽는다.

캐릭터 이미지 → Gemini image-to-video (10초 시퀀스)
    → ffmpeg 12fps 추출
    → macOS Vision 피사체 매팅 (rembg 불필요 — 네이티브가 더 깨끗했다)
    → 불량 프레임 자동 컷 (피사체 면적 이상치)
    → 발끝 앵커 정렬 (이동 영상도 제자리 스프라이트化)
    → 시트 + 미리보기 GIF → assets/units/<병과>/<액션>/


macOS Vision 매팅 결과 — 복잡한 배경에서도 소총까지 경계가 깨끗하다. 우클릭 "피사체 복사"와 같은 엔진

결정적 발견은 시퀀스 촬영이었다. 액션마다 영상을 따로 만들 필요가 없다 —
10초 영상 하나에 "대기→사격→투척→수신호→무릎쏴→피격→쓰러짐"을 연속으로 담으면,
구간 지정으로 잘라 생성 1회 = 액션 7종이 나온다. 캐릭터·조명·스케일이 구간 간
100% 일관되는 건 덤이다.


10초 시퀀스 영상의 콘택트 시트 — 한 영상에 액션 7종이 순서대로 들어있다


추출된 사격 클립(총구 화염 포함)과 다운 클립 — 12fps, 투명배경, 발끝 앵커 정렬

⑩ 인게임 — 렌더러 3번 교체, 게임 로직 수정 0줄

스프라이트 재생기(UnitSpriteView)는 3D 뷰와 같은 인터페이스(play_state /
set_downed)로 만들었다. 그래서 카드→모션 매핑, 피격 연출, 다운 처리 전부 무수정
재사용 — 2D 정지화 → 3D → 2D 스프라이트로 렌더러를 세 번 갈아끼우는 동안 전투
로직은 한 줄도 안 바뀌었다.


피벗 후 인게임 — Assault는 영상 추출 애니메이션, Recon/Support는 컨셉 컷아웃(영상 대기 중)


인게임 모션 — 사격 카드를 내면 사격 애니가, 피격당하면 스태거가 나간다

⑪ 생산성 — 유닛 모션 편 전후 비교

방식

액션 1종 비용

액션 7종

품질 상한

수작업 2D (Spine류)

리깅+애니 수일

수주

최고 (단, 1인 개발 불가능권)

3D 풀체인 (버림)

카탈로그 3cr + 추출

~40cr + 자동

클로즈업에서 벽

AI 영상 (채택)

시퀀스 영상에 포함

생성 1회 + 변환 자동

일러스트급, 12fps에서 morphing 희석

3부에서 배운 것

  1. 매몰비용은 목업으로 끊는다. "더 파면 나아질까"는 말로 못 끝낸다. 대안을
    30분짜리 그림으로 만들면 눈이 결정한다.

  2. AI 3D의 상한을 빨리 인정하라. 소품(원경)과 캐릭터(클로즈업)는 같은
    파이프라인이 아니다. 2편의 성공이 3부의 함정이었다.

  3. 인터페이스 통일이 피벗 보험이다. play_state 계약 하나 덕에 렌더러 교체
    비용이 0이 됐다. 아트는 갈아엎어도 아키텍처는 살아남게 설계할 것.

  4. 파이프라인은 죽지 않고 전직한다. 3D 체인은 월드맵 소품과 "포즈 감독"
    (영상 생성의 구도 레퍼런스)으로 재취업했다. 도구도 마찬가지 — 목업에 쓴 Vision
    컷아웃이 그대로 스프라이트 매팅기가 됐다.

  5. 시퀀스 촬영 = 일관성 공짜. 생성형 도구의 최대 적은 호출 간 편차다.
    한 번의 생성 안에 많이 담을수록 편차가 사라진다.

2
2개의 답글
밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.