PART 07 · 강의 3/3

텍스처 최적화

텍스처 스트리밍, Virtual Texture, 채널 패킹, 압축 포맷으로 메모리와 대역폭을 최적화합니다.

01

텍스처 압축 포맷

용도별 올바른 압축 선택

포맷채널품질크기 (1024x1024)용도
BC1 (DXT1)RGB~0.5MBBase Color (알파 불필요)
BC3 (DXT5)RGBA~1MBBase Color + Alpha
BC5RG높음~1MBNormal Map (B는 셰이더에서 복원)
BC7RGBA최고~1MB고품질 Base Color, UI
BC4R높음~0.5MB그레이스케일 (Height, AO 단독)
ASTCRGBA가변가변모바일 (블록 크기로 품질 조절)
UE5 자동 압축

UE5는 Texture Type 설정에 따라 자동으로 적절한 압축 포맷을 선택합니다. Default→BC1/BC3, Normal Map→BC5, Masks→BC4/BC5. 하지만 채널 패킹 텍스처는 수동으로 Compression을 Masks로 변경해야 채널 간 간섭을 방지합니다.

02

텍스처 스트리밍

메모리 풀 관리와 MIP 레벨

UE5의 텍스처 스트리밍 시스템은 카메라 거리에 따라 텍스처의 MIP 레벨을 동적으로 로드/언로드하여 GPU 메모리를 관리합니다.

Texture Streaming // 텍스처 스트리밍 관련 설정 // 스트리밍 풀 크기 설정 (Project Settings) r.Streaming.PoolSize = 1000 // MB 단위 // 텍스처별 설정 (Texture Details) Streaming: Never Stream: false // UI 등 항상 최고 MIP 필요 시 true LOD Bias: 0 // MIP 레벨 오프셋 LOD Group: TEXTUREGROUP_World // MIP 레벨 구조: // MIP 0: 2048x2048 (원본) - 가까울 때 // MIP 1: 1024x1024 // MIP 2: 512x512 // MIP 3: 256x256 // ...점점 작아짐 - 멀 때
스트리밍 풀 부족

스트리밍 풀이 부족하면 텍스처가 흐릿하게(낮은 MIP) 표시됩니다. stat streaming으로 현재 풀 사용량을 확인하고, 필요하면 r.Streaming.PoolSize를 조절하세요. 근본적으로는 텍스처 크기를 줄이는 것이 해결책입니다.

03

Virtual Texture (VT)

대규모 텍스처의 효율적 관리

Virtual Texture는 실제로 화면에 보이는 부분의 텍스처 데이터만 메모리에 로드하는 시스템입니다. 텍스처 샘플러 제한 문제도 해결합니다.

VT 유형용도특징
Streaming Virtual Texture일반 텍스처를 VT로텍스처 에셋을 VT 모드로 변환
Runtime Virtual Texture (RVT)Landscape, 프로시저럴런타임에 텍스처를 생성/캐싱
Virtual Texture Setup // Streaming Virtual Texture 활성화 1. Project Settings → Rendering → Virtual Textures: Enable 2. 텍스처 에셋 → Details → Virtual Texture Streaming: 3. 머티리얼에서 TextureSample 노드 → Sampler Type: Virtual (자동 전환) // Runtime Virtual Texture (Landscape용) 1. 레벨에 Runtime Virtual Texture Volume 추가 2. Landscape Material에서 RVT Output 연결 3. 다른 머티리얼에서 RVT Sample로 읽기 // → Landscape와의 블렌딩이 자연스러움
VT의 텍스처 샘플러 이점

Virtual Texture를 사용하면 여러 텍스처가 하나의 샘플러를 공유합니다. SM5의 16개 샘플러 제한에 걸리는 복잡한 Landscape 머티리얼에서 특히 유용합니다.

04

텍스처 크기 가이드라인

화면 해상도 대비 적정 텍스처 크기

오브젝트 크기/유형권장 텍스처 크기비고
소형 프롭 (컵, 책)512x512 ~ 1024x1024화면 점유율 낮음
중형 가구1024x1024 ~ 2048x2048일반적
대형 건물/지형2048x2048 ~ 4096x4096타일링으로 해상도 보충
캐릭터 (1인칭)2048x2048 ~ 4096x4096가까이 보이므로 고해상도
UI/HUD필요한 만큼Never Stream 설정

텍스처 크기는 반드시 2의 제곱수(256, 512, 1024, 2048, 4096)를 사용합니다. 비 제곱수 텍스처는 MIP 생성이 안 되고 스트리밍이 불가능합니다.

Texel Density (텍셀 밀도)

프로젝트 전체에서 일관된 텍셀 밀도(단위 면적당 텍셀 수)를 유지하는 것이 중요합니다. 일반적으로 512~1024 texels/meter가 데스크톱 기준으로 적합합니다. 뷰포트에서 Texel Density 뷰 모드로 확인할 수 있습니다.

SUMMARY

핵심 요약

  • 텍스처 유형별 올바른 압축 포맷 선택: Base Color→BC1/BC7, Normal→BC5, Masks→BC4.
  • 텍스처 스트리밍은 카메라 거리 기반 MIP 관리로 GPU 메모리를 효율화합니다.
  • Virtual Texture는 보이는 영역만 로드하며, 샘플러 제한 문제도 해결합니다.
  • Runtime Virtual Texture는 Landscape와 오브젝트 간 자연스러운 블렌딩에 유용합니다.
  • 텍스처 크기는 2의 제곱수를 사용하고, 프로젝트 전체에서 텍셀 밀도를 일관되게 유지합니다.
  • 채널 패킹(ORM)으로 그레이스케일 맵을 하나의 텍스처로 합쳐 샘플러와 메모리를 절약합니다.
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: 텍스처 포맷과 압축 비교

동일 텍스처를 BC1(DXT1), BC3(DXT5), BC5, BC7, ASTC 포맷으로 변환하고 메모리 사용량과 시각적 품질을 비교하세요. Normal Map에는 BC5, Base Color에는 BC1이 적합한지 검증하세요.

실습 2: Virtual Texture 설정

대형 텍스처(4K 이상)에 Virtual Texture Streaming을 활성화하고, r.VT.Borders 콘솔 명령으로 VT 타일 경계를 확인하세요. VT와 일반 스트리밍의 메모리 사용량을 비교하세요.

심화 과제: Texture Streaming Pool 최적화

r.Streaming.PoolSize와 stat streaming 명령으로 텍스처 스트리밍 풀 상태를 분석하고, Over-budget 텍스처를 찾아 MaxLODSize를 조절하거나 LODBias를 설정하여 메모리 예산 내로 맞추세요.