텍스처 스트리밍
밉맵 레벨 동적 로딩으로 VRAM 효율적 관리
텍스처 스트리밍이란?
필요한 밉맵만 로드하기
텍스처 스트리밍은 카메라 거리에 따라 적절한 밉맵 레벨만 VRAM에 로드하는 시스템입니다. 가까운 오브젝트는 고해상도 밉맵을, 먼 오브젝트는 저해상도 밉맵을 사용합니다.
4096x4096
2048x2048
1024x1024
512x512
거리가 멀어질수록 낮은 밉맵 사용 (VRAM 절약)
// 텍스처 스트리밍 통계
stat streaming
// 주요 항목:
// - Streaming Textures: 스트리밍 대상 텍스처 수
// - Required Size: 필요한 텍스처 메모리
// - Current Size: 현재 로드된 텍스처 메모리
// - Over Budget: 예산 초과량
스트리밍 풀 설정
텍스처 메모리 예산 관리
텍스처 스트리밍 풀 크기 (MB). VRAM의 60-70%를 권장.
임시 메모리 최대 허용량 (MB). 스트리밍 중 사용되는 임시 버퍼.
VRAM 퍼센트로 풀 크기 지정. Engine.ini에서 설정.
; 텍스처 스트리밍 설정
[TextureStreaming]
PoolSizeVRAMPercentage=70
; 콘솔 변수로 직접 설정
r.Streaming.PoolSize=2048 ; 2GB 풀
r.Streaming.MaxTempMemoryAllowed=50 ; 50MB 임시 메모리
텍스처 압축 포맷
플랫폼별 최적 포맷 선택
| 포맷 | 용도 | 플랫폼 |
|---|---|---|
| BC7 | 고품질 알베도, 노멀맵 | PC, 콘솔 |
| BC5 | 노멀맵 (2채널) | PC, 콘솔 |
| BC4 | 그레이스케일 (러프니스, 메탈릭) | PC, 콘솔 |
| BC1 (DXT1) | 알파 없는 컬러 | PC, 콘솔 |
| ASTC | 모바일 범용 | iOS, Android |
| ETC2 | 모바일 폴백 | Android |
알베도 텍스처는 BC7, 노멀맵은 BC5, 마스크 텍스처(R/G/B 채널 분리)는 BC7 또는 채널 분리 후 BC4를 권장합니다.
LOD Bias 설정
밉맵 레벨 강제 조정
// 텍스처별 LOD Bias 설정
// 텍스처 에디터 > Details > LOD Bias
// 값이 높을수록 낮은 밉맵 사용 (메모리 절약)
// 플랫폼별 글로벌 LOD Bias (DeviceProfiles.ini)
[iOS DeviceProfile]
+CVars=r.Streaming.MipBias=1
[Android_Low DeviceProfile]
+CVars=r.Streaming.MipBias=2 ; 저사양은 더 낮은 밉맵
[Android_High DeviceProfile]
+CVars=r.Streaming.MipBias=0 ; 고사양은 원본 품질
// 실시간 밉맵 바이어스 조정
r.Streaming.MipBias 1 // 한 단계 낮은 밉맵 사용
// 특정 텍스처 그룹별 바이어스
r.Streaming.MipBias_World 1 // 월드 텍스처
r.Streaming.MipBias_UI 0 // UI는 선명하게
Virtual Texture
초대형 텍스처 효율적 처리
Virtual Texture(VT)는 필요한 타일만 동적으로 로드하여 매우 큰 텍스처도 효율적으로 사용할 수 있게 합니다. 특히 Landscape에 유용합니다.
Runtime Virtual Texture (RVT)
// 프로젝트 설정에서 활성화
Edit > Project Settings > Engine > Rendering > Virtual Textures
// 활성화할 항목:
// - Enable Virtual Texture Support: true
// - Enable Virtual Texture Lightmaps: true (선택)
// RVT 볼륨 배치
// Place Actors > Visual Effects > Runtime Virtual Texture Volume
// 머티리얼에서 RVT 샘플링
// Runtime Virtual Texture Sample 노드 사용
- 메모리 절약 - 보이는 타일만 로드
- 대형 텍스처 지원 - 16K+ 텍스처 가능
- Landscape 최적화 - 지형 레이어 블렌딩
- 런타임 합성 - 데칼, 폴리지 블렌딩 효율화
핵심 요약
- stat streaming - 텍스처 스트리밍 상태 확인
- r.Streaming.PoolSize - VRAM 60-70%로 설정
- 압축 포맷 - BC7(알베도), BC5(노멀), ASTC(모바일)
- LOD Bias - 플랫폼별 밉맵 레벨 조정
- Virtual Texture - 대형 텍스처 타일 기반 로딩
- 텍스처 그룹 - 용도별 스트리밍 우선순위 설정
텍스처가 흐릿하게 보인다면 stat streaming으로 Over Budget 여부를 확인하세요. 풀 크기가 부족하거나 너무 많은 고해상도 텍스처를 사용 중일 수 있습니다.
도전 과제
배운 내용을 직접 실습해보세요
r.Streaming.PoolSize를 조정하여 오픈월드 RPG에서 텍스처 팝인을 최소화하세요. stat Streaming으로 풀 사용량과 오버 버짓을 모니터링하세요.
랜드스케이프와 대형 환경 텍스처에 Runtime Virtual Texture를 적용하세요. VT 풀 크기를 설정하고, 기존 텍스처 스트리밍과 비교하여 메모리 효율과 품질을 비교하세요.
Texture Group별 LODBias 설정, Mip Gen Settings 최적화, 압축 포맷(DXT, ASTC, BC7) 선택을 체계화하세요. 텍스처 오디트 스크립트를 작성하여 불필요하게 높은 해상도의 텍스처를 자동 검출하세요.