⏱ 1 min read
Pack Textures To Array Tool

여러 Texture2D를 선택해 우클릭 한 번으로 Texture2DArray용 그리드 PNG를 자동 생성하는 Unity 에디터 툴 — 최적 그리드 계산·sRGB 자동 보존 포함. 카테고리: Tool | 슬러그: pack-textures-to-array
Problem
Texture2DArray를 만들려면 텍스처들을 그리드 PNG로 수동 합성한 뒤, Inspector에서 Texture Shape / Columns / Rows를 직접 설정해야 한다. 텍스처가 늘어날수록 반복 작업이 많고, sRGB 설정 누락 같은 실수가 생기기 쉽다.
Implementation
- 01
1. 유효성 검사 (fail-fast)
병합 전 다음 세 조건을 일괄 검사, 하나라도 불일치 시 즉시 중단.
검사 항목 이유 해상도 동일 Texture2DArray는 모든 슬라이스가 같은 크기 필수 sRGB 설정 동일 슬라이스 간 컬러 스페이스 혼용 방지 같은 폴더 출력 경로 결정 + 의도치 않은 에셋 혼합 방지 - 02
2. 최적 그리드 레이아웃 자동 계산
N장을 담을 columns×rows 배치를 완전탐색으로 결정. 우선순위:
예: 5장 → 3×2 (waste 1), 7장 → 4×2 (waste 1), 9장 → 3×3 (waste 0)
- 03
3. RenderTexture를 통한 픽셀 합성
각 슬라이스를
Graphics.Blit→RenderTexture→ReadPixels로 최종 텍스처에 복사.주의점:
ReadPixels는 bottom-left 원점 → 슬라이스 0이 상단에 오도록 Y축 반전 처리- 빈 슬롯은 투명(
clearColor = 0,0,0,0)으로 Clear RenderTexture.GetTemporary/ReleaseTemporary로 GPU 메모리 관리
- 04
4. sRGB 단일 임포트 보존 (AssetPostprocessor 브릿지)
생성된 PNG의 sRGB 설정을 ImportAsset 한 번에 적용하기 위해,
PendingSRGBSettingsdict를 브릿지로 사용.SaveAndReimport()2차 호출 없이 sRGB를 첫 임포트에서 적용, reimport가 두 번 도는 문제 방지. - 05
5. GPU 한계 사전 체크
SystemInfo.maxTextureSize로 출력 크기가 GPU 최대 해상도를 초과하는지 사전 검증.
Conclusion
- Project 창에서 Texture2D 2장 이상 선택 → 우클릭
(COS) Pack Textures To Array1회 T_{이름}_Array.png생성, Inspector 안내 로그 자동 출력
Tradeoffs & Future Work
Tradeoffs
- 출력은 PNG(RGBA32)로 고정 — 원본이 압축 포맷이면 임포트 후 별도로 압축 설정 필요
- 그리드 PNG를 Texture2DArray로 전환하는 Inspector 설정(Shape / Columns / Rows)은 여전히 수동
- 폴더가 다른 텍스처는 한 번에 처리 불가 (의도적 제약 — 오혼합 방지)