AI 이미지는 곧바로 게임 자산이 아니었습니다.
한 장씩 보면 괜찮아 보여도 전투 화면에 올리면 스타일 차이, 투명 배경 실패, 손가락 오류, 무기 파지 오류가 바로 드러났습니다. 생성보다 화면 기준 검수가 먼저 필요했습니다.
PROBLEM
한 장씩 보면 괜찮아 보여도 전투 화면에 올리면 스타일 차이, 투명 배경 실패, 손가락 오류, 무기 파지 오류가 바로 드러났습니다. 생성보다 화면 기준 검수가 먼저 필요했습니다.
적 초상은 종류가 늘어날수록 그림체가 갈라졌습니다. 그래서 산속 멧돼지처럼 실제 화면에서 잘 맞은 이미지를 기준으로 삼고, 풀별 변주를 그 기준 안에 묶었습니다.
카드마다 따로 생성하면 숫자 위치, 문양 크기, 여백, 코너 인덱스가 조금씩 달라집니다. 그래서 생성형 AI는 원천 파트를 만들고, 반복 규칙은 코드가 합성하게 했습니다.
DECISION FLOW
모델 선택은 생성 품질만 보는 일이 아니었습니다. 탐색 단계에서는 비용을 낮추고, 최종 자산 단계에서는 투명 배경, 스타일 유지, 앱 투입 가능성을 우선했습니다. 기준 이미지를 잠근 뒤 적 초상, 카드 파트, 런타임 파일을 같은 조건으로 확장했습니다.
초기 탐색은 gpt-image-1-mini low로 비용을 낮췄고, 최종 자산은 투명 배경을 안정적으로 다룰 수 있는 gpt-image-1.5 high로 잠갔습니다.
산속 멧돼지가 전투 화면 안에서 가장 먼저 톤이 맞았습니다. 이후 적 초상은 더 화려한 그림보다 이 기준을 반복하는 쪽으로 검수했습니다.
카드는 전체 52장을 뽑지 않고 22개 파트를 만든 뒤 합성 로직으로 조립했습니다. 숫자, 문양, 여백, 코너 위치는 코드가 반복했습니다.
ENEMY PORTRAITS
산속 멧돼지가 가장 먼저 화면에 잘 맞았습니다. 그래서 이후 적 초상은 더 화려한 개별 그림을 찾는 방식이 아니라, 멧돼지에서 확인한 굵은 외곽, 카툰 붓질, 낮은 명암 대비, 중앙 실루엣을 기준으로 같은 전투 화면 안에 묶이도록 만들었습니다.
이 이미지는 단순히 초반 적 하나가 아니었습니다. 실제 전투 UI에 올렸을 때 배경과 카드보다 튀지 않고, 작은 화면에서도 덩어리로 읽혔기 때문에 이후 적 초상을 판단하는 기준점으로 썼습니다.
CARD SYSTEM
카드는 단일 이미지가 아니라 포커 카드처럼 숫자, 문양, 코너 인덱스, 뒤집힌 방향에서도 보이는 정보가 모두 일정해야 합니다.
종이 질감, 모서리, alpha mask는 로컬 PIL 렌더로 고정했습니다.
공통 카드 뒷면은 별도 원본으로 관리했습니다.
검·도·권·장 문양은 모든 숫자 카드와 UI에 재사용했습니다.
무극 메달리온은 카드 중앙 장식으로 따로 생성했습니다.
J/Q/K 인물은 무공별 자세와 도구 규칙을 다르게 잠갔습니다.
RUNTIME
수정 가능한 원본과 앱에서 읽는 축소본을 분리했습니다.
전투 화면 크기에 맞춰 미리 줄여 런타임 다운샘플링을 피했습니다.
52장 카드, 뒷면, 히든 카드, 프리뷰 자산을 포함합니다.
아이콘과 9-slice는 투명도가 중요해 lossless WebP로 처리했습니다.