AI 이미지로 게임 아트를 만들 때 지킨 규칙: 스타일 고정, 마젠타 배경, 검수 시트
게임 세 개의 스프라이트를 AI 이미지 생성으로 만들며 정한 규칙을 모았다. 프롬프트에 스타일 문장을 상수로 고정하고, AI는 원본 한 장에만 쓰고, 나머지는 결정론 스크립트와 검수 이미지로 처리한 방법이다.

나는 그림을 못 그린다. 그래서 Salmonholic, AvoidNow, 랜선포차의 캐릭터와 소품은 대부분 AI 이미지 생성으로 만들었다. AI 이미지는 같은 요청을 해도 뽑을 때마다 조금씩 다르게 나온다. 그런데 게임 아트는 한 장이 아니라 수백 장이 서로 맞아야 한다. 같은 캐릭터의 모든 프레임이 같은 사람처럼 보여야 하고, 모든 캐릭터가 한 게임 안에 있는 것처럼 보여야 한다. 그래서 게임마다 규칙을 문서와 스크립트로 쌓았다.
규칙 1. AI는 원본 한 장에만 쓴다
Salmonholic 스타일 노트의 첫 줄은 이렇다. “AI 개입은 원본 시트 한 곳뿐이고, 최종 아틀라스는 결정론 추출로 구웠다. 같은 원본을 다시 추출하면 바이트까지 같다.”
흐름은 다섯 단계다.
- 캐릭터 기준 이미지(베이스)를 먼저 뽑는다. 이게 이후 모든 생성의 참조가 된다.
- 상태별(대기, 달리기, 피격) 원본 시트를 베이스와 칸 배치 가이드를 참조로 넣어 생성한다.
- 스크립트가 배경을 지우고 프레임을 잘라 정렬한다.
- 런마다 팔레트를 고정 파일(
palette.lock.json)로 잠가서 프레임 사이 색 깜빡임을 막는다. - 아틀라스와 매니페스트를 굽고, 검수용 GIF와 시트를 만든다.
2번만 AI가 한다. 결과가 마음에 안 들면 2번만 다시 돌리고 나머지는 같은 스크립트를 탄다. 손으로 픽셀을 고치지 않는 게 원칙이라, 나중에 다시 만들어도 같은 결과가 나온다.
규칙 2. 스타일 문장은 상수로 고정한다
랜선포차의 생성 스크립트에는 프롬프트 앞에 붙는 문장이 상수로 들어 있다. 대충 옮기면 이렇다. “그림판에서 마우스로 그린 것 같은 일부러 서툰 낙서체. 굵기가 고르지 않은 흔들리는 검은 외곽선, 평면 색, 명암은 거의 없음.” 캐릭터마다 바뀌는 건 뒤에 붙는 묘사뿐이다. 표정도 “점 두 개 눈과 일자 입, 무표정”이라는 문장을 상수로 둬서 56종 캐릭터가 모두 같은 얼굴 문법을 쓴다. 몸 배치도 “이미지 높이의 약 78%, 발은 아래쪽 가장자리 가까이”로 고정했다.
Salmonholic은 규칙표를 따로 뒀다. 도트 그림이던 시절의 기준이다.
| 번호 | 규칙 | 이유 |
|---|---|---|
| S1 | 외곽선은 거의 검은색 1픽셀, 끊기지 않게 | 어두운 바닥에서 실루엣 분리 |
| S3 | 몬스터는 반드시 눈이 있다 | 24px로 줄여도 생물로 읽힘 |
| S4 | 기본 방향은 오른쪽, 왼쪽은 실행 중 뒤집기 | 아틀라스 절반 절약 |
| S5 | 안티앨리어싱, 그라데이션, 글로우, 그림자 없음 | 빛 효과는 코드가 담당 |
| S7 | 플레이어 색은 흰색 시트의 팔레트 교체로만 | 10색이 늘 같은 모양 |
규칙 3. 배경은 마젠타, 소재에는 마젠타 금지
투명 배경을 바로 뽑으면 가장자리가 지저분하다. 그래서 세 게임 모두 배경을 완전한 단색 마젠타(#FF00FF)로 뽑고 스크립트로 지운다. 프롬프트에는 “바닥, 그림자, 그라데이션 없이 가장자리까지 단색”을 넣는다. 대신 캐릭터 몸에는 마젠타, 핫핑크, 보라를 쓰지 말라고 적는다. Salmonholic 규칙표 S6도 같은 이유로 검정, 흰색, 순녹색, 순마젠타를 소재색에서 뺐다.
지우는 방식도 신경 썼다. 랜선포차의 빌드 스크립트는 테두리 픽셀의 중앙값을 키 색으로 잡고, 색 거리에 따라 알파를 준 뒤 가장자리에 섞인 마젠타를 역으로 빼낸다. 마젠타 계열이 아닌 색은 불투명으로 보호해서 캐릭터 안쪽이 뚫리지 않게 했다.
규칙 4. 눈으로 보는 검수 시트를 반드시 만든다
생성 결과를 게임에 바로 넣지 않는다. 먼저 검수 이미지를 만들어 한 화면에서 본다. 커버의 AvoidNow 시트는 원시인 네 명의 방향별 동작과 아이템을 한 판에 모은 것이다. 결정 문서에는 이렇게 본 뒤에도 남은 아쉬운 점이 적혀 있다. 대시의 첫 프레임과 끝 프레임이 작고, 뒤로 걸을 때 다리 움직임이 약하다. 필요하면 그 줄만 다시 생성하기로 했다.
왼쪽은 AvoidNow에서 거대 공룡 다리가 발 스프라이트에 제대로 이어지는지 본 확인 이미지, 오른쪽은 Salmonholic 초기 도트 몬스터의 프레임 시트
AvoidNow의 거대 공룡 발은 원래 다리 중간에서 잘려 보였다. 9월 26일 커밋 ee8baf0에서 다리를 발 위로 이어 붙여 화면 위 몸통까지 연결했고, 그 무렵 위 왼쪽 같은 확인 이미지를 따로 뽑아 이음새를 봤다. 랜선포차는 --preview 옵션으로 부위별 앵커와 합성 결과를 검수 이미지로 떨군다. 모자와 안경이 어느 캐릭터 머리에 어떻게 얹히는지를 한 장에서 확인한다.
랜선포차 꾸미기 파츠 검수 시트의 일부. 배경의 체크무늬는 투명 처리가 제대로 됐다는 표시다
규칙 5. 실존 인물과 닮으면 바꾼다
랜선포차 캐릭터 중에 특정 가수를 떠올리게 하는 캐릭터가 있었다. 9월 26일 커밋 10d79a6에서 “실존 인물 연상을 피해” 반짝이가수로 바꾸고 그림을 새로 생성했다. 그 뒤로 문서에 “실존 인물을 연상시키는 캐릭터는 만들지 않는다”를 넣었다. 닮았는지는 스크립트가 판단할 수 없어서, 이 확인은 사람이 한다.
그림이 없어도 게임은 돈다
마지막 규칙은 안전장치다. AvoidNow와 랜선포차는 아트 매니페스트가 없거나 파일이 빠지면 도형으로 대신 그린다. 매니페스트에는 실제로 있는 파일만 넣는다. 그래서 아트가 준비되기 전에도 게임을 먼저 만들고 시험할 수 있다.
어떤 후보를 고를지는 결국 사람이 정한다. 그 과정은 AI 도구와 함께 만드는 방식에 따로 적었다. 이렇게 만든 그림은 AvoidNow, 랜선포차, Salmonholic에서 볼 수 있다.


