PART 4 · 강의 3/4

텍스처 메모리 관리

Texture Streaming과 Virtual Textures로 VRAM을 효율적으로 사용합니다

01

Texture Streaming 시스템

동적 해상도 조절

텍스처 스트리밍은 각 텍스처의 해상도를 동적으로 증가/감소시켜 가용 메모리를 효과적으로 관리합니다.

작동 원리

  • 월드 뷰에서 각 텍스처의 텍셀 월드 크기 수집
  • 뷰포인트 기준 좋은 텍셀/픽셀 비율 계산
  • 가시성 등 추가 정보로 이상적인 해상도 결정
  • 스트리밍 메모리 풀 예산 내에서 품질 조정
⭐ 스트리밍 상태 확인
코드 숨기기
# 스트리밍 메트릭 실시간 확인 stat Streaming # 출력 정보 # - Texture Pool Size: 할당된 텍스처 풀 크기 # - Streaming Textures: 현재 스트리밍 중인 텍스처 수 # - Over Budget: 예산 초과량
02

VRAM 풀 설정

플랫폼별 텍스처 예산

WindowsEngine.ini 설정
코드 보기
[TextureStreaming] # GPU VRAM의 몇 %를 텍스처 풀로 사용할지 PoolSizeVRAMPercentage=50 # 또는 절대값 설정 (MB) # r.Streaming.PoolSize=2048

텍스처 해상도 최적화

📊 해상도별 메모리 사용량 (BC1)
4096x4096:
64 MB
2048x2048:
16 MB (4배 절약!)
1024x1024:
4 MB (16배 절약!)
최적화 팁

멀리 있는 오브젝트의 텍스처는 화면에서 작게 보이므로 낮은 해상도로도 충분합니다. LOD별로 다른 텍스처 해상도를 사용하세요.

03

Virtual Textures

극단적인 메모리 절약

Virtual Textures (VT)는 필요한 타일만 로드하여 극단적인 메모리 절약이 가능합니다.

Streaming Virtual Textures (SVT)

디스크에서 필요한 타일만 스트리밍. 대형 텍스처에 효과적

Runtime Virtual Textures (RVT)

런타임에 생성. 랜드스케이프 블렌딩, 데칼 등에 사용

VT 활성화 (Project Settings)
코드 보기
# Project Settings > Engine > Rendering Enable Virtual Texture Support: True # 텍스처 에셋 설정 Virtual Texture Streaming: True
04

텍스처 압축과 포맷 전략

플랫폼별 최적 텍스처 포맷

텍스처 포맷 선택은 VRAM 사용량에 직접적인 영향을 미칩니다. 용도에 맞는 압축 포맷을 사용하면 품질 손실 없이 메모리를 대폭 절약할 수 있습니다.

포맷 용도 압축비
BC1 (DXT1) 알파 없는 디퓨즈 6:1
BC3 (DXT5) 알파 있는 텍스처 4:1
BC5 노멀맵 4:1
BC7 고품질 (UI, 얼굴) 3:1
ASTC 모바일 범용 가변
// C++에서 텍스처 LOD Bias 설정 void AMyActor::OptimizeTextures() { UTexture2D* Texture = LoadObject<UTexture2D>( nullptr, TEXT("/Game/Textures/MyTexture")); if (Texture) { // LOD Bias로 실제 로드 해상도 제한 Texture->LODBias = 1; // Mip 1단계 내려서 로드 Texture->UpdateResource(); } } // 콘솔 명령으로 텍스처 그룹별 MaxLODSize 제한 // r.Streaming.MaxEffectiveScreenSize=0 (제한 해제)
Texture Group 활용

TextureGroup을 잘 분류하면 그룹별로 MaxLODSize와 LODBias를 일괄 제어할 수 있습니다. World, Character, UI, Effects 등 용도별로 그룹을 나누세요.

SUMMARY

핵심 요약

  • Texture Streaming: 거리/가시성 기반 동적 해상도 조절
  • stat Streaming: 텍스처 풀 사용량 모니터링
  • 해상도 감소: 4K -> 2K로 메모리 4배 절약
  • Virtual Textures: 필요한 타일만 로드
  • BC 압축 포맷: 용도별 최적 포맷 선택으로 VRAM 절약
  • RVT: 랜드스케이프, 데칼 블렌딩에 활용
다음 단계

다음 강의에서는 메모리 버짓 설계와 플랫폼별 메모리 배분 전략을 다룹니다.

PRACTICE

도전 과제

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

실습 1: 텍스처 메모리 분석

프로젝트에서 stat Streaming 명령어를 실행하여 텍스처 풀 사용량을 확인하세요. Over Budget 상태인 경우 가장 큰 텍스처 5개를 식별하고 해상도를 한 단계 내려 메모리 절약량을 측정합니다.

실습 2: Virtual Texture 전환

랜드스케이프에 Runtime Virtual Texture(RVT)를 설정하세요. RVT Volume을 배치하고 머티리얼에서 Runtime Virtual Texture Output 노드를 연결하여 레이어 블렌딩 품질을 유지하면서 메모리를 절약합니다.

심화 과제

TextureGroup별 MaxLODSize를 설정하여 월드 텍스처는 2048, UI 텍스처는 1024, 이펙트 텍스처는 512로 제한하는 플랫폼별 DeviceProfile을 구성하세요. VRAM 총 사용량이 2GB 이하가 되도록 최적화합니다.