루멘은 1080p의 8ms 및 4ms 프레임 예산으로 콘솔에서 30 및 60fps(초당 프레임 수)를 타기팅하여 불투명/반투명 머티리얼 및 볼류메트릭 포그에 글로벌 일루미네이션과 리플렉션을 구현합니다. 언리얼 엔진에서는 미리 구성된 엔진 퀄리티 세팅을 사용하여 루멘의 타깃 FPS를 제어합니다. 에픽(Epic) 엔진 퀄리티 레벨은 30fps를 타기팅합니다. 높음(High) 엔진 퀄리티 레벨은 Nintendo Switch 2를 제외한 현재 세대 콘솔에서 60fps를 타깃으로 합니다. '중간(Medium)' 글로벌 일루미네이션 엔진 퀄리티 레벨은 Switch 2 및 저사양 PC를 타깃으로 합니다.
루멘은 4k 출력을 위해 언리얼 엔진 5의 템포럴 슈퍼 해상도(Temporal Super Resolution, TSR)와 함께 템포럴 업샘플링(Temporal Upsampling, TU)을 사용합니다. 루멘과 기타 기능은 TSR에 의해 샘플링되지 않는 더 낮은 내부 해상도(1080p)를 사용합니다. 4k 해상도에서 이는 현저히 낮은 퀄리티 세팅으로 루멘을 네이티브로 실행하는 것보다 더 나은 최종 이미지 퀄리티를 제공합니다.
엔진 퀄리티 세팅
루멘 퀄리티는 글로벌 일루미네이션 및 리플렉션 퀄리티 그룹에 의해 설정됩니다. 각 하위 레벨은 상위 레벨 비용의 약 절반이지만, 해당 비용으로 가능한 최고의 퀄리티를 제공합니다.
'엔진 퀄리티(Scalability)' 세팅은 레벨 에디터의 뷰포트 관련 세팅(Settings) > 뷰포트 엔진 퀄리티 세팅(Viewport Scalability Settings)에서 찾을 수 있습니다. 인게임에서는 GameUserSettings 및 그래픽 세팅 메뉴로 엔진 퀄리티 세팅을 제어합니다(예시는 라이라 프로젝트 참고). 콘솔 변수 sg.GlobalIlluminationQuality 및 sg.ReflectionQuality를 사용해도 됩니다.
시네마틱(Cinematic) 엔진 퀄리티 레벨은 무비 렌더 큐를 타깃으로 합니다.
에픽 엔진 퀄리티 레벨은 30fps 콘솔 예산을 타기팅합니다.
높음 엔진 퀄리티 레벨은 60fps 콘솔 예산을 타깃으로 합니다.
중간 엔진 퀄리티 레벨은 Switch 2 및 중간 사양 PC에서 60fps를 타깃으로 합니다.
낮음(Low) 엔진 퀄리티 레벨에서는 루멘 기능이 비활성화됩니다.
기본적으로 언리얼 엔진에서는 콘솔에서 30fps를 타기팅합니다. 60fps를 타기팅하려면 콘솔 디바이스 프로파일에서 글로벌 일루미네이션(Global Illumination) 및 리플렉션(Reflections) 퀄리티 그룹을 높음으로 설정합니다. 이러한 프로파일은 [Your Project Name]\Platforms[Console]\Config\ 폴더에서 찾을 수 있습니다. 예를 들어 [Your Project Name]\Platforms\PS5\Config\PS5DeviceProfiles.ini일 수 있습니다.
60fps를 타기팅하는 PlayStation 5 디바이스 프로파일은 다음과 같습니다.
[PS5 DeviceProfile]
; Set Lumen GI and reflection quality to High, targeting 60 fps
+CVars=sg.GlobalIlluminationQuality=2
+CVars=sg.ReflectionQuality=2루멘 라이트
중간 퀄리티 리플렉션(sg.ReflectionQuality 1)에서는 루멘 리플렉션이 비활성화되고, 매끄러운 표면에는 루멘 글로벌 일루미네이션의 러프 스페큘러와 함께 스크린 스페이스 리플렉션(Screen Space Reflections, SSR)이 대신 사용됩니다.
중간 글로벌 일루미네이션 퀄리티의 루멘(sg.GlobalIlluminationQuality 1)은 r.Lumen.FinalGatherMethod 0 세팅으로 활성화되는 복사도 파이널 개더(Irradiance Final Gather)라는 특수한 파이널 개더를 사용합니다.
복사도 필드 개더(Irradiance Field Gather)는 픽셀 주변에 월드 스페이스 래디언스 캐시 프로브를 배치하고, 복사도를 사전 계산한 다음 프로브 오클루전이 적용된 픽셀로 보간합니다. 더 빠르지만 퀄리티가 낮은 글로벌 일루미네이션을 제공하며, 저사양 PC와 Switch 2에서 60 FPS(핸드헬드 모드 포함)를 타깃으로 합니다.
루멘 기능을 비활성화하는 스케일 다운
디폴트 글로벌 일루미네이션(Global Illumination) 및 리플렉션(Reflection) 퀄리티 그룹은 \Engine\Config\BaseScalability.ini에 있습니다. 이러한 세팅은 퀄리티 레벨 간에 간접광이 비슷하게 보이도록 시도합니다. 이렇게 하면 루멘의 비용을 줄이면서도 플랫폼별로 라이팅을 다시 실행할 필요가 없다는 추가적인 이점이 있습니다.
중간 퀄리티 레벨
루멘 복사도 필드는 이를 지원하는 플랫폼에서 글로벌 일루미네이션에 사용되며, 그렇지 않은 경우는 다음과 같습니다.
소규모 앰비언트 오클루전의 경우, '포스트 프로세스 볼륨'에서 구성되었다면 스크린 스페이스 앰비언트 오클루전(Screen Space Ambient Occlusion)이 허용됩니다.
대규모 앰비언트 오클루전의 경우, 디스턴스 필드 앰비언트 오클루전(Distance Field Ambient Occlusion)이 루멘 글로벌 일루미네이션을 대체합니다.
낮음 퀄리티 레벨
섀도 없는 스카이라이트만 사용합니다.
스카이라이트 섀도잉의 형태가 없으므로 중간 퀄리티 레벨에 더 비슷하도록 스카이라이트 강도를 줄입니다(
r.SkylightIntensityMultiplier=0.7).
소프트웨어 레이 트레이싱
소프트웨어 레이 트레이싱은 루멘에서 가장 빠른 트레이싱 방식이며, 하드웨어 레이 트레이싱을 사용할 수 없는 게임이나 하드웨어 레이 트레이싱을 지원하지 않는 GPU에 대한 예비로 사용하는 것이 좋습니다.
이 환경설정에서 루멘은 단일 병합 글로벌 디스턴스 필드를 트레이싱합니다. 글로벌 디스턴스 필드를 트레이싱하면 인스턴스 수 및 다른 인스턴스와의 오버랩에 영향을 받지 않고 트레이싱할 수 있습니다. 이는 대량의 겹치는 인스턴스가 있는 콘텐츠에도 매우 적합합니다.
글로벌 디스턴스 필드 업데이트 퍼포먼스는 여전히 인스턴스 수에 따라 달라지지만, 캐싱이 많이 되어 있어 업데이트 비용을 줄여 줍니다.
글로벌 디스턴스 필드는 무버블 오브젝트와 스태틱 오브젝트를 별도로 캐시합니다. 컴포넌트 모빌리티를 올바르게 구성하는 것이 중요합니다. 스태틱 액터를 이동하면 스태틱 캐시가 무효화되어 상당한 오버헤드가 발생할 수 있기 때문입니다. r.GlobalDistanceField.Debug.LogModifiedPrimitives를 사용하여 런타임에서 어떤 스태틱 액터가 이동하는지 디버깅할 수 있습니다.
컴포넌트에서 디스턴스 필드 라이팅 영향(Affects Distance Field Lighting)을 비활성화하거나 스태틱 메시 에디터에서 디스턴스 필드 해상도 스케일(Distance Field Resolution Scale)을 0으로 설정하여 디스턴스 필드 씬의 렌더링에서 개별 디스턴스 필드 인스턴스를 제거합니다. 글로벌 일루미네이션이나 리플렉션에 큰 영향이 없는 중요성이 떨어지는 인스턴스를 제거하면 글로벌 디스턴스 필드 업데이트 퍼포먼스를 최적화하는 데 도움이 될 수 있습니다.
하드웨어 레이 트레이싱
하드웨어 레이 트레이싱은 루멘에 향상된 퀄리티를 제공하며, 30 및 60fps 콘솔에서 기본 옵션으로 사용하는 것이 좋습니다. 이 방식은 소프트웨어 레이 트레이싱보다 비용이 많이 들며, 인스턴스 오버랩이 많아지면 영향을 크게 받으므로 신중히 씬 최적화를 진행해야 합니다.
하드웨어 레이 트레이싱은 프레임마다 최상위 가속 구조체(Top Level Acceleration Structure, TLAS)를 리빌드해야 합니다. 리빌드 비용은 이 가속 구조체에 포함해야 하는 인스턴스의 수에 비례합니다. 일반적으로 차세대 콘솔에서 좋은 퍼포먼스를 달성하기 위해서는 컬링 후 레이 트레이싱 씬에서 인스턴스가 10만 개 미만이어야 합니다. Microsoft Windows에서는 인스턴스 수가 다를 수 있습니다.
Stat SceneRendering을 사용하면 레이 트레이싱 씬에 표시되는 인스턴스 수를 확인할 수 있습니다. 여기에서는 레이 트레이싱 활성 인스턴스(Ray tracing active instances) 통계를 확인해야 합니다.
레이 트레이싱 씬 컬링 세팅은 씬의 레이 트레이싱 인스턴스 수를 제어하는 가장 강력한 툴입니다. 레이 트레이싱 컬링은 구성을 단순화하기 위해 기본적으로 활성화되어 있지만, [Your Project Name]\Config\ 폴더의 DefaultEngine.ini 환경설정 파일에서 추가로 변경할 수 있습니다.
[SystemSettings]
r.RayTracing.Culling=3
r.RayTracing.Culling.Radius=15000
r.RayTracing.Culling.Angle=0.5레벨의 액터에서 레이 트레이싱에서 표시(Visible In Ray Tracing)를 비활성화하여 레이 트레이싱 씬에서 개별 인스턴스를 제거할 수 있습니다.
퍼포먼스 카운터 및 디버그 뷰를 포함한 하드웨어 레이 트레이싱 퍼포먼스에 대한 자세한 내용은 레이 트레이싱 퍼포먼스 가이드를 참고하세요.
원거리 필드(Far Field)를 통해 글로벌 일루미네이션 및 리플렉션 디스턴스를 희생하지 않고도 적극적으로 컬링을 적용할 수 있습니다. 레이 트레이싱 씬 반경 이후 모든 레이는 파 필드 트레이스를 사용하여 더 저렴한 비용으로 글로벌 일루미네이션 및 리플렉션을 확장합니다. 원거리 필드를 구성하는 방법에 대한 자세한 내용은 루멘 기술 디테일을 참고하세요.
파 필드와 결합된 레이 트레이싱 씬 컬링을 늘리면 루멘 하드웨어 레이 트레이싱 퍼포먼스 규모를 줄이고 최적화하는 데 도움이 됩니다.
하드웨어 레이 트레이싱 퍼포먼스는 씬에서 메시가 겹치는 정도에 따라 달라집니다. 스카이박스처럼 전체 씬에 겹치는 큰 메시는 퍼포먼스에 문제가 됩니다. 이러한 메시는 레이 트레이싱에서 표시를 비활성화해야 합니다. 그래스 메시와, 교차 결합된 메시의 레이어가 여러 개 있는 키트배싱된 메시에서도 트레이싱 비용을 절감할 수 있습니다.
하드웨어 레이 트레이싱 퍼포먼스 기준에 맞게 씬을 유지하려면 겹치는 메시를 합리적인 수준으로 유지해야 합니다.
리플렉션을 위한 히트 라이팅(Hit Lighting for Reflections)은 향상된 리플렉션 퀄리티를 제공합니다. 이는 히트 포인트마다 머티리얼과 라이팅을 평가하지만, 게임용으로는 비용이 많이 듭니다. 머티리얼이 사소하지 않고 Ray Tracing Quality Switch 노드로 머티리얼이 최적화되지 않은 경우, 게임에서는 사용하지 않는 것이 좋습니다. 콘솔에서는 r.Lumen.HardwareRayTracing.MaxIterations를 사용하여 BVH 탐색 반복 작업 횟수를 제한하고 길고 비용이 많이 드는 레이를 일찍 중단할 수 있습니다. 종단한 레이는 래디언스가 0으로 완전히 가려진 것으로 처리되어 초과 오클루전을 발생시킵니다. 이러한 세팅을 통해 퍼포먼스 미세 조정과 겹치는 지오메트리가 많은 씬의 부분으로 인한 퍼포먼스 문제를 방지할 수 있습니다.
팁
루멘 리플렉션(Lumen Reflections) 비용은 화면에 스무드 머티리얼 또는 러프니스 정도가 낮은 머티리얼이 얼마나 있는지에 따라 달라질 수 있습니다. 이러한 머티리얼에는 전용 리플렉션 레이가 필요합니다. 기본적으로, 0.4 러프니스 미만의 모든 픽셀은 리플렉션 레이를 트레이싱합니다. 러프니스가 그 이상인 픽셀은 루멘 글로벌 일루미네이션을 기반으로 무료 리플렉션 근사치를 얻습니다.
루멘 리플렉션 러프니스 한계치
포스트 프로세스 볼륨(Post Process Volume)의 트레이스할 최대 러프니스(Max Roughness To Trace) 세팅을 사용하여 러프니스 한계치를 제어할 수 있습니다. 이는 r.Lumen.Reflections.MaxRoughnessToTraceClamp를 사용하는 엔진 퀄리티 세팅에서 추가적으로 범위제한될 수 있습니다. 설정된 러프니스 한계치 미만의 모든 픽셀은 전용 루멘 리플렉션 레이를 트레이싱하며, 러프니스가 한계치 이상인 픽셀은 비용이 들지 않는 거친 스페큘러 근사치가 됩니다.
폴리지에는 독립적인 러프니스 한계치가 있습니다. 양면 폴리지(Two Sided Foliage) 및 서브서피스(Subsurface) 셰이딩 모델을 사용하는 머티리얼이 있는 모든 픽셀은 폴리지로 취급됩니다. r.Lumen.Reflections.MaxRoughnessToTraceForFoliage를 사용하여 폴리지 러프니스를 제어할 수 있습니다. 전용 리플렉션 레이를 필요로 하는 픽셀은 레벨 뷰포트의 뷰 모드 메뉴에 있는 퍼포먼스 개요(Performance Overview) 뷰 모드를 사용하여 시각화할 수 있습니다.
폴리지의 리플렉션은 보통 잘 보이지 않습니다. 최대 폴리지 러프니스 한계치를 0으로 설정하면 퀄리티 희생 없이 상당한 퍼포먼스 향상을 이룰 수 있습니다.
루멘 리플렉션 다운샘플 인수
루멘 리플렉션 다운샘플 인수는 r.Lumen.Reflections.DownsampleFactor로 설정됩니다. 퀄리티와 퍼포먼스 사이에서 선택할 수 있도록 1 또는 2로 설정할 수 있습니다. 콘솔 변수가 2로 설정된 경우, 쿼드의 픽셀 중 하나에 대해 한 개의 레이만 트레이싱합니다. 더 적은 레이를 트레이싱하면 퍼포먼스가 향상되지만, 낮은 해상도 트레이스 결과에서 전체 해상도 라이팅을 재구성해야 하므로 리플렉션이 더 흐려지고 불안정해질 수 있습니다.
r.Lumen.Reflections.DownsampleCheckerboard를 사용하여 활성화할 수 있는 다운샘플 체커보드에 대한 중간 옵션도 있습니다. 이 모드에서는 4픽셀당 1개의 레이를 트레이싱하는 대신 2픽셀당 1개의 레이를 트레이싱합니다. 퀄리티와 퍼포먼스는 전체 해상도 트레이싱과 1/4 해상도 트레이싱 사이로 예상됩니다.
스크린 스페이스 리플렉션으로 루멘 리플렉션 대체하기
스크린 스페이스 리플렉션(Screen Space Reflections, SSR)으로 루멘 리플렉션을 대체하면 리플렉션 비용을 더 적극적으로 줄일 수 있습니다. 이렇게 하려면 r.Lumen.Reflections.Allow=0 세팅을 사용하면 됩니다. 예를 들어 XSXDeviceProfiles.ini 파일에 다음을 추가하면 Xbox Series S에서 1ms를 절약할 수 있습니다.
[XSX_Lockhart DeviceProfile]
; Use SSR in lieu of Lumen reflections for perf
+CVars=r.Lumen.Reflections.Allow=0아래 예시는 루멘 리플렉션이 비활성화되었을 때도 루멘 글로벌 일루미네이션이 어떻게 거친 스페큘러를 제공하는지 보여줍니다.
디퓨즈 글로벌 일루미네이션을 위해 트레이싱된 레이를 재사용함으로써 루멘 리플렉션에서 일부 퍼포먼스 향상을 얻을 수 있습니다. 이 실험 단계 패스에서는 러프니스가 0.2~0.4 범위에 있는 픽셀이 많은 씬만 속도가 증가합니다. r.Lumen.Reflections.RadianceCache=1을 사용하여 이를 활성화할 수 있습니다.
루멘 씬 라이팅
루멘 씬 라이팅(Lumen Scene Lighting)은 글로벌 일루미네이션과 리플렉션 모두에 대한 라이팅 레이 히트에 사용되는 표면 캐시의 직접광 및 간접광을 업데이트합니다. 퍼포먼스는 프레임마다 업데이트되는 표면 캐시의 비율에 따라 달라집니다. 업데이트 속도는 직접광의 경우 r.LumenScene.DirectLighting.UpdateFactor, 간접광의 경우 r.LumenScene.DirectLighting.MaxLightsPerTile 및 r.LumenScene.Radiosity.UpdateFactor를 사용하여 개별적으로 설정할 수 있습니다.
루멘 씬 라이팅은 표면 캐시 타일당 가장 중요한 라이트의 작은 서브셋을 선택하므로, 퍼포먼스가 씬의 라이트 총 수에 영향을 덜 받습니다. r.LumenScene.DirectLighting.MaxLightsPerTile을 사용하여 타일별 라이트 수를 제어할 수 있습니다.
루멘 월드 스페이스 래디언스 캐시
루멘은 월드 스페이스 래디언스 캐시(World Space Radiance Cache)를 사용하여 원거리 라이팅을 캐싱합니다.
개별 프로브 해상도는 r.Lumen.ScreenProbeGather.RadianceCache.ProbeResolution 및 r.Lumen.TranslucencyVolume.RadianceCache.ProbeResolution을 사용하여 제어할 수 있습니다. 값이 높을수록 간접광의 퀄리티가 높아지지만 업데이트 비용이 더 많이 듭니다.
두 번째 주요 퍼포먼스 컨트롤은 프레임별로 업데이트되는 프로브의 수입니다. 이는 r.Lumen.ScreenProbeGather.RadianceCache.NumProbesToTraceBudget 및 r.Lumen.TranslucencyVolume.RadianceCache.NumProbesToTraceBudget을 사용하여 설정할 수 있습니다. 값이 높을수록 라이팅의 반응성이 높아지지만 비용이 더 많이 듭니다. 이 값을 너무 낮게 설정하면 루멘이 느리게 따라잡아야 하므로 카메라가 빠르게 움직이는 동안 라이팅 팝이 발생할 수 있습니다. 따라서 어느 시점에는 r.Lumen.ScreenProbeGather.RadianceCache.GridResolution 및 r.Lumen.TranslucencyVolume.GridPixelSize를 사용하여 프로브 그리드의 해상도를 더 축소해야 합니다.
루멘 스크린 프로브 개더
스크린 프로브 개더(Screen Probe Gather)는 픽셀에서 레이를 트레이싱하고 들어오는 라이팅을 통합하여 최종 개더를 담당합니다.
여기에서 주요 퍼포먼스 컨트롤은 프로브 간격(r.Lumen.ScreenProbeGather.DownsampleFactor) 및 스크린 스페이스 프로브의 해상도(r.Lumen.ScreenProbeGather.TracingOctahedronResolution)입니다. 프로브 간격을 늘리면 간접 섀도의 퀄리티가 저하되고 간접광이 흐려집니다. 스크린 프로브 해상도를 낮추면 간접광의 방향성과 거친 리플렉션의 퀄리티가 감소합니다.
간접광 통합은 필요에 따라 r.Lumen.ScreenProbeGather.IntegrateDownsampleFactor 2를 사용하여 절반 해상도로 실행할 수 있습니다. 이는 통합 속도를 크게 높여주지만, 추가 노이즈를 유발하고 노멀을 부드럽게 만들 수 있습니다. 따라서 디폴트 엔진 퀄리티 또는 디바이스 프리셋에서는 기본적으로 활성화되어 있지 않습니다.
루멘 프로파일링
루멘은 다음 세 개의 패스로 나누어집니다.
표면 캐시 라이팅을 평가하기 위한 루멘 씬 라이팅(Lumen Scene Lighting)
디퓨즈 글로벌 일루미네이션과 러프 리플렉션 및 반투명 글로벌 일루미네이션을 평가하기 위한 루멘 스크린 프로브 개더(Lumen Screen Probe Gather)
부드러운 표면의 전용 리플렉션 레이를 평가하기 위한 루멘 리플렉션
Stat GPU는 개별 루멘 패스를 포함한 GPU 패스 타이밍을 표시합니다.
퍼포먼스 분석을 더 자세하게 살펴보려면 ProfileGPU 명령을 사용합니다. RenderDoc 같은 타사 프로파일링 툴을 사용할 수도 있습니다.
루멘은 비동기 컴퓨트를 사용하여 다른 워크로드와 병렬로 실행됩니다. 루멘 개별성을 측정하려면 콘솔 명령 r.Lumen.AsyncCompute 0을 사용하여 비활성화하는 것이 좋습니다. 비동기 연산에 대한 자세한 내용은 다음 섹션을 참조하세요.
비동기 컴퓨팅
루멘은 콘솔에서 비동기 컴퓨트를 사용합니다. 이를 통해 GPU는 루멘 작업을 나나이트 외 지오메트리 패스 및 직접광 패스와 겹치게 할 수 있습니다. 또한 루멘은 루멘 스크린 프로브 개더 및 루멘 리플렉션(Lumen Reflections) 패스와 겹칠 수도 있습니다.
비동기 연산은 일반 워크로드에 맞춰 미리 구성되어 있지만, 경우에 따라 기본값이 아닌 세팅이 더 빠를 수 있습니다. 더 빠른 경우 중 하나는 그래픽 큐에 대량의 직접광이나 섀도 맵 작업이 있어 루멘 스크린 프로브 개더 패스가 루멘 리플렉션 패스와 오버랩될 수 없는 경우입니다. 이 경우, 루멘을 완전히 비동기 연산 패스로 실행하는 것이 더 빠를 수 있습니다. 다음 세팅을 사용하면 됩니다.
r.LumenScene.Lighting.AsyncCompute=1
r.Lumen.DiffuseIndirect.AsyncCompute=1
r.Lumen.Reflections.AsyncCompute=1비동기 연산은 루멘이 다른 렌더링 패스와 겹치게 합니다. 타이밍에 루멘의 비용과 루멘과 오버랩되는 다른 워크로드의 비용이 모두 포함되기 때문에 프로파일링이 더 어려워집니다. 루멘을 개별적으로 프로파일링할 때는 비동기 컴퓨팅을 비활성화합니다.
엔진 퀄리티 레퍼런스
기본 엔진 퀄리티 및 플랫폼별 디바이스 프로파일에는 개별 루멘 세팅이 포함되어 있습니다. 이러한 세팅은 중요한 최신 렌더러 퍼포먼스 엔진 퀄리티 세팅의 레퍼런스로 유용합니다. 또한, 커스텀 엔진 퀄리티 세팅의 좋은 시작점이기도 합니다. 기본 엔진 퀄리티 레벨을 사용하여 30fps 또는 60fps를 달성하고 레벨 간에 일관된 모습도 유지하는 것이 좋습니다. 다음 파일 중 하나에서 이러한 엔진 퀄리티 세팅을 살펴볼 수 있습니다.
[Engine Root]\Engine\Config\BaseScalability.ini
[Engine Root]\Platforms\[Console Name]\Base[ConsoleName]DeviceProfile.ini