SSOLY TOWN · ASSET PIPELINE · SIZE COMPARISON

어셋 포맷 비교 — 텍스트 그리드 vs PNG 개별 파일

"모든 어셋을 PNG로 내보내라"는 지시 실행 전, 실제로 렌더링해서 측정한 용량 비교. 실행 여부 결정용 자료.
배경: 현재 게임의 픽셀아트(카드 뒷면 거미·J/Q/K 캐릭터·무늬·이펙트·마을 동물·건물 등)는 www/game.js 안에 문자 그리드("B.B.......B.B" 식) + 팔레트로 정의돼 있고, 런타임에 canvas로 그려 PNG data URI를 만든다. 이를 "전부 미리 렌더링한 PNG 파일"로 바꾸면 용량이 어떻게 되는지 실측했다.

① 현재 상태 — 텍스트 그리드 규모 전수 스캔

항목수치
game.js 내 픽셀 그리드 행(row) 수1,357줄
총 픽셀 문자 수10,477자
원시 소스 바이트(따옴표·콤마 포함)약 14.2KB
추정 개별 스프라이트(캐릭터/아이콘/이펙트) 수약 130~140개

② 실측 — 대표 스프라이트 7종 렌더링 비교

동일한 그리드+팔레트를 그대로 PIL로 렌더링해 실제 PNG 파일을 만들고 바이트 수를 쟀다(추정이 아닌 실측). 게임이 실제 쓰는 4배 슈퍼샘플(ART_SS=4, html2canvas 캡처 시 흐려짐 방지용)까지 재현.

스프라이트크기소스 텍스트PNG(원본 1x)PNG(4x, 최적화)PNG(4x, 비최적화)
거미(카드 뒷면)13×10160B171B254B283B
왕관(불꽃놀이)13×7112B109B180B197B
스페이드 무늬11×11154B125B189B223B
하트(팝 이펙트)7×660B130B154B166B
낙하산13×12192B150B257B284B
왕 카드 캐릭터11×14196B197B294B338B
어지러움 별11×342B93B120B137B
평균/스프라이트131B139B207B233B
PNG는 아무리 작아도 파일 헤더·청크 구조 오버헤드(서명+IHDR+IDAT+IEND, 최소 ~60~80바이트)가 고정으로 붙는다. 그래서 작은 스프라이트일수록 텍스트 대비 PNG가 상대적으로 더 손해다(하트: 60B→154B, 2.5배).

③ 전체 규모로 환산 — APK 용량 영향

~3~4KB
현재 방식(텍스트)
APK 압축 후 예상
~25~35KB
PNG 개별 파일 전환 시
APK 예상 증가분

④ 반대급부 — PNG의 장점도 있나?

항목텍스트 그리드(현재)PNG 개별 파일
런타임 CPU최초 1회 canvas 렌더(스프라이트당 1~수 ms, 이후 캐시) — 스프라이트 130개라도 전체 수백 ms 이내, 체감 안 됨렌더링 불필요, 파일 디코딩만(약간 더 빠를 수 있으나 차이 미미)
수정 용이성문자 하나 바꾸면 끝(에디터로 편집·재생성 가능, 결정론 파이프라인)이미지 편집툴 필요, diff로 변경사항 확인 불가(바이너리)
git 저장소 크기텍스트라 diff·압축 효율 좋음바이너리라 매 수정마다 저장소 용량 누적(과거 커밋에도 남음)
버전관리 가독성PR/커밋에서 그림이 바로 안 보이지만 grid를 읽을 수 있음PR에서 미리보기는 되지만 grid 구조는 안 보임
결정론 원칙(CLAUDE.md)이미 이 프로젝트가 확립한 방식과 정합(스펙+생성)PNG 자체가 "산출물"이라 소스 스펙이 별도로 필요(어차피 grid 스펙은 남아야 함 — 즉 텍스트를 없애는 게 아니라 추가하는 셈)
중요: PNG로 내보내더라도 그 PNG를 만들려면 원본 그리드 스펙(텍스트)이 어딘가에는 계속 있어야 한다(그래야 재생성 가능 — 이 프로젝트의 결정론 원칙과도 일치). 즉 "텍스트 대신 PNG"가 아니라 사실상 "텍스트 + PNG"가 되어 소스 관리 부담과 용량을 동시에 늘리는 구조다.

종합 결론

현재 텍스트 그리드 방식이 용량 면에서 더 유리 (약 7~10배 차이)
런타임 성능 차이는 체감 불가 수준이고, PNG 전환은 용량 증가+저장소 관리 부담이라는 명확한 손해가 있다.

다만 예외적으로 PNG 전환이 유리한 경우가 있다면: ①색상 수가 매우 많거나 그라디언트가 들어간 복잡한 이미지(텍스트 그리드로 표현 자체가 비효율적인 경우) ②외부에서 그려온 레퍼런스 아트를 그대로 써야 하는 경우 ③프리렌더링으로 런타임 CPU를 완전히 0으로 만들어야 하는 특수 상황(현재 게임엔 해당 없음, 캐시로 이미 해결됨). 현재 게임의 어셋은 대부분 5~10색 이내의 단순 픽셀아트라 이 예외에 해당하지 않는다.

Ssoly Town · Magpies Studio · 실측 기반 비교(추정 아님, PIL 렌더링+PNG 저장으로 직접 측정) · 내부 의사결정 자료 · noindex