Technical Report/Graphics Tech Reports
Texture Array vs Texture Atlas and UDIM
illu_yun
2025. 4. 27. 22:19
반응형
Array와 Atlas의 차이는 아래와 같다.
항목 | Texture Array | Texture Atlas |
구조 | 여러 개의 텍스처를 Layer(층)로 따로 저장 (3D-like) | 여러 개의 텍스처를 하나의 큰 2D 이미지에 배치 |
텍스처 크기 | 모든 레이어의 텍스처 크기가 동일해야 함 | 각각 다른 크기의 이미지를 자유롭게 배치 가능 |
접근 방식 | 샘플링 시 (UV, Lay Index)로 접근 | 샘플링 시 UV 좌표를 직접 수정해서 원하는 영역 접근 |
관리 편의성 | 레이어 인덱스로 명확하게 접근 가능 → 관리 쉬움 | UV 오프셋, 스케일 계산 필요 → 관리 복잡 |
성능 | 하드웨어 최적화 → 빠름 (특히 GPU 레벨) | UV 수정을 해야 해서 약간의 부하 발생 가능 |
제약사항 | 레이어 수가 하드웨어 최대 제한(GPU마다 다름) 있음 | 이론상 큰 이미지 안에 몇 개든 넣을 수 있음 |
용도 | 동일 크기 텍스처 다수 필요한 경우 (타일맵, 캐릭터 스킨 등) | 다양한 스프라이트 모음, UI 아이콘, 애니메이션 스프라이트 |
Texture Array와 유사한 형태로는 UDIM이 있는데 쉽게 생각하면 층층이 쌓아올려 사용하는것이 Atals, 옆으로 펼쳐서 번호를 매겨 사용하는(1000,1001,1002등)것이 UDIM이다.
구분Texture ArrayUDIM (U-Dimension Image Mapping)
구분 | Texture Array | UDIM(U-Dimension Image Mapping) |
기본 구조 | 하나의 리소스에 여러 텍스처 레이어를 수직 배열 | UV 영역마다 다른 별도의 텍스처 파일 연결 |
텍스처 규칙 | 모든 레이어 크기, 포맷 동일 필수 | 타일별 해상도/포맷 자유롭게 다를 수 있음 |
파일 수 관리 | 텍스처 1개 (GPU에 한번에 로드) | 텍스처 여러 개 (ex: 1001, 1002, 1003, ...) |
GPU 처리 | 하드웨어 친화적 (sampler2DArray 지원) | 하드웨어 기본 지원 없음 (API/렌더러가 매핑 관리) |
UV 매핑 | UV (0~1) + 레이어 인덱스 입력 → 정확한 레이어 선택 | UV > 1.0 이동시 자동으로 다른 텍스처에 매핑 |
실시간 렌더링 최적화 |
매우 우수 (Low overhead) | 불리함 (파일 로딩 오버헤드, 복잡한 관리) |
메모리 효율성 |
연속적인 메모리 배치 → 캐시 히트율 높음 | 타일별 메모리 로딩/스트리밍 필요 (비효율 발생 가능) |
사용 목적 | 게임, VR, AR, 실시간 렌더링 (다수 스킨, 레이어 기반) | 영화, VFX, 고해상도 모델 작업 (디테일 보존 필요) |
관리 난이도 | 단순 (1개 텍스처 리소스만 관리) | 복잡 (다수 텍스처 파일, UV 정리 필요) |
예시 사용 | 다양한 갑옷/무기 스킨 전환, 바닥 타일 텍스처 | 한 캐릭터에 얼굴/몸통/손/다리 따로 고해상도 텍스처 적용 |
장점 | 빠름, 효율적, 관리 쉬움 | 무한 확장 가능, 자연스러운 UV 배치, 높은 품질 유지 |
단점 | 레이어 수 제한(GPU마다 다름), 크기 고정 | 파일 수 많아짐, 렌더링 비용 높음 |
샘플링로직 | Sample(TextureArray, float3(UV, layer)) GPU 하드웨어가 직접 올바른 레이어를 선택 |
Sample(Texture, adjustedUV) (렌더러가 UV에 따라 파일 교체). 렌더링 시스템이 CPU 또는 API 레벨에서 텍스처를 선택 및 매핑 |
기술적 관점에서의 차이
- Array : GPU Cache 최적화가 매우 좋음. 대용량 스트리밍에는 좋지 않은 구조(한번에 로드됨). 다만 drawcall 최적화에는 유리.
- UDIM : 메모리 I/O가 많아짐 → 고정된 실시간 환경(게임)엔 부적합. Cache miss 자주 발생 가능. 하지만, 필요한 부분만 따로 스트리밍 처리 가능
반응형