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 설정을 분리하고 전환 시 시각적 일관성을 유지하세요.