Lighting & Lumen
UE5's default lighting pipeline is fully dynamic: Lumen provides global illumination
(GI) and reflections without a bake. Understanding the light component hierarchy,
mobility rules, and the Lumen/post-process stack lets you get correct and performant
results quickly.
When to use this skill
- Creating or modifying a light component in C++ (type selection, intensity/color/units,
attenuation, IES profiles, light functions).
- Choosing the right mobility for a light and understanding the GI/shadow consequences.
- Enabling, tuning, or debugging Lumen GI and Lumen Reflections.
- Setting up sky atmosphere, sky light, volumetric clouds, and exponential height fog.
- Configuring post process volumes for exposure, auto-exposure, bloom, color grading,
or per-area Lumen overrides.
- Placing reflection captures for areas Lumen cannot reach (legacy or spec-heavy interiors).
- Deciding when to use baked Lightmass vs Lumen.
Light component hierarchy
All light components derive from USceneComponent through the following chain:
USceneComponent
└─ ULightComponentBase (LightComponentBase.h:15) — Intensity, LightColor, CastShadows
├─ ULightComponent (LightComponent.h:48) — Temperature, ShadowBias, IES, LightFunction
│ ├─ ULocalLightComponent (LocalLightComponent.h:18) — AttenuationRadius, IntensityUnits
│ │ ├─ UPointLightComponent (PointLightComponent.h:19) — SourceRadius, SourceLength
│ │ │ └─ USpotLightComponent (SpotLightComponent.h:17) — InnerConeAngle, OuterConeAngle
│ │ └─ URectLightComponent (RectLightComponent.h:24) — SourceWidth, SourceHeight, BarnDoorAngle
│ └─ UDirectionalLightComponent (DirectionalLightComponent.h:18) — DynamicShadowCascades, bAtmosphereSunLight
└─ USkyLightComponent (SkyLightComponent.h:101) — bRealTimeCapture, SourceType, Cubemap
See references/light-components-and-mobility.md
for C++ patterns and per-type properties.
Light types at a glance
| Component |
Shape |
Use for |
UDirectionalLightComponent |
infinite parallel rays |
sun, moon, any directional source |
UPointLightComponent |
sphere/capsule omnidirectional |
light bulbs, candles, explosions |
USpotLightComponent : Point |
cone |
torches, headlights, stage spots |
URectLightComponent |
planar rectangle |
TVs, windows, fluorescent strips |
USkyLightComponent |
cubemap capture |
ambient IBL, sky bounce |
Mobility and its lighting consequences
Mobility is set on the component via SetMobility(EComponentMobility::Movable).
| Mobility |
Direct light |
Indirect light |
Shadows |
Runtime change |
| Static |
baked into lightmaps |
baked |
baked |
none |
| Stationary |
dynamic direct, baked indirect |
baked (Lightmass) |
mixed (baked static, dynamic movable) |
color/intensity only |
| Movable |
fully dynamic |
Lumen GI (no bake) |
Virtual Shadow Maps |
all properties |
Key rule for Lumen: only Movable lights feed Lumen GI. Static lights are entirely
stored in lightmaps and their contribution is disabled when Lumen is enabled.
Stationary lights contribute baked indirect; their direct pass is dynamic.
Stationary limit: a single primitive can overlap at most four Stationary lights
before the fifth reverts to fully dynamic (expensive). The editor shows this with a red
channel-limit indicator.
Lumen (dynamic GI + reflections)
Lumen is the default GI system for new UE5 projects. It computes diffuse interreflection
and specular reflections in real time, across scales from millimeters to kilometers.
Enabling: Project Settings → Rendering → Dynamic Global Illumination: Lumen;
Reflection Method: Lumen. Enabling Lumen automatically enables Generate Mesh
Distance Fields (required for software ray tracing) and disables precomputed lightmaps.
Two tracing modes:
- Software Ray Tracing — traces against Signed Distance Fields; works on all
DX11+ hardware; requires
Generate Mesh Distance Fields in project settings.
- Hardware Ray Tracing (HRT) — uses the GPU BVH; higher quality reflections and
hit-lighting; enabled in Project Settings → Rendering → Hardware Ray Tracing.
Quality is tuned per-camera in a APostProcessVolume via FPostProcessSettings
fields (all in Engine/Classes/Engine/Scene.h):
FPostProcessSettings field |
Purpose |
LumenSceneLightingQuality (line 1783) |
fidelity of the Lumen scene cache |
LumenFinalGatherQuality (line 1799) |
noise vs cost of the final gather pass |
LumenMaxTraceDistance (line 1811) |
max ray length; too small leaks GI into caves |
LumenReflectionQuality (line 1846) |
reflection ray quality |
See references/lumen-gi-and-reflections.md
for the full Lumen settings table, emissive GI, and hardware ray tracing notes.
Virtual Shadow Maps (VSMs)
VSMs are the default shadow technology for Movable and Stationary lights when Lumen
is active. They render into a virtualized (sparse) 16k×16k shadow atlas, support
Nanite geometry natively, and require no per-light manual distance tuning.
Enable via Project Settings → Rendering → Shadows → Shadow Map Method: Virtual
Shadow Maps. The CVars r.Shadow.Virtual.* control quality and cache behaviour.
Key shadow properties on ULightComponent (LightComponent.h):
ShadowBias (line 113) / ShadowSlopeBias (line 123) — self-shadow acne
ContactShadowLength (line 131) — screen-space contact shadow ray length
CastShadows / CastDynamicShadows / CastStaticShadows — per-channel toggle
For UDirectionalLightComponent, cascaded shadow maps are set with
DynamicShadowCascades (line 73) and DynamicShadowDistanceMovableLight (line 59).
See references/shadows-and-postprocess.md.
Sky, atmosphere, and fog
A complete outdoor sky in C++ uses three cooperating actors/components:
UDirectionalLightComponent with bAtmosphereSunLight = true — drives the sky color.
USkyAtmosphereComponent (Components/SkyAtmosphereComponent.h) — physically-based
atmosphere scattering.
USkyLightComponent with bRealTimeCapture = true — recaptures the rendered sky
every tick for ambient/IBL.
Fog depth and god rays come from UExponentialHeightFogComponent
(Components/ExponentialHeightFogComponent.h). Enable volumetric fog on it for
VolumetricFogScatteringDistribution and VolumetricFogAlbedo to feed Lumen GI.
Post Process Volume and exposure
APostProcessVolume (Engine/PostProcessVolume.h) hosts FPostProcessSettings
(Engine/Scene.h:711). Set bUnbound = true for a global volume; bounded volumes
blend by distance (Priority and BlendRadius fields).
Exposure settings in FPostProcessSettings:
AutoExposureMethod (line 1491) — AEM_Histogram (default) or AEM_Basic
AutoExposureBias (line 1933) — EV100 offset for all metering modes
AutoExposureMinBrightness / AutoExposureMaxBrightness (lines 1994, 2002) —
clamp the auto-exposure range (in EV100 or cd/m² depending on project setting)
For predictable results, prefer manual exposure over auto: set
AutoExposureMethod to AEM_Manual and fix the EV100 directly with AutoExposureBias.
Auto-exposure "breathes" as the camera pans, which reads as incorrect to players.
Color grading and tone curve live alongside exposure in the same struct; see
references/shadows-and-postprocess.md.
Reflection captures (legacy / spec fill)
UReflectionCaptureComponent (Components/ReflectionCaptureComponent.h:30) and its
concrete subclasses (USphereReflectionCaptureComponent,
UBoxReflectionCaptureComponent) provide cubemap IBL for surfaces with low roughness
in areas where Lumen reflections have insufficient quality (e.g., enclosed interiors or
mobile targets). They are not updated at runtime by default; call
MarkDirtyForRecaptureOrUpload() to force a refresh.
With Lumen enabled, reflection captures are mostly replaced by Lumen Reflections for
Movable surfaces. They remain relevant for Static/Stationary geometry and as a fallback
for hardware that does not meet Lumen's requirements.
C++ snippet — creating and configuring a light
// In actor constructor:
#include "Components/PointLightComponent.h"
UPROPERTY(VisibleAnywhere)
TObjectPtr<UPointLightComponent> FillLight;
// Constructor body:
FillLight = CreateDefaultSubobject<UPointLightComponent>(TEXT("FillLight"));
FillLight->SetupAttachment(RootComponent);
FillLight->SetIntensity(2000.f); // lumens (with inverse-sq falloff)
FillLight->SetLightColor(FLinearColor(1.f, 0.95f, 0.8f));
FillLight->SetAttenuationRadius(600.f);
FillLight->CastShadows = true;
// Runtime: change intensity and disable shadow casting
FillLight->SetIntensity(500.f);
FillLight->SetCastShadows(false);
Key APIs on ULightComponent (all BlueprintCallable):
SetIntensity(float) — total output in the component's intensity units
SetLightColor(FLinearColor, bool bSRGB) — filter tint
SetTemperature(float) / SetUseTemperature(bool) — color temperature (Kelvin)
SetShadowBias(float) / SetShadowSlopeBias(float) — self-shadow tuning
SetLightFunctionMaterial(UMaterialInterface*) — project a material as a cookie
On ULocalLightComponent:
SetAttenuationRadius(float) — bounding radius; affects tile-culling cost
SetIntensityUnits(ELightUnits) — Candelas, Lumens, or EV100
Gotchas
- Static lights ignored by Lumen — Lumen disables lightmap contributions; only
Movable (and partially Stationary) lights drive dynamic GI.
- Mesh distance fields off — Lumen's software path silently degrades or produces
black GI; enable in Project Settings → Rendering → Generate Mesh Distance Fields.
- More than four overlapping Stationary lights — fifth light degrades to Movable
shadow cost; keep count per-area ≤ 4.
- Auto-exposure surprise — scenes look inconsistent as the camera moves; use
manual exposure for cinematic or stylized work.
- Sky Light not recapturing — with
bRealTimeCapture = false, the sky light bakes
once; call RecaptureSky() or set bRealTimeCapture = true when the sky changes.
- VSM invalidation cost — moving or spawning many Movable meshes near shadowed
lights forces cache invalidation; pool or batch spawn off-screen when possible.
- Rect lights and light functions —
URectLightComponent does not support
LightFunctionMaterial (only Directional/Point/Spot do).
- Lightmap UVs for baked lighting — if you fall back to Lightmass, meshes must
have a valid lightmap UV channel or shadows bake black.
Version notes
- Lumen is the default GI system for new UE5 projects; existing UE4 projects converted
to UE5 do not automatically enable it (avoids breaking baked workflows).
- MegaLights (
bAllowMegaLights on ULightComponent, line 171) is a UE5.5+ feature
for stochastic many-light rendering; present in 5.8 but still experimental.
- VSMs replaced the legacy Cascaded Shadow Map default for PC/console in UE5; mobile
platforms still use traditional shadow maps.
References & source material
Engine source (UE 5.8, under Engine/Source/Runtime/Engine/Classes/):
Components/LightComponentBase.h — ULightComponentBase:15; Intensity:37,
LightColor:44, CastShadows:58, IndirectLightingIntensity:116,
SetCastShadows():146, GetLightColor():150.
Components/LightComponent.h — ULightComponent:48; Temperature:57,
ShadowBias:113, ShadowSlopeBias:123, ContactShadowLength:131,
bAllowMegaLights:171, LightFunctionMaterial:205, IESTexture:219,
SetIntensity():286, SetLightColor():296, SetTemperature():303.
Components/LocalLightComponent.h — ULocalLightComponent:18;
IntensityUnits:28, AttenuationRadius:46, SetAttenuationRadius():53.
Components/PointLightComponent.h — UPointLightComponent:19;
SourceRadius:45, SourceLength:59, SetSourceRadius():71.
Components/SpotLightComponent.h — USpotLightComponent:17;
InnerConeAngle:23, OuterConeAngle:27.
Components/RectLightComponent.h — URectLightComponent:24;
SourceWidth:33, SourceHeight:40, BarnDoorAngle:46, BarnDoorLength:52.
Components/SkyLightComponent.h — USkyLightComponent:101;
bRealTimeCapture:108, SourceType:112, RecaptureSky():304.
Components/DirectionalLightComponent.h — UDirectionalLightComponent:18;
DynamicShadowDistanceMovableLight:59, DynamicShadowCascades:73,
bAtmosphereSunLight:164.
Components/ReflectionCaptureComponent.h — UReflectionCaptureComponent:30.
Engine/PostProcessVolume.h — APostProcessVolume:22; bUnbound:51.
Engine/Scene.h — FPostProcessSettings:711; AutoExposureMethod:1491,
AutoExposureBias:1933, AutoExposureMinBrightness:1994,
AutoExposureMaxBrightness:2002, LumenSceneLightingQuality:1783,
LumenFinalGatherQuality:1799, LumenMaxTraceDistance:1811,
LumenReflectionQuality:1846.
Official docs (UE 5.8):
Deep-dive references in this skill:
- references/light-components-and-mobility.md —
per-type component properties, C++ authoring patterns, mobility decision guide.
- references/lumen-gi-and-reflections.md —
Lumen architecture, settings table, hardware vs software RT, emissive GI, sky integration.
- references/shadows-and-postprocess.md —
VSMs, CSMs, shadow bias, post process volume exposure, color grading, Lumen PPV overrides.
Related skills: ue-nanite-and-rendering, ue-materials-and-shaders.
1---2name: ue-lighting-and-lumen3description: Light Unreal scenes in C++ and configure them correctly — light component types (UDirectionalLightComponent, UPointLightComponent, USpotLightComponent, URectLightComponent, USkyLightComponent), mobility (Static/Stationary/Movable) and its impact on GI, baking, and runtime cost, Lumen global illumination and reflections (enabling, quality settings, hardware vs software ray tracing), Virtual Shadow Maps, sky and atmosphere (USkyAtmosphereComponent, UExponentialHeightFogComponent), post process volumes for exposure/auto-exposure and Lumen overrides, and reflection captures. Use when creating or configuring light components in C++, choosing light mobility, enabling or troubleshooting Lumen GI/reflections, setting up sky/fog/atmosphere, tuning exposure or color grading, placing reflection captures, or deciding between baked and dynamic lighting.4---56# Lighting & Lumen78UE5's default lighting pipeline is **fully dynamic**: Lumen provides global illumination9(GI) and reflections without a bake. Understanding the light component hierarchy,10mobility rules, and the Lumen/post-process stack lets you get correct and performant11results quickly.1213## When to use this skill1415- Creating or modifying a light component in C++ (type selection, intensity/color/units,16 attenuation, IES profiles, light functions).17- Choosing the right mobility for a light and understanding the GI/shadow consequences.18- Enabling, tuning, or debugging Lumen GI and Lumen Reflections.19- Setting up sky atmosphere, sky light, volumetric clouds, and exponential height fog.20- Configuring post process volumes for exposure, auto-exposure, bloom, color grading,21 or per-area Lumen overrides.22- Placing reflection captures for areas Lumen cannot reach (legacy or spec-heavy interiors).23- Deciding when to use baked Lightmass vs Lumen.2425## Light component hierarchy2627All light components derive from `USceneComponent` through the following chain:2829```30USceneComponent31└─ ULightComponentBase (LightComponentBase.h:15) — Intensity, LightColor, CastShadows32 ├─ ULightComponent (LightComponent.h:48) — Temperature, ShadowBias, IES, LightFunction33 │ ├─ ULocalLightComponent (LocalLightComponent.h:18) — AttenuationRadius, IntensityUnits34 │ │ ├─ UPointLightComponent (PointLightComponent.h:19) — SourceRadius, SourceLength35 │ │ │ └─ USpotLightComponent (SpotLightComponent.h:17) — InnerConeAngle, OuterConeAngle36 │ │ └─ URectLightComponent (RectLightComponent.h:24) — SourceWidth, SourceHeight, BarnDoorAngle37 │ └─ UDirectionalLightComponent (DirectionalLightComponent.h:18) — DynamicShadowCascades, bAtmosphereSunLight38 └─ USkyLightComponent (SkyLightComponent.h:101) — bRealTimeCapture, SourceType, Cubemap39```4041See [references/light-components-and-mobility.md](references/light-components-and-mobility.md)42for C++ patterns and per-type properties.4344## Light types at a glance4546| Component | Shape | Use for |47|---|---|---|48| `UDirectionalLightComponent` | infinite parallel rays | sun, moon, any directional source |49| `UPointLightComponent` | sphere/capsule omnidirectional | light bulbs, candles, explosions |50| `USpotLightComponent` : Point | cone | torches, headlights, stage spots |51| `URectLightComponent` | planar rectangle | TVs, windows, fluorescent strips |52| `USkyLightComponent` | cubemap capture | ambient IBL, sky bounce |5354## Mobility and its lighting consequences5556Mobility is set on the component via `SetMobility(EComponentMobility::Movable)`.5758| Mobility | Direct light | Indirect light | Shadows | Runtime change |59|---|---|---|---|---|60| **Static** | baked into lightmaps | baked | baked | none |61| **Stationary** | dynamic direct, baked indirect | baked (Lightmass) | mixed (baked static, dynamic movable) | color/intensity only |62| **Movable** | fully dynamic | Lumen GI (no bake) | Virtual Shadow Maps | all properties |6364Key rule for Lumen: **only Movable lights feed Lumen GI**. Static lights are entirely65stored in lightmaps and their contribution is disabled when Lumen is enabled.66Stationary lights contribute baked indirect; their direct pass is dynamic.6768Stationary limit: a single primitive can overlap at most **four** Stationary lights69before the fifth reverts to fully dynamic (expensive). The editor shows this with a red70channel-limit indicator.7172## Lumen (dynamic GI + reflections)7374Lumen is the default GI system for new UE5 projects. It computes diffuse interreflection75and specular reflections in real time, across scales from millimeters to kilometers.7677**Enabling:** Project Settings → Rendering → Dynamic Global Illumination: **Lumen**;78Reflection Method: **Lumen**. Enabling Lumen automatically enables Generate Mesh79Distance Fields (required for software ray tracing) and disables precomputed lightmaps.8081**Two tracing modes:**82- **Software Ray Tracing** — traces against Signed Distance Fields; works on all83 DX11+ hardware; requires `Generate Mesh Distance Fields` in project settings.84- **Hardware Ray Tracing (HRT)** — uses the GPU BVH; higher quality reflections and85 hit-lighting; enabled in Project Settings → Rendering → Hardware Ray Tracing.8687Quality is tuned per-camera in a `APostProcessVolume` via `FPostProcessSettings`88fields (all in `Engine/Classes/Engine/Scene.h`):8990| `FPostProcessSettings` field | Purpose |91|---|---|92| `LumenSceneLightingQuality` (line 1783) | fidelity of the Lumen scene cache |93| `LumenFinalGatherQuality` (line 1799) | noise vs cost of the final gather pass |94| `LumenMaxTraceDistance` (line 1811) | max ray length; too small leaks GI into caves |95| `LumenReflectionQuality` (line 1846) | reflection ray quality |9697See [references/lumen-gi-and-reflections.md](references/lumen-gi-and-reflections.md)98for the full Lumen settings table, emissive GI, and hardware ray tracing notes.99100## Virtual Shadow Maps (VSMs)101102VSMs are the default shadow technology for Movable and Stationary lights when Lumen103is active. They render into a virtualized (sparse) 16k×16k shadow atlas, support104Nanite geometry natively, and require no per-light manual distance tuning.105106Enable via Project Settings → Rendering → Shadows → Shadow Map Method: **Virtual107Shadow Maps**. The CVars `r.Shadow.Virtual.*` control quality and cache behaviour.108109Key shadow properties on `ULightComponent` (`LightComponent.h`):110- `ShadowBias` (line 113) / `ShadowSlopeBias` (line 123) — self-shadow acne111- `ContactShadowLength` (line 131) — screen-space contact shadow ray length112- `CastShadows` / `CastDynamicShadows` / `CastStaticShadows` — per-channel toggle113114For `UDirectionalLightComponent`, cascaded shadow maps are set with115`DynamicShadowCascades` (line 73) and `DynamicShadowDistanceMovableLight` (line 59).116117See [references/shadows-and-postprocess.md](references/shadows-and-postprocess.md).118119## Sky, atmosphere, and fog120121A complete outdoor sky in C++ uses three cooperating actors/components:1221231. `UDirectionalLightComponent` with `bAtmosphereSunLight = true` — drives the sky color.1242. `USkyAtmosphereComponent` (`Components/SkyAtmosphereComponent.h`) — physically-based125 atmosphere scattering.1263. `USkyLightComponent` with `bRealTimeCapture = true` — recaptures the rendered sky127 every tick for ambient/IBL.128129Fog depth and god rays come from `UExponentialHeightFogComponent`130(`Components/ExponentialHeightFogComponent.h`). Enable volumetric fog on it for131`VolumetricFogScatteringDistribution` and `VolumetricFogAlbedo` to feed Lumen GI.132133## Post Process Volume and exposure134135`APostProcessVolume` (`Engine/PostProcessVolume.h`) hosts `FPostProcessSettings`136(`Engine/Scene.h:711`). Set `bUnbound = true` for a global volume; bounded volumes137blend by distance (Priority and BlendRadius fields).138139Exposure settings in `FPostProcessSettings`:140- `AutoExposureMethod` (line 1491) — `AEM_Histogram` (default) or `AEM_Basic`141- `AutoExposureBias` (line 1933) — EV100 offset for all metering modes142- `AutoExposureMinBrightness` / `AutoExposureMaxBrightness` (lines 1994, 2002) —143 clamp the auto-exposure range (in EV100 or cd/m² depending on project setting)144145For predictable results, prefer **manual exposure** over auto: set146`AutoExposureMethod` to `AEM_Manual` and fix the EV100 directly with `AutoExposureBias`.147Auto-exposure "breathes" as the camera pans, which reads as incorrect to players.148149Color grading and tone curve live alongside exposure in the same struct; see150[references/shadows-and-postprocess.md](references/shadows-and-postprocess.md).151152## Reflection captures (legacy / spec fill)153154`UReflectionCaptureComponent` (`Components/ReflectionCaptureComponent.h:30`) and its155concrete subclasses (`USphereReflectionCaptureComponent`,156`UBoxReflectionCaptureComponent`) provide cubemap IBL for surfaces with low roughness157in areas where Lumen reflections have insufficient quality (e.g., enclosed interiors or158mobile targets). They are **not** updated at runtime by default; call159`MarkDirtyForRecaptureOrUpload()` to force a refresh.160161With Lumen enabled, reflection captures are mostly replaced by Lumen Reflections for162Movable surfaces. They remain relevant for Static/Stationary geometry and as a fallback163for hardware that does not meet Lumen's requirements.164165## C++ snippet — creating and configuring a light166167```cpp168// In actor constructor:169#include "Components/PointLightComponent.h"170171UPROPERTY(VisibleAnywhere)172TObjectPtr<UPointLightComponent> FillLight;173174// Constructor body:175FillLight = CreateDefaultSubobject<UPointLightComponent>(TEXT("FillLight"));176FillLight->SetupAttachment(RootComponent);177FillLight->SetIntensity(2000.f); // lumens (with inverse-sq falloff)178FillLight->SetLightColor(FLinearColor(1.f, 0.95f, 0.8f));179FillLight->SetAttenuationRadius(600.f);180FillLight->CastShadows = true;181```182183```cpp184// Runtime: change intensity and disable shadow casting185FillLight->SetIntensity(500.f);186FillLight->SetCastShadows(false);187```188189Key APIs on `ULightComponent` (all `BlueprintCallable`):190- `SetIntensity(float)` — total output in the component's intensity units191- `SetLightColor(FLinearColor, bool bSRGB)` — filter tint192- `SetTemperature(float)` / `SetUseTemperature(bool)` — color temperature (Kelvin)193- `SetShadowBias(float)` / `SetShadowSlopeBias(float)` — self-shadow tuning194- `SetLightFunctionMaterial(UMaterialInterface*)` — project a material as a cookie195196On `ULocalLightComponent`:197- `SetAttenuationRadius(float)` — bounding radius; affects tile-culling cost198- `SetIntensityUnits(ELightUnits)` — `Candelas`, `Lumens`, or `EV100`199200## Gotchas201202- **Static lights ignored by Lumen** — Lumen disables lightmap contributions; only203 Movable (and partially Stationary) lights drive dynamic GI.204- **Mesh distance fields off** — Lumen's software path silently degrades or produces205 black GI; enable in Project Settings → Rendering → Generate Mesh Distance Fields.206- **More than four overlapping Stationary lights** — fifth light degrades to Movable207 shadow cost; keep count per-area ≤ 4.208- **Auto-exposure surprise** — scenes look inconsistent as the camera moves; use209 manual exposure for cinematic or stylized work.210- **Sky Light not recapturing** — with `bRealTimeCapture = false`, the sky light bakes211 once; call `RecaptureSky()` or set `bRealTimeCapture = true` when the sky changes.212- **VSM invalidation cost** — moving or spawning many Movable meshes near shadowed213 lights forces cache invalidation; pool or batch spawn off-screen when possible.214- **Rect lights and light functions** — `URectLightComponent` does not support215 `LightFunctionMaterial` (only Directional/Point/Spot do).216- **Lightmap UVs for baked lighting** — if you fall back to Lightmass, meshes must217 have a valid lightmap UV channel or shadows bake black.218219## Version notes220221- Lumen is the default GI system for new UE5 projects; existing UE4 projects converted222 to UE5 do not automatically enable it (avoids breaking baked workflows).223- MegaLights (`bAllowMegaLights` on `ULightComponent`, line 171) is a UE5.5+ feature224 for stochastic many-light rendering; present in 5.8 but still experimental.225- VSMs replaced the legacy Cascaded Shadow Map default for PC/console in UE5; mobile226 platforms still use traditional shadow maps.227228## References & source material229230Engine source (UE 5.8, under `Engine/Source/Runtime/Engine/Classes/`):231- `Components/LightComponentBase.h` — `ULightComponentBase`:15; `Intensity`:37,232 `LightColor`:44, `CastShadows`:58, `IndirectLightingIntensity`:116,233 `SetCastShadows()`:146, `GetLightColor()`:150.234- `Components/LightComponent.h` — `ULightComponent`:48; `Temperature`:57,235 `ShadowBias`:113, `ShadowSlopeBias`:123, `ContactShadowLength`:131,236 `bAllowMegaLights`:171, `LightFunctionMaterial`:205, `IESTexture`:219,237 `SetIntensity()`:286, `SetLightColor()`:296, `SetTemperature()`:303.238- `Components/LocalLightComponent.h` — `ULocalLightComponent`:18;239 `IntensityUnits`:28, `AttenuationRadius`:46, `SetAttenuationRadius()`:53.240- `Components/PointLightComponent.h` — `UPointLightComponent`:19;241 `SourceRadius`:45, `SourceLength`:59, `SetSourceRadius()`:71.242- `Components/SpotLightComponent.h` — `USpotLightComponent`:17;243 `InnerConeAngle`:23, `OuterConeAngle`:27.244- `Components/RectLightComponent.h` — `URectLightComponent`:24;245 `SourceWidth`:33, `SourceHeight`:40, `BarnDoorAngle`:46, `BarnDoorLength`:52.246- `Components/SkyLightComponent.h` — `USkyLightComponent`:101;247 `bRealTimeCapture`:108, `SourceType`:112, `RecaptureSky()`:304.248- `Components/DirectionalLightComponent.h` — `UDirectionalLightComponent`:18;249 `DynamicShadowDistanceMovableLight`:59, `DynamicShadowCascades`:73,250 `bAtmosphereSunLight`:164.251- `Components/ReflectionCaptureComponent.h` — `UReflectionCaptureComponent`:30.252- `Engine/PostProcessVolume.h` — `APostProcessVolume`:22; `bUnbound`:51.253- `Engine/Scene.h` — `FPostProcessSettings`:711; `AutoExposureMethod`:1491,254 `AutoExposureBias`:1933, `AutoExposureMinBrightness`:1994,255 `AutoExposureMaxBrightness`:2002, `LumenSceneLightingQuality`:1783,256 `LumenFinalGatherQuality`:1799, `LumenMaxTraceDistance`:1811,257 `LumenReflectionQuality`:1846.258259Official docs (UE 5.8):260- Light Types and Their Mobility —261 <https://dev.epicgames.com/documentation/unreal-engine/light-types-and-their-mobility-in-unreal-engine>262- Lumen Global Illumination and Reflections —263 <https://dev.epicgames.com/documentation/unreal-engine/lumen-global-illumination-and-reflections-in-unreal-engine>264- Shadowing —265 <https://dev.epicgames.com/documentation/unreal-engine/shadowing-in-unreal-engine>266- Virtual Shadow Maps —267 <https://dev.epicgames.com/documentation/unreal-engine/virtual-shadow-maps-in-unreal-engine>268- Post Process Effects —269 <https://dev.epicgames.com/documentation/unreal-engine/post-process-effects-in-unreal-engine>270271Deep-dive references in this skill:272- [references/light-components-and-mobility.md](references/light-components-and-mobility.md) —273 per-type component properties, C++ authoring patterns, mobility decision guide.274- [references/lumen-gi-and-reflections.md](references/lumen-gi-and-reflections.md) —275 Lumen architecture, settings table, hardware vs software RT, emissive GI, sky integration.276- [references/shadows-and-postprocess.md](references/shadows-and-postprocess.md) —277 VSMs, CSMs, shadow bias, post process volume exposure, color grading, Lumen PPV overrides.278279Related skills: `ue-nanite-and-rendering`, `ue-materials-and-shaders`.