콘텐츠로 건너뛰기
Codex

AI로 캐릭터 팩 만들기: 파일 1001개 에셋 파이프라인

AI로 캐릭터 팩 만들기: 파일 1001개 에셋 파이프라인

TECH NOTE · DESKTOP AI PET

AI로 캐릭터 스프라이트를 만들면 생성보다 정규화에 시간이 듭니다. 파일 1001개짜리 캐릭터 팩을 만들며 프레임을 맞춘 과정을 정리했습니다.

첫 커밋이 파일 1001개였다

데스크톱 펫 캐릭터 팩을 만들면서 첫 커밋에 파일 1001개가 들어갔다. 22,210줄이 함께 올라갔다. 캐릭터 하나 분량이다.

AI로 이미지를 만들면 그림 그리는 시간이 줄어드는 건 맞다. 대신 다른 일이 늘어난다. 나온 이미지를 프레임으로 쓸 수 있게 다듬고, 크기와 위치를 맞추고, 그게 맞는지 확인하는 일이다. 이 글은 그 늘어난 일을 다룬다.

왜 파일이 그렇게 많아지나

스프라이트 시트 방식을 골랐기 때문에 동작 하나마다 프레임이 필요하다. 서 있기, 걷기, 손 흔들기, 말하기, 창틀 오르기 같은 상태가 각각 여러 장으로 이뤄진다.

거기에 프레임만 들어가는 게 아니다. 팩 하나를 뜯어보면 이런 것들이 함께 있다.

폴더 내용 크기 파일
sprites 실제로 런타임이 읽는 스프라이트 20M 4
provenance 이 프레임이 어떤 요청으로 어떻게 나왔는지 기록 115M 124
download 생성 원본 68M 46
qa 확인용 이미지와 대조 시트 14M 36
gifs 동작별 미리보기 4M 14
persona, rules 캐릭터 설정과 행동 규칙
CHECKSUMS.*.json 파일 무결성 검증값
캐릭터 팩 219M의 구성. 런타임이 읽는 sprites는 20M뿐이다
캐릭터 팩 219M의 구성. 런타임이 읽는 sprites는 20M뿐이다

숫자로 보면 분명하다. 앱이 실제로 읽는 건 sprites 20M, 파일 4개다. 나머지 199M과 220개는 그 4개를 만드는 과정에서 남았다. 프레임보다 부수 자산이 훨씬 많다.

생성 이력을 왜 남기나

AI로 이미지를 만들면 같은 프롬프트로 다시 돌려도 같은 그림이 나오지 않는다. 그래서 “이 프레임을 어떻게 얻었는지”를 적어두지 않으면, 나중에 한 장만 다시 만들어야 할 때 처음부터 다시 헤매게 된다.

그래서 프레임 묶음마다 요청 내용과 조건을 파일로 남겼다. 걷기 동작을 다시 만들 때 쓴 프롬프트, 빠진 4프레임을 채우려고 쓴 요청, 특정 동작을 비활성화한 이유 같은 것들이다.

이건 코드의 커밋 메시지와 같은 역할이다. 결과물만 남기면 나중에 왜 그렇게 됐는지 알 수 없다.

진짜 일은 생성 다음에 있었다

이미지가 나온 뒤에 하는 일이 훨씬 길었다. 팩 검증 파일에 정규화 버전이 남아 있는데, 57번까지 올라가 있다.

무엇을 반복했는지 몇 개만 옮기면 이렇다.

  • 낙하산 동작 12프레임을 전부 실측해서 상태별 배율을 다시 잡았다. 그전에는 특정 행의 평균값을 썼는데, 착지할 때 크기가 튀었다
  • 손 흔들기와 말하기 프레임 중 1번과 3번이 가로로 어긋나 있어서 발과 몸 기준점을 고정하려고 -5px, +6px씩 옮겼다
  • 옆으로 총 쏘는 동작은 몸통 기준으로 맞췄더니 발이 미끄러져서, 양발 기준으로 다시 잡고 프레임마다 픽셀을 조정했다
  • 창틀과 기둥에 남은 굵은 선을 1픽셀로 정리했다. 캐릭터의 색 있는 픽셀은 건드리지 않도록 보호하면서 지웠다

전부 픽셀 단위 이야기다. AI가 만든 그림은 프레임끼리 크기와 위치가 미묘하게 다르다. 그대로 이어 붙이면 캐릭터가 제자리에서 떨리거나, 착지할 때 갑자기 커지거나, 걷는데 발이 미끄러진다.

눈으로 확인할 수 있게 만들어 뒀다

픽셀 단위 조정은 숫자만 봐서는 맞는지 알 수 없다. 그래서 동작마다 GIF와 대조 시트를 만들어 두고, 조정한 결과가 실제 런타임 프레임과 같은지 확인하는 과정을 넣었다.

바꾼 뒤에 확인용 이미지를 다시 만들지 않으면, 고쳤다고 생각한 것이 실제로는 안 고쳐졌는지 알 수 없다. 57번을 반복하는 동안 이 확인 단계가 매번 붙었다.

파일이 많다는 건 관리 대상이 많다는 뜻이다

파일 1001개는 그 자체로 문제가 되지는 않는다. 문제는 그중 하나가 잘못됐을 때 알아채기 어렵다는 데 있다.

그래서 팩에 체크섬 파일을 넣었다. 런타임이 팩을 읽을 때 파일이 바뀌었는지 확인할 수 있게 했고, 스프라이트 매니페스트가 애니메이션 규격에 맞는지도 로딩 단계에서 검사한다.

수작업으로 몇 장 그리던 규모라면 필요 없었을 장치다. 자동 생성으로 규모가 커지면 검증도 자동으로 붙어야 한다.

같이 나오는 질문

AI로 만들면 빨라지지 않나

그림을 얻는 단계는 빨라진다. 다만 그 그림을 게임이나 앱에서 쓸 수 있는 상태로 만드는 일은 그대로 남는다. 이 프로젝트에서는 생성보다 정규화에 시간이 더 들었다.

프레임이 어긋나는 걸 자동으로 못 잡나

일부는 잡을 수 있다. 프레임마다 캐릭터의 외곽을 재서 기준점을 맞추는 식이다. 다만 어디를 기준으로 삼을지는 동작마다 다르다. 서 있는 동작은 발을 기준으로 잡는 게 맞고, 매달린 동작은 아니다. 그 판단이 남는다.

생성 이력을 어디까지 남겨야 하나

한 장을 다시 만들어야 할 때 그 파일만 보고 재현할 수 있으면 충분하다. 프롬프트, 사용한 조건, 왜 그렇게 정했는지 정도다. 전체 대화를 남길 필요는 없었다.

다음에 볼 건 이렇게 만든 앱을 어떻게 배포했는지다. 애플 개발자 계정 없이 macOS 앱을 남에게 전달하려면 따로 필요한 게 있다.

이 블로그 더 보기

이 블로그는 실제 프로젝트를 AI와 함께 굴리면서 남긴 기록입니다.

  • 새 글은 RSS로 받아볼 수 있습니다.
  • 시리즈 전체는 여기에 정리해 두었습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다