Blog / Dev / ComfyUI 게임 에셋 만들기 — Civitai 체크포인트로 AI...
Dev

ComfyUI 게임 에셋 만들기 — Civitai 체크포인트로 AI 이미지 생성 입문

ComfyUI와 Civitai 체크포인트로 게임 캐릭터 에셋을 생성한다. PixelLab을 떠난 이유, 첫 워크플로우 연결, AnyLora 모델 적용까지 Stable Diffusion 기반 AI 이미지 생성 공부 기록.

PixelLab을 왜 떠났나

새로 만들 게임의 캐릭터 스프라이트가 필요해서 처음 손댄 도구는 PixelLab이었다. 텍스트 프롬프트만 넣으면 픽셀 아트를 바로 뽑아준다는 점이 매력적이었고, “게임 아트에 특화된 AI”라는 포지션이 믿음직스러워 보였다. 픽셀 전용 AI라면 일반 이미지 생성 모델보다 해상도와 팔레트 관리가 잘 되어 있을 거라고 기대했다.

실제로 써본 결과는 기대와 달랐다. 크게 네 가지 한계가 보였다.

1) 스타일 일관성이 유지되지 않는다. 같은 프롬프트, 같은 시드라도 재생성 때마다 라인의 두께와 색의 채도가 조금씩 다르게 나왔다. 한두 장이면 괜찮은데, 한 캐릭터를 여러 포즈/표정으로 뽑아 시트를 구성하려면 치명적이다. 게임에 넣을 스프라이트는 “다음 프레임의 그 캐릭터”로 보여야 하는데, 매 생성이 “닮은 형제자매” 수준에 머물렀다.

2) 아트 톤의 선택지가 좁다. 기본 톤이 밝고 카툰스러운 파스텔 계열에 쏠려 있다. 어두운 팔레트나 하이라이트가 거친 분위기를 요구하면 금세 품질이 무너진다. 내가 가고 싶던 방향은 밝은 쪽이 아니었는데, 프롬프트로 톤을 강하게 밀어도 결과가 기본 톤 쪽으로 돌아오는 경우가 잦았다.

3) 해상도와 디테일의 상한이 낮다. 32×32나 48×48 아이콘용으로는 쓸 만하지만, 카드 일러스트처럼 큰 표현이 필요한 슬롯에서는 디테일이 뭉개진다. 업스케일을 하면 AI가 원래 의도하지 않은 픽셀 패턴이 그대로 확대되어 아티팩트가 생긴다.

4) 재현성과 파이프라인 자동화가 약하다. 뽑은 결과를 재현하거나, 후처리 노드와 연결해 배치로 돌리거나, 특정 단계만 교체해 실험하는 워크플로우가 불가능하다. 웹 UI에서 한 장씩 뽑아 저장하는 구조라, 에셋 수가 늘어나면 관리가 금방 무너진다.

요약하면 PixelLab은 “한 장짜리 러프를 빠르게 뽑아보는 도구”로는 훌륭하지만, 게임 에셋 파이프라인의 일부로 박아 넣기에는 제어력이 부족했다. 그래서 다음 선택지로 갈아탔다.


새 계획: ComfyUI + Civitai

