PART 2 · 강의 4/7

Lumen 오픈월드 최적화

Far Field, HLOD 연동, 대규모 월드 GI 전략

01

Lumen Far Field

원거리 GI 확장

기본 Lumen Scene은 카메라 200m 내에서 작동합니다. Far Field를 활성화하면 약 1km까지 GI와 리플렉션을 확장할 수 있습니다.

Far Field 설정 // Post Process Volume > Lumen Global Illumination Lumen Scene View Distance: 80000 // 800m까지 확장 (기본 20000) // Far Field는 Hardware RT 필요 // Project Settings에서 Hardware Ray Tracing 활성화 // 콘솔 변수 r.Lumen.ScreenProbeGather.ScreenTraces.MaxScreenTraceRadius 0.3 r.Lumen.FarField 1 // Far Field 활성화
📌 Far Field 요구사항
  • Hardware Ray Tracing 지원 GPU (RTX)
  • World Partition HLOD 시스템 활성화
  • Surface Cache 범위를 넘어선 저비용 근사치 사용
02

HLOD와 Lumen 연동

원거리 GI를 위한 HLOD 설정

HLOD Lumen 설정 // HLOD Layer Asset에서 Lumen 관련 설정 HLOD Layer Settings: Layer Type: MeshMerge Mesh Merge Settings: Generate Nanite Enabled Mesh: true Compute Lod Data in Post Process: true Allow Distance Field: true // 원거리 Lumen을 위해 필요 Support Lumen Mesh Cards: true // HLOD가 Lumen에 참여

C++ HLOD Lumen 제어

C++ #include "WorldPartition/HLOD/HLODLayer.h" #include "Components/PrimitiveComponent.h" // HLOD Actor의 Lumen 참여 설정 void ConfigureHLODForLumen(AActor* HLODActor) { TArray<UPrimitiveComponent*> Primitives; HLODActor->GetComponents<UPrimitiveComponent>(Primitives); for (UPrimitiveComponent* Prim : Primitives) { // Distance Field 활성화 (Lumen Software RT용) Prim->bAffectDistanceFieldLighting = true; // 동적 간접광 영향받음 Prim->bAffectDynamicIndirectLighting = true; } }
03

스카이라이트와 환경광

오픈월드 환경광 설정

Sky Light 설정 // Sky Light Actor Light: Source Type: SLS Captured Scene // 또는 SLS Specified Cubemap Real Time Capture: true // 동적 캡처 Lumen: Cast Lumen Shadows: true Lumen Indirect Lighting: true // 오픈월드에서는 Directional Light + Sky Light 조합 Directional Light: Cast Shadows: true Cast Ray Traced Shadows: true // Hardware RT 사용 시

C++ 스카이라이트 동적 제어

C++ #include "Components/SkyLightComponent.h" #include "Engine/SkyLight.h" // 시간대에 따른 스카이라이트 업데이트 void ATimeOfDayManager::UpdateSkyLight() { if (SkyLight && SkyLight->SkyLightComponent) { USkyLightComponent* SkyComp = SkyLight->SkyLightComponent; // 스카이 큐브맵 재캡처 (비용 있음) SkyComp->RecaptureSky(); // 강도 조절 SkyComp->SetIntensity(CalculateSkyIntensity()); // 색상 조절 SkyComp->SetLightColor(CalculateSkyColor()); } } // 실시간 캡처 설정 void ATimeOfDayManager::SetRealTimeCapture(bool bEnable) { if (SkyLight && SkyLight->SkyLightComponent) { SkyLight->SkyLightComponent->bRealTimeCapture = bEnable; SkyLight->SkyLightComponent->MarkRenderStateDirty(); } }
04

실내/실외 전환

동굴, 건물 진입 시 라이팅 처리

C++ // 실내/실외 전환 시스템 UCLASS() class AIndoorOutdoorVolume : public AActor { GENERATED_BODY() public: UPROPERTY(EditAnywhere) TObjectPtr<UPostProcessComponent> IndoorPostProcess; UPROPERTY(EditAnywhere) TObjectPtr<UBoxComponent> TriggerVolume; UPROPERTY(EditAnywhere) float TransitionDuration = 1.0f; private: UFUNCTION() void OnEnterIndoor(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& Hit) { if (OtherActor->IsA<ACharacter>()) { // 실내 포스트 프로세스 블렌딩 IndoorPostProcess->BlendWeight = 1.0f; // Lumen 설정 조정 AdjustLumenForIndoor(); } } void AdjustLumenForIndoor() { // 실내에서는 Final Gather Quality 높이기 IConsoleManager::Get().FindConsoleVariable( TEXT("r.Lumen.FinalGatherQuality"))->Set(2.0f); // 최대 트레이스 거리 줄이기 (성능 향상) IConsoleManager::Get().FindConsoleVariable( TEXT("r.Lumen.MaxTraceDistance"))->Set(5000); } };
💡 빛 샘 방지

실내 공간의 벽 두께를 최소 10cm 이상으로 설정하세요. 얇은 벽은 Lumen 레이가 통과하여 빛 샘 현상이 발생합니다.

05

오픈월드 Lumen 최적화 전략

실제 프로젝트 적용 가이드

📌 최적화 체크리스트
  • Scene View Distance — 필요한 만큼만 (20000 ~ 80000)
  • Final Gather Quality — 실외 0.5 ~ 1.0, 실내 1.5 ~ 2.0
  • HLOD Distance Field — 원거리용 HLOD에 DF 활성화
  • Far Field — Hardware RT 있으면 활성화 고려
  • 스카이라이트 캡처 — 필요시에만 RecaptureSky()
스케일러빌리티별 설정 // Scalability.ini 예시 [GlobalIlluminationQuality@0] // Low r.Lumen.DiffuseIndirect.Allow=0 r.Lumen.Reflections.Allow=0 [GlobalIlluminationQuality@2] // High r.Lumen.FinalGatherQuality=0.75 r.Lumen.ScreenProbeGather.ScreenSpaceWeight=0.5 r.Lumen.MaxTraceDistance=15000 [GlobalIlluminationQuality@3] // Epic r.Lumen.FinalGatherQuality=1.0 r.Lumen.ScreenProbeGather.ScreenSpaceWeight=1.0 r.Lumen.MaxTraceDistance=30000
SUMMARY

핵심 요약

  • Far Field — Hardware RT로 약 1km까지 GI 확장
  • HLOD 연동 — Distance Field, Lumen Mesh Cards 활성화
  • 스카이라이트 — Real Time Capture, 동적 색상/강도 조절
  • 실내/실외 — Post Process Volume으로 전환, 벽 두께 10cm+
  • 스케일러빌리티 — 품질 레벨별 Lumen 설정 분리
PRACTICE

도전 과제

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

실습 1: 오픈월드 Lumen 거리 설정

r.Lumen.DistantScene.MaxTraceDistance를 조정하여 넓은 오픈월드에서도 원거리 GI가 작동하도록 설정하세요. 근거리/원거리 씬의 GI 품질 차이를 비교하세요.

실습 2: Lumen Scene Detail 최적화

r.LumenScene.SurfaceCache.CardMinResolution과 r.Lumen.TraceMeshSDFs.Allow를 조정하여, 오픈월드 RPG에서 실내와 실외의 최적 설정을 찾으세요. 시각적 품질과 성능 트레이드오프를 분석하세요.

심화 과제: 하이브리드 GI 전략 구현

오픈월드의 넓은 실외 영역은 Lumen, CPU 부하가 심한 던전 내부는 Screen Space GI를 혼합하여 사용하는 전략을 설계하세요. Post Process Volume으로 영역별 GI 설정을 분리하고 전환 시 시각적 일관성을 유지하세요.