본문으로 건너뛰기
CHOI HONGSU
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

  1. 01

    1. 유효성 검사 (fail-fast)

    병합 전 다음 세 조건을 일괄 검사, 하나라도 불일치 시 즉시 중단.

    검사 항목이유
    해상도 동일Texture2DArray는 모든 슬라이스가 같은 크기 필수
    sRGB 설정 동일슬라이스 간 컬러 스페이스 혼용 방지
    같은 폴더출력 경로 결정 + 의도치 않은 에셋 혼합 방지
  2. 02

    2. 최적 그리드 레이아웃 자동 계산

    N장을 담을 columns×rows 배치를 완전탐색으로 결정. 우선순위:

    예: 5장 → 3×2 (waste 1), 7장 → 4×2 (waste 1), 9장 → 3×3 (waste 0)

  3. 03

    3. RenderTexture를 통한 픽셀 합성

    각 슬라이스를 Graphics.BlitRenderTextureReadPixels로 최종 텍스처에 복사.

    주의점:

    • ReadPixels는 bottom-left 원점 → 슬라이스 0이 상단에 오도록 Y축 반전 처리
    • 빈 슬롯은 투명(clearColor = 0,0,0,0)으로 Clear
    • RenderTexture.GetTemporary/ReleaseTemporary로 GPU 메모리 관리
  4. 04

    4. sRGB 단일 임포트 보존 (AssetPostprocessor 브릿지)

    생성된 PNG의 sRGB 설정을 ImportAsset 한 번에 적용하기 위해, PendingSRGBSettings dict를 브릿지로 사용.

    SaveAndReimport() 2차 호출 없이 sRGB를 첫 임포트에서 적용, reimport가 두 번 도는 문제 방지.

  5. 05

    5. GPU 한계 사전 체크

    SystemInfo.maxTextureSize로 출력 크기가 GPU 최대 해상도를 초과하는지 사전 검증.

Conclusion

  • Project 창에서 Texture2D 2장 이상 선택 → 우클릭 (COS) Pack Textures To Array 1회
  • T_{이름}_Array.png 생성, Inspector 안내 로그 자동 출력

Tradeoffs & Future Work

Tradeoffs

  • 출력은 PNG(RGBA32)로 고정 — 원본이 압축 포맷이면 임포트 후 별도로 압축 설정 필요
  • 그리드 PNG를 Texture2DArray로 전환하는 Inspector 설정(Shape / Columns / Rows)은 여전히 수동
  • 폴더가 다른 텍스처는 한 번에 처리 불가 (의도적 제약 — 오혼합 방지)