방향을 두 가지로 잡았다.

  1. 이미지 생성 엔진은 ComfyUI로 간다. 노드 기반 워크플로우라서 체크포인트, LoRA, 업스케일, 후처리 단계를 직접 조합할 수 있다. A1111(WebUI)보다 러닝커브가 있지만 재현성과 파이프라인 자동화가 훨씬 강력하다.
  2. 모델은 Civitai(https://civitai.com/models)에서 가져온다. 일러스트 계열 체크포인트와 LoRA가 수천 개 올라와 있고, 샘플 이미지로 톤을 미리 판단할 수 있다. 게임 아트 톤에 맞는 모델을 픽할 때 필수 자원이다.

ComfyUI 사용법은 공식 문서와 따로 정리해둔 학습 노트를 병행해서 읽고 있다. 노드가 많아 보이지만 결국 체크포인트 로드 → 프롬프트 인코딩 → 샘플링 → VAE 디코드의 4단계로 귀결된다.


첫 번째 워크플로우 연결

Civitai에서 AnyLora Checkpoint(anyloraCheckpoint_bakedvae)를 받아와 ComfyUI에서 첫 그래프를 짰다. 당시 캡처 이미지는 저장소에 남아 있지 않아, 깨진 이미지 대신 실제 노드 연결 순서를 텍스트로 남긴다.

체크포인트 로드 ─┬─ Model ───────────────┐
                 ├─ CLIP → Positive ──────┤
                 │       → Negative ──────┤→ KSampler → VAE 디코드 → 미리보기
                 └─ VAE ──────────────────┘
빈 잠재 이미지 ───────────────────────────┘

구성 노드:

노드 역할
체크포인트 로드 anyloraCheckpoint_bakedvae 로드, Model / CLIP / VAE 분리 출력
CLIP 마지막 레이어 설정 clip_skip = -1 (애니/일러스트 모델의 관례)
CLIP 텍스트 인코딩 (Positive) 현재는 girl만 입력해서 베이스 출력 확인 중
CLIP 텍스트 인코딩 (Negative) low quality 등 네거티브 기본값
빈 잠재 이미지 1280 × 1024, batch 1
KSampler seed: randomize, steps: 20, cfg: 6.0, sampler: euler, scheduler: karras
VAE 디코드 잠재 → 이미지 변환
이미지 미리보기 결과 확인

처음에는 queue가 몇 번 실패했다. 원인은 두 가지였다.

  1. 체크포인트 경로 오타 - ComfyUI/models/checkpoints/ 하위가 아니라 임시 폴더에 넣어뒀더니 노드가 못 찾았다.
  2. 해상도 과다 - 처음에 2048 × 2048로 뽑으려다 VRAM이 부족했다. 1280 × 1024로 내리고 나서야 안정적으로 돌았다.

성공 후에는 같은 seed를 고정해 두고 프롬프트만 바꿔가며 미세 변화를 테스트 중이다. 재현성이 살아 있다는 게 ComfyUI의 가장 큰 이점이다. PixelLab에서는 같은 요청을 다시 넣어도 결과가 매번 달라져 재시도가 불가능했다.


내가 이해한 각 노드의 역할

공부하면서 정리한 노드별 멘탈 모델.

체크포인트 로드

.safetensors 또는 .ckpt 파일을 읽어 세 가지를 꺼낸다.

  • Model - UNet. 노이즈를 점진적으로 제거해 이미지 latent를 만드는 네트워크.
  • CLIP - 텍스트 인코더. 프롬프트 문자열을 latent 공간의 벡터로 바꾼다.
  • VAE - Variational Autoencoder. latent 이미지를 픽셀 이미지로 복호화한다.

이 세 가지가 따로 출력되는 구조 덕분에 VAE만 따로 교체하거나 CLIP skip을 중간에서 조작할 수 있다. A1111에서는 숨겨져 있던 내부 구조가 ComfyUI에선 노출되어 있는 셈이다.

CLIP 마지막 레이어 설정 (clip_skip)

애니/일러스트 모델은 대부분 clip_skip = -1 또는 -2가 기본값이다. 학습 시 사용한 값을 맞춰야 품질이 나온다. 모델 설명에 명시되어 있으니 받을 때마다 확인.

CLIP 텍스트 인코딩

Positive와 Negative 두 개를 두고 KSampler의 conditioning 입력에 각각 연결한다. 지금은 학습용으로 girl 한 단어만 넣었지만, 실전에서는 태그 형식(1girl, dark hair, armor, dramatic lighting, masterpiece)으로 길게 쓴다.

KSampler

실제로 노이즈를 제거해 이미지를 만드는 핵심 노드.

  • seed - 고정하면 재현 가능, randomize면 매번 다른 결과
  • steps - 20~30이 일반적. 너무 낮으면 흐릿하고 너무 높으면 시간만 낭비
  • cfg - 프롬프트 충실도. 6~8이 안정 구간. 너무 높으면 색이 타거나 구도가 경직됨
  • sampler / scheduler - euler + karras 또는 dpmpp_2m + karras 조합이 가장 보편적

VAE 디코드와 이미지 미리보기

KSampler의 출력은 latent(작은 저해상도 텐서)다. VAE 디코드가 이걸 RGB 이미지로 바꾼다. 체크포인트 로드에서 나온 VAE를 그대로 연결해도 되고, 일부 모델은 전용 외부 VAE를 붙여야 더 선명하게 나온다.


픽셀 아트 스타일을 AI로 뽑는 문제

원래 목적은 픽셀 게임 에셋 생성이다. 그런데 AnyLora 같은 일반 일러스트 모델은 픽셀 아트를 바로 뱉어주지 않는다. 현재 공부 중인 경로는 세 가지.

  1. 픽셀 아트 LoRA - Civitai에 pixel art, pixelart style 같은 LoRA가 여러 개 올라와 있다. 베이스 모델 위에 LoRA를 얹어 스타일을 입히는 방식.
  2. 전용 픽셀 아트 체크포인트 - 처음부터 픽셀 아트로 학습된 모델. 품질은 좋지만 다양성이 떨어질 수 있다.
  3. 후처리 다운샘플링 - 일반 일러스트를 뽑고 후처리로 팔레트 양자화 + 다운샘플링. ComfyUI에 이미지 리사이즈/양자화 노드가 있어 워크플로우 안에서 처리 가능.

아직 어느 접근이 dark grim 톤에 가장 잘 맞을지는 테스트 중이다. 최소 해상도에서 캐릭터 정체성을 유지하는 게 가장 어려운 부분이라, LoRA와 후처리를 섞는 하이브리드가 유력해 보인다.


현재 위치와 다음 단계

지금까지 확인한 것:

  • ComfyUI 설치와 기본 워크플로우 연결 완료
  • AnyLora로 첫 생성 성공
  • 재현성이 살아 있고, 노드 교체로 실험이 빠름

앞으로 할 일:

  • Civitai에서 픽셀 아트 LoRA 2~3개 비교 테스트
  • Negative prompt 템플릿 정리 (worst quality, blurry, bad anatomy, extra fingers)
  • ControlNet으로 포즈 고정 실험 (같은 캐릭터 여러 포즈 생성의 핵심)
  • LoRA로 캐릭터 정체성 학습 가능한지 데이터셋 준비
  • 후처리 다운샘플링 노드 체인 구성

PixelLab을 포기한 게 후회되진 않는다. 도구가 좋은 것과 내 프로젝트에 맞는 것은 다른 문제다. ComfyUI는 러닝커브가 가파른 대신 천장이 높다. 게임 에셋 파이프라인을 진지하게 자동화하려면 결국 이쪽으로 와야 한다는 생각이 점점 확실해진다.

당분간은 공부 노트를 쌓는 쪽에 가까울 것이다. 워크플로우가 안정되고 첫 “게임에 넣을 만한” 에셋이 나오면 그때 다시 정리해서 올릴 생각이다.

PixelLab의 한계에 부딪혀 ComfyUI + Civitai로 방향을 틀고, AnyLora 체크포인트로 첫 워크플로우를 연결했다 – AI 게임 에셋 파이프라인 구축의 출발점.

댓글

블로그 목록으로
ACHIEVEMENT UNLOCKED
LOADING...
SCORE 000000
HITS
0