캐릭터 일러스트 몇 장을 넣으면 같은 캐릭터를 앞, 옆, 뒤에서 본 게임용 도트 스프라이트를 만들어 줍니다. 전부 내 컴퓨터에서 돌아갑니다. API 키도, 장당 요금도, 업로드도 없습니다.
일러스트를 그대로 축소하면 도트가 아니라 뭉개진 그림이 됩니다. 그래서 캐릭터를 뼈대와 부피로 먼저 세운 다음, 그 위에 그림을 그리게 합니다.
| 무엇을 정하는가 | |
|---|---|
| 1. 뼈대 | 팔다리가 어디 있는지 |
| 2. 부피 | 몸이 얼마나 두꺼운지, 어느 쪽이 앞인지 |
| 3. 기준 그림 | 이 캐릭터가 누구인지 정하는 한 장 |
뼈대는 사람 형태면 자동으로 잡히고, 손으로 고칠 수도 있습니다. 깊이 맵은 뼈대에서 계산하기 때문에 사람이 아닌 몸 (용, 거미, 뱀 같은) 도 됩니다. 같은 포즈를 앞, 옆, 뒤, 반대쪽 옆에서 볼 수 있고, 방향은 각도 하나로 정합니다.
3번 그림이 정해지면 나머지 방향은 전부 그걸 기준으로 만듭니다. 씨드도, 프롬프트도, 기준 그림도 그대로 두고 뼈대만 바꾸기 때문에 방향이 달라져도 같은 캐릭터가 나옵니다.
마지막으로 8x8 블록 단위로 색을 정리해서 진짜 도트로 바꾸고, 팔레트를 고정합니다. 색을 고정하니까 프레임마다 색이 미묘하게 달라지는 일이 없습니다.
여섯 단계입니다. 각 단계는 무엇이 필요하고 무엇을 내놓는지만 선언하고, 실행 순서는 거기서 나옵니다. 순서가 성립하지 않으면 GPU를 쓰기 전에 거부합니다.
| 단계 | 하는 일 | |
|---|---|---|
pose |
뷰마다 관절 위치를 정하고 뼈대 이미지를 그립니다 | CPU |
depth |
뼈대에서 깊이 맵을 계산합니다. 이미지는 보지 않습니다 | CPU |
canonical |
뼈대와 깊이 맵 위에 기준 그림 한 장을 만듭니다 | GPU |
frames |
같은 방식으로 나머지 방향을 만듭니다 | GPU |
palette |
블록 단위로 색을 정리하고 팔레트 하나로 고정합니다 | CPU |
export |
스프라이트 시트로 합칩니다 | CPU |
softbody는 선택입니다. frames 다음에 넣으면 망토나 배가 몸보다 늦게 따라옵니다.
GPU를 쓰는 건 canonical과 frames 둘뿐입니다. 나머지 넷은 GPU 없이 돌아갑니다.
깊이 맵이 canonical보다 먼저인 것이 중요합니다. 기준 그림도 이미 뼈대와 깊이 맵
위에서 만들어지기 때문에, frames가 같은 몸을 돌릴 수 있습니다.
뼈대는 rig: humanoid처럼 직접 정하거나 rig: auto로 두면 됩니다. auto는 레퍼런스
이미지를 보고 고르고, 왜 그걸 골랐는지 남깁니다.
make up # ComfyUI, Ollama, 웹 UI 켜기
make run CONFIG=char_1 # 캐릭터 한 명 만들기
make check # 설정 검사만, GPU 안 씀
브라우저에서 127.0.0.1:8000을 열면 위 과정을 눈으로 보면서 조정할 수 있습니다.
밤새 여러 캐릭터를 만들려면 큐에 넣고 자동으로 돌리면 됩니다.
| 파일 | 내용 |
|---|---|
| docs/CONFIGURING.md | 32x32, 64x64 같은 다른 크기로 바꾸는 법 |
| docs/STYLES.md | 스타일 시트. 한 번 정한 화풍을 캐릭터마다 재사용 |
| docs/DECISIONS.md | 기본값을 그렇게 정한 이유. 대부분 직접 재보고 정했습니다 |
| docs/OVERNIGHT.md | 다른 컴퓨터에서 밤새 돌리기 |
| docs/WEIGHTS.md | 쓰는 오픈 웨이트 목록과 사양, 훈련 요구사항 |
| docs/PIPELINE.md | 파이프라인 단계별 구조와 자세한 설명 |
| docs/CHARACTER_SHEETS.md | 캐릭터 시트를 자르고 여백을 맞추는 규칙 |
| docs/WEIGHT_SETUP.md | 원하는 결과별로 어떤 값을 넣을지. 설명 없이 표만 |
| docs/CONDITIONING.md | 조건화 가중치가 실제로 무엇을 바꾸는지, 무엇이 배제되었는지 |
| docs/OPEN.md | 아직 안 한 일. 무엇이 남았고, 왜 안 했는지 |
Apple Silicon (M4, 16GB) 에서 만들고 재봤습니다. 쓰는 모델은 전부 오픈 웨이트입니다. 20.5 GB이고 목록은 docs/WEIGHTS.md 에 있습니다.