UE5 Nanite & Lumen 최적화 전략
UE5의 두 핵심 렌더링 기술인 Nanite와 Lumen은 기존 워크플로를 크게 바꿉니다. Nanite는 폴리곤 예산 개념을 없애고, Lumen은 라이트맵 베이크를 대체합니다. 하지만 무조건 켠다고 성능이 보장되지 않으며 적절한 설정이 필요합니다.
1. Nanite — 가상화 지오메트리
섹션 제목: “1. Nanite — 가상화 지오메트리”동작 원리
섹션 제목: “동작 원리”Nanite는 메시를 LOD 없이 픽셀 단위로 필요한 디테일만 스트리밍합니다. 화면에서 1픽셀을 차지하는 삼각형은 1개의 삼각형으로 렌더링됩니다.
Nanite 활성화
섹션 제목: “Nanite 활성화”// C++에서 StaticMesh에 Nanite 설정UStaticMesh* Mesh = ...;Mesh->NaniteSettings.bEnabled = true;에디터에서: StaticMesh 에디터 → Nanite Settings → Enable Nanite ✓
Nanite에 적합한 메시
섹션 제목: “Nanite에 적합한 메시”| 적합 | 부적합 |
|---|---|
| 고폴리 배경 에셋 | 스킨 메시 (캐릭터) |
| 바위, 건물, 지형 디테일 | 투명/마스크 머티리얼 |
| 정적 메시 | WorldPositionOffset 사용 메시 |
| 10만+ 폴리곤 메시 | 빠르게 움직이는 작은 오브젝트 |
Nanite 디버그 뷰
섹션 제목: “Nanite 디버그 뷰”뷰포트 → Show → Visualize → Nanite또는 콘솔: r.Nanite.Visualize overview2. Lumen — 동적 전역 조명
섹션 제목: “2. Lumen — 동적 전역 조명”동작 원리
섹션 제목: “동작 원리”Lumen은 씬 SDF(Signed Distance Field)와 메시 카드를 이용해 실시간으로 간접광과 반사를 계산합니다. 라이트맵 UV나 베이크가 필요 없습니다.
Lumen 설정 (프로젝트 세팅)
섹션 제목: “Lumen 설정 (프로젝트 세팅)”Project Settings → Rendering: - Dynamic Global Illumination Method: Lumen - Reflection Method: Lumen - Shadow Map Method: Virtual Shadow MapsC++에서 Lumen 품질 설정
섹션 제목: “C++에서 Lumen 품질 설정”// PostProcessVolume 컴포넌트에서 설정PostProcessSettings.LumenFinalGatherQuality = 4.0f; // 1~4PostProcessSettings.LumenMaxTraceDistance = 20000.0f;PostProcessSettings.LumenSceneViewDistance = 20000.0f;PostProcessSettings.LumenSceneLightingQuality = 1.0f;3. Hardware vs Software Lumen
섹션 제목: “3. Hardware vs Software Lumen”| 항목 | Software Lumen | Hardware Ray Tracing Lumen |
|---|---|---|
| GPU 요구 | 중간 (DX11급) | 높음 (RTX급) |
| 정확도 | 좋음 | 매우 좋음 |
| 성능 | 빠름 | 느림 |
| 유리/거울 반사 | 제한적 | 완전 지원 |
Project Settings → Rendering → Ray Tracing → Enable Hardware Ray Tracing4. Virtual Shadow Maps (VSM)
섹션 제목: “4. Virtual Shadow Maps (VSM)”Lumen과 함께 사용하는 고품질 동적 그림자:
Project Settings → Rendering → Shadows → Shadow Map Method: Virtual Shadow Maps콘솔 명령으로 디버그:
r.Shadow.Virtual.ShowStats 1r.Shadow.Virtual.Cache 1 // 캐시 활성화 (성능 향상)5. 성능 최적화 콘솔 변수
섹션 제목: “5. 성능 최적화 콘솔 변수”; Engine.ini 또는 콘솔
; Lumen 품질 조정r.Lumen.Reflections.Allow 1r.Lumen.DiffuseIndirect.Allow 1r.Lumen.SceneLightingQuality 0.5 ; 0.25~1 (낮을수록 빠름)r.Lumen.FinalGather.Quality 0.5
; Nanite 설정r.Nanite.MaxPixelsPerEdge 1.0 ; 낮을수록 고품질 (기본 1.0)r.Nanite.Streaming.BudgetMB 512 ; VRAM 예산
; VSMr.Shadow.Virtual.ResolutionLodBiasDirectional -0.5 ; 품질 향상6. 플랫폼별 폴백
섹션 제목: “6. 플랫폼별 폴백”// 낮은 사양 플랫폼 감지 후 폴백if (!GRHISupportsRayTracing){ // Lumen Software 모드로 폴백 IConsoleManager::Get().FindConsoleVariable( TEXT("r.RayTracing.Enable"))->Set(0);}콘솔/모바일에서는 Lumen 대신 Screen Space Global Illumination(SSGI) 또는 라이트맵으로 폴백을 고려하세요.
7. 디버그 및 프로파일링
섹션 제목: “7. 디버그 및 프로파일링”// 렌더링 통계Stat GPUStat RHI
// Nanite 통계r.Nanite.ShowStats 1
// Lumen 시각화r.Lumen.Visualize.Overview 1Nanite는 정적 고폴리 메시에 무조건 적용하되 스킨 메시와 특수 머티리얼은 제외하세요. Lumen은 동적 조명이 필요한 씬에서 라이트맵을 대체하지만 SceneLightingQuality와 FinalGather.Quality를 타겟 플랫폼 성능에 맞게 조정해야 합니다. VSM과 함께 사용하면 그림자 품질도 크게 향상됩니다.