# 그림 못 그리는 개발자가 AI로 게임 아트 파이프라인을 끝까지 만든 이야기 — GPT Image → Meshy AI → Mixamo → Godot

들어가며 — 코드는 되는데 아트에서 막힌다

Claude Code로 게임 로직은 얼마든지 만들 수 있는 시대다. 카드 시스템, 전투 엔진, 절차 생성 월드맵까지 — 혼자서도 코드가 막히는 일은 거의 없었다.

진짜 벽은 아트였다. 시작 시점의 게임은 이미지 에셋이 사실상 0개였다. 카드 프레임, 적, HP바를 전부 코드가 색 박스 + 라벨로 그리고 있었다. 그림은 못 그리고, 외주 줄 예산은 없고, 그렇다고 색 박스로 게임의 '맛'을 검증할 수는 없다.

오늘 공유할 사례는 이 벽을 AI 툴 체인으로 정면 돌파한 과정이다. 결과부터 말하면:

  • 카드 일러스트 40/40장 — GPT Image로 전부 실아트 적용

  • 적 8종 투명 일러스트 — 전 세력 스타일 통일

  • 대원 3병과 3D 모델 — 2D 컨셉 이미지에서 Meshy AI로 자동 리깅까지

  • 전투 애니메이션 — Mixamo 모션을 리타겟해서 걷기/사격/피격/사망 확보

전부 혼자, 그리기 없이 만들었다.


전체 파이프라인 한 장 요약

게임 디자인 문서 (PRD → 시스템 설계 6영역)
        │
        ▼  ① 스타일 바이블 — "복붙 블록" 한 개로 세계관·스타일 고정
아트 브리프 (art-brief.md §A)
        │
        ▼  ② GPT Image — 컨셉아트 → 캐릭터 턴어라운드 시트 → 카드 40장
2D 에셋 (일관된 룩)
        │
        ▼  ③ GPT Image — 리깅용 T-포즈(→A-포즈) 레퍼런스 이미지
리깅용 기준 이미지
        │
        ▼  ④ Meshy AI — image-to-3D + 자동 리깅(biped) + Animate(walk/run)
3D 모델 (GLB, Mixamo 호환 리그)
        │
        ▼  ⑤ Mixamo — 전투 동작 클립 다운로드 (idle/shoot/hit/death …)
애니메이션 클립 (FBX)
        │
        ▼  ⑥ Godot — BoneMap 리타겟 → AnimationLibrary 공유
게임 속에서 움직이는 캐릭터

핵심 인사이트를 먼저 말하면: 각 단계의 출력물이 다음 단계의 "입력 규격"에 맞아야 파이프라인이 이어진다. 예쁜 이미지가 아니라 "리깅이 되는 이미지", 멋진 모델이 아니라 "리타겟이 되는 리그"를 만드는 것이 관건이었다.


① 게임 디자인 — 문서가 아트의 원천이 된다

아트 이야기 전에 디자인 과정을 짧게. 이 프로젝트는 문서 구조를 3층으로 잡았다:

  • vision/prd.md — 왜 만드는가 (원안, 거의 고정): 2042년 근미래, 스쿼드 덱빌딩, Slay the Spire × XCOM

  • game-design.md + 6개 영역 폴더 — 무엇을 어떻게 (진화하는 시스템 설계): 스토리/스타일/카드/스쿼드·전직/적/월드맵

  • roadmap/proposals — 실행 단위 (하나씩 Claude Code로 구현)

이 구조가 아트에 중요한 이유: 아트 브리프의 세계관·색·톤이 전부 PRD에서 나왔기 때문이다. "Assault=빨강 #e2554f, Recon=파랑, Support=틸그린" 같은 병과 색은 게임 UI 코드와 이미지 프롬프트가 같은 헥스 코드를 쓴다. 문서가 정본이면 아트와 코드가 어긋나지 않는다.

밸런스도 같은 방식으로: tools/sim.py 시뮬레이터로 400런을 돌려 클리어율을 22% → 38% → 48%로 끌어올리며 튜닝했다. 디자인·밸런스·아트 모두 "문서 → 자동화 → 검증" 루프다.


② 스타일 고정 — "복붙 블록" 하나로 모든 이미지를 통일

AI 이미지의 최대 문제는 장마다 스타일이 튀는 것이다. 해법은 프롬프트 앞에 항상 붙이는 §A 복붙 블록을 만든 것:

You are generating art for a video game called "Project Shadow Protocol" ...
- 2D CARTOON / CEL SHADING: bold clean outlines, flat color fills ...
- Palette: muted military base — slate gray, khaki, navy, gunmetal — plus ONE
  strong accent color per subject
- CLASS COLORS: Assault = red #e2554f / Recon = blue #4fa3e2 / Support = teal #5fcf8f
- HARD RULES: No text, letters, logos ... No real-world insignia ...

운영 방식:

  1. 매 생성마다 §A 블록을 먼저 붙여 세계관·스타일을 "학습"시킨다

  2. 스타일 앵커 1장을 먼저 확정하고, 이후 모든 생성에 레퍼런스로 첨부한다

  3. 캐릭터는 턴어라운드 시트(앞·옆·3/4)를 먼저 만들어 두고, 그 인물이 나오는 카드를 만들 때마다 시트를 함께 첨부한다 → 40장에서 같은 얼굴 유지

또 하나의 원칙이 유지보수를 살렸다: "텍스트·테두리·배지는 코드가 그린다. 이미지는 그림만 만든다." 덕분에 카드 텍스트를 한/영 로컬라이즈할 때 이미지를 한 장도 다시 만들지 않았다.

📷 첨부 추천: docs/art/concept/v3-부대원-0704.png (컨셉아트) + assets/characters/assault_sheet.png (턴어라운드 시트)


③ T-포즈 이미지 — 그리고 A-포즈로 배운 교훈

3D로 넘어가는 관문이 리깅용 기준 자세 이미지다. 처음엔 다들 아는 T-포즈로 뽑았다 (docs/art/T-pos/ 폴더에 그때의 이미지들이 남아 있다). 그런데 image-to-3D에 넣어보니 문제가 보였다:

  • 팔이 몸통에 붙거나 총이 가슴을 가리면 메시가 엉켜서 리깅이 깨진다

  • 극적인 조명·원근이 들어가면 3D 복원이 뒤틀린다

그래서 프롬프트를 "리깅이 되는 이미지"의 규격으로 다시 정의했다. 최종 버전 핵심 규칙:

  • A-포즈: 팔을 40~45° 벌려 몸통과 틈 확보, 다리도 어깨너비로

  • 빈손 + 앞면 비움: 무기를 손에 쥐지 말 것 — 필요하면 등에 평평하게

  • 단색 배경 + 평평한 라이팅 + 정면 뷰 + 전신 안 잘림

실제 프롬프트 (Assault 대원, 발췌):

FULL-BODY 3D-MODEL REFERENCE in a clean A-POSE: ... CRITICAL FOR RIGGING:
both arms held OUT away from the body at roughly 40-45 degrees with a CLEAR
VISIBLE GAP between each arm and the torso, legs straight and apart at
shoulder width, hands open and EMPTY. NO weapon across the chest or front ...
Plain solid light-gray studio background, even flat lighting, straight-on view.

이 규격으로 대원 3병과 + 적 휴머노이드 7종의 3D 입력 이미지를 만들었다.

📷 첨부 추천: docs/art/T-pos/의 T-포즈 이미지 1장 (before) ↔ A-포즈 규격 이미지 1장 (after) 비교


④ Meshy AI — 이미지 한 장이 리깅된 3D 모델이 되는 순간

A-포즈 이미지를 Meshy AI의 image-to-3D에 넣으면:

  1. 메시 생성 → 텍스처 포함 3D 모델

  2. 자동 리깅 (biped) — 휴머노이드 본 구조가 자동으로 박힌다

  3. Meshy Animate — 자체 라이브러리에서 walk/run 애니메이션을 리그 네이티브로 뽑을 수 있다

여기서 결정적 발견: 뽑힌 GLB의 리그가 Mixamo 표준 본 네이밍 24본(LeftUpLeg, LeftForeArm, …)이었다. 즉 Mixamo의 방대한 모션 라이브러리를 리타겟 없이 거의 그대로 얹을 수 있다는 뜻이다. 이게 다음 단계의 문을 열었다.

운영 팁:

  • walk/run처럼 Meshy 자체 라이브러리에 있는 동작은 Meshy에서 뽑는 게 무손실 — 없는 것만 Mixamo로

  • 타깃 폴리곤은 6천~1.5만인데 첫 익스포트가 10.4만 트라이앵글이 나왔다. 화면에 3체뿐이라 당장은 돌아가지만, Meshy에서 Target polycount를 낮춰 재익스포트하는 게 정석이다. 리그가 같으므로 애니메이션은 그대로 재사용된다

📷 첨부 추천: Meshy 작업 화면 스크린샷 + assets/units/assault/assault_walk.glb Godot 임포트 화면


⑤ Mixamo — 동작을 "따오는" 과정

이제 전투 동작. Mixamo에서 클립을 고르는 기준을 카드 연출 아키타입으로 정의했다 — 클립 하나가 여러 카드를 커버하도록:

우선순위

아키타입

Mixamo 검색어

커버하는 카드

P0

idle

Rifle Aiming Idle

대기 상태

P0

shoot

Firing Rifle

rifle_shot, double_tap, headshot …

P0

hit

Hit Reaction

피격 공통

P0

death

Dying

전투불능

P1

throw

Toss Grenade

grenade, flashbang, smoke_screen

P1

melee

Standing Melee Attack Downward

breach, shield_bash

P1

device

Pointing

mark_target, drone_scan (상체 지시 동작)

P1

heal

Picking Up Object

field_aid, triage (무릎 굽혀 메드킷)

P0 네 개만 있으면 카드 연출을 시작할 수 있다 — 이 우선순위 컷이 핵심이었다. 완벽한 모션 셋을 모으려다 멈추는 대신, 최소 셋으로 게임에 먼저 넣고 P1·P2를 나중에 채운다.

다운로드 설정 (시행착오 끝에 고정한 값):

  • Format: FBX Binary / Skin: Without Skin (모델은 이미 있으니 뼈만)

  • 30 FPS, Keyframe Reduction: none

  • In Place 체크 필수 — 전투 스테이지는 제자리 재생이라 이동값이 들어가면 캐릭터가 화면 밖으로 걸어 나간다

Godot 통합은 임포트 설정에서 Skeleton3D에 BoneMap (SkeletonProfileHumanoid) 을 지정하면 본 이름이 표준이라 거의 자동 매핑된다. 추출한 애니메이션은 AnimationLibrary로 묶어 3병과가 공유한다.

Mixamo에 없는 밀리터리 특화 동작(드론 스캔, 주사기, 방패 전개)은 가장 가까운 상체 동작을 리타겟한 뒤 Godot에서 소품 메시를 붙여 읽히게 만든다. 임팩트는 어차피 연출 레이어(히트스탑·플래시·파티클)가 담당한다.

📷 첨부 추천: Mixamo에서 Firing Rifle 클립 미리보기 화면 + Godot에서 리타겟된 애니메이션 재생 화면


배운 것 정리

  1. 파이프라인은 "다음 단계의 입력 규격"을 역산해서 설계한다. T-포즈가 아니라 A-포즈, 예쁜 그림이 아니라 빈손·단색 배경·평평한 라이팅. AI 툴을 이을 때는 각 툴이 뭘 잘 받아먹는지가 프롬프트보다 중요하다.

  2. 스타일 일관성은 "복붙 블록 + 앵커 이미지 + 턴어라운드 시트" 3종 세트로 해결된다. 40장을 만들어도 같은 게임의 그림처럼 보인다.

  3. 텍스트는 코드가, 그림은 AI가. 이미지에 글자를 넣는 순간 로컬라이즈·밸런스 수정 때마다 재생성 지옥이 열린다.

  4. 표준 리그(Mixamo 24본)가 생태계의 열쇠다. Meshy가 표준 본을 뱉어준 순간, 수천 개의 기성 모션이 내 캐릭터의 것이 됐다.

  5. P0 컷을 정하고 게임에 먼저 넣는다. idle/shoot/hit/death 네 개면 전투가 살아난다. 완벽주의는 파이프라인의 적.

  6. 폴리곤 예산은 처음부터. 10.4만 트라이앵글 모델도 돌아가긴 하지만, 로우폴리 재익스포트는 결국 해야 할 숙제로 남는다.


마무리

이 사례의 요점은 특정 툴 자랑이 아니다. "그림을 못 그린다"가 더 이상 1인 게임 개발의 차단 조건이 아니라는 것 — 대신 필요한 능력이 바뀌었다. 스타일을 언어로 정의하는 능력, 툴 간 입출력 규격을 맞추는 능력, 그리고 어디까지 만들고 게임에 넣을지 끊는 능력.

다음 단계는 P1 모션 확충과 로우폴리 최적화, 그리고 카드→아키타입 매핑(cards.json의 anim 필드)으로 연출 이벤트 큐를 완성하는 것이다. 진행되면 후속 편으로 공유하겠다.

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

온·오프라인 AI 스터디

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