The Lumen Performance Challenge
Lumen gives you fully dynamic global illumination and reflections — no more baking lightmaps, no more waiting hours for light builds. But that dynamism comes at a GPU cost, and hitting 60fps with Lumen enabled requires deliberate optimization.
The good news: with the right settings, Lumen can run at 60fps on mid-range hardware. The key is understanding which settings have the biggest performance impact and where you can trade visual quality for frames.
Understanding Lumen's Two Rendering Paths
Lumen offers two main ray tracing methods:
Software Ray Tracing (Default in older versions)
- Uses screen-space traces + signed distance fields
- Works on all hardware (no RT cores required)
- Lower quality, especially for off-screen reflections
- Cheaper per-ray but needs more rays for quality
Hardware Ray Tracing (Recommended, Default in UE 5.5+)
- Uses GPU RT cores for acceleration
- Higher quality traces with fewer rays needed
- Requires RTX 2000+ or RX 6000+ series GPU
- Better for reflections and complex geometry
Starting with UE 5.5, Hardware Ray Tracing is the default and recommended path. If your target hardware supports it, use it — you'll get better quality at comparable or better performance.
Essential CVars for Performance Tuning
These console variables have the most impact on Lumen performance. Add them to DefaultEngine.ini under [/Script/Engine.RendererSettings] or adjust via scalability settings.
Global Illumination Quality
; GI quality - lower means fewer traces per pixel
r.Lumen.DiffuseIndirect.Allow=1
r.Lumen.TraceMeshSDFs=1
; Trace quality (1=low, 4=epic). 2 is the sweet spot for 60fps
r.Lumen.ScreenProbeGather.TracingOctahedronResolution=2
; Temporal accumulation - higher means smoother GI but more ghosting
r.Lumen.ScreenProbeGather.TemporalFilterProbes=1
Reflection Quality
; Reflection quality (0=off, 1=low, 4=epic)
r.Lumen.Reflections.Allow=1
; Max roughness for reflections - lower saves performance
r.Lumen.Reflections.MaxRoughnessToTrace=0.4
; Reflection downscale factor (2=half res, saves significant GPU time)
r.Lumen.Reflections.DownsampleFactor=2
Hardware Ray Tracing Specific
; Enable HWRT for Lumen
r.Lumen.HardwareRayTracing=1
; Hit lighting mode (0=surface cache, 1=hit lighting for reflections)
; Surface cache is cheaper, hit lighting is higher quality
r.Lumen.HardwareRayTracing.Reflections.HitLighting=0
; Max ray distance - shorter saves performance in interior scenes
r.Lumen.HardwareRayTracing.MaxTraceDistance=10000
Resolution Scaling
; Lumen scene resolution (0.5=half, 1.0=full). 0.5-0.75 is good for 60fps
r.Lumen.SceneUpdateRayTracingBudget=0.5
; Final gather resolution scale
r.Lumen.ScreenProbeGather.ScreenProbeDownsampleFactor=16
Scene-Level Optimization
CVars are only part of the equation. How you build your scene matters just as much.
Light Complexity
Every light source adds tracing cost. Optimize by:
- Limiting overlapping lights: Keep no more than 4 dynamic lights affecting any single surface
- Using attenuation radius: Set tight radius bounds on point and spot lights
- Disabling "Affect Global Illumination" on small accent lights that don't need to bounce
- Using static lights where appropriate: Lumen works alongside baked lighting — use static lights for unchanging fixtures
Mesh Complexity and Distance Fields
Lumen's software path relies on Mesh Distance Fields. Optimize them:
- Enable Generate Mesh Distance Field only on meshes that matter for GI (walls, floors, large objects)
- Disable it on small props, particles, and highly detailed meshes
- Set Distance Field Resolution Scale to 0.5 on less important meshes
- Use simpler collision meshes for distance field generation
Material Considerations
Certain material properties affect Lumen performance:
- Emissive materials: Keep emissive surface area reasonable — large emissive surfaces increase tracing cost
- Translucent materials: Lumen doesn't trace through translucent surfaces — design accordingly
- Two-sided foliage: More expensive for Lumen — use single-sided where possible
- Surface cache: Ensure important surfaces have good UV coverage for the Lumen surface cache
Profiling Workflow
Never optimize blind. Use these tools to identify your actual bottlenecks:
GPU Profiler
profilegpu
Look for these Lumen-specific passes:
- Lumen Scene Update: Time spent updating the scene representation
- Lumen Screen Probe Gather: Main GI computation
- Lumen Reflections: Reflection trace cost
- Lumen Radiosity: Indirect bounce computation
Unreal Insights
For detailed per-frame analysis:
- Launch with
-trace=default,gpu - Open the Timing Insights panel
- Filter for "Lumen" to see all related passes
- Compare frame times across different camera positions
Stat Commands
stat GPU // Overall GPU timing breakdown
stat LumenScene // Lumen-specific statistics
stat RHI // Memory and resource usage
The 60fps Budget
At 60fps, you have 16.67ms per frame total. A typical budget allocation:
| Pass | Budget |
|---|---|
| Lumen GI | 3-4ms |
| Lumen Reflections | 1-2ms |
| Lumen Scene Update | 1ms |
| Nanite Rasterization | 2-3ms |
| Shadow Rendering | 2ms |
| Post Processing | 1-2ms |
| Game Logic + CPU | 3-4ms |
| Total | ~16ms |
If Lumen is taking more than 5-6ms combined, you need to reduce quality settings or simplify your scene.
Scalability Profiles
Set up proper scalability so players can adjust Lumen quality:
Low (Integrated GPU / Steam Deck)
- Lumen GI: Disabled (fall back to SSGI or baked)
- Lumen Reflections: Disabled (fall back to SSR)
- Use Screen Space Global Illumination as fallback
Medium (GTX 1660 / RX 580)
- Lumen GI: Software, reduced resolution
- Lumen Reflections: Disabled or minimal
r.Lumen.ScreenProbeGather.TracingOctahedronResolution=1
High (RTX 3060 / RX 6700)
- Lumen GI: Hardware RT, standard resolution
- Lumen Reflections: Enabled, half resolution
r.Lumen.ScreenProbeGather.TracingOctahedronResolution=2
Epic (RTX 4070+ / RX 7800+)
- Lumen GI: Hardware RT, full resolution
- Lumen Reflections: Enabled, full resolution
r.Lumen.ScreenProbeGather.TracingOctahedronResolution=4
Common Performance Traps
The Large Open World Trap
Lumen traces are more expensive in open environments with long view distances. Mitigation:
- Use Far Field settings to reduce trace quality at distance
- Set shorter max trace distances for outdoor scenes
- Consider hybrid approaches: Lumen indoors, simpler GI outdoors
The Emissive Surface Trap
Large emissive surfaces (TV screens, lava pools, neon signs) force Lumen to trace from many directions. Keep emissive surfaces reasonably sized and use the Emissive Boost carefully.
The Mirror Trap
Highly reflective surfaces (mirrors, polished metal) require high-quality reflection traces. Limit the number of mirror-like surfaces in any single view, or reduce their reflection quality individually.
The Small Object Trap
Tiny objects with high geometric detail create expensive distance fields. Use LODs or disable distance field generation on small props.
Quick Wins for Immediate Performance Gains
If you're over budget, try these in order of impact:
- Reduce reflection quality:
r.Lumen.Reflections.DownsampleFactor=2— often saves 1-2ms - Lower trace resolution:
r.Lumen.ScreenProbeGather.TracingOctahedronResolution=2— saves 1-3ms - Disable hit lighting on reflections:
r.Lumen.HardwareRayTracing.Reflections.HitLighting=0— saves 0.5-1ms - Reduce max roughness for reflections: Only trace reflections on smooth surfaces — saves based on scene content
- Tighten light attenuation radii: Reduces the volume Lumen needs to trace
- Enable upscaling: Use TSR, FSR, or DLSS to render at lower internal resolution
Lumen + Nanite: The Power Combo
Lumen and Nanite are designed to work together. Nanite's virtualized geometry provides accurate surface cache data for Lumen, while Lumen's hardware RT traces benefit from Nanite's BVH acceleration structure.
For the best results:
- Enable both Nanite and Lumen on the same meshes
- Ensure Nanite meshes have good UV layouts for the surface cache
- Use Nanite's automatic LOD to keep geometric complexity manageable for Lumen traces
Dynamic global illumination at 60fps is achievable — it just requires understanding the system and making informed tradeoffs. Profile, iterate, and don't be afraid to reduce quality where players won't notice the difference.