USpotLightComponent incorrectly applies IntensityUnits cone solid-angle remapping when bUseIESBrightness is enabled, distorting physical IES intensity

Summary

While using a AI agent for a problem I was having simulating lighting conditions of a construction site, my agents claims to have found a bug. I read over it’s work and it seems to be correct. This whole bug report is written by the AI agent.

–

(Tested in Unreal Engine 5.8.0, ++UE5+Release-5.8, Changelist 55116800)

When “Use IES Intensity” (bUseIESBrightness = true) is enabled on a USpotLightComponent, the engine extracts the profile’s physical peak intensity in Candelas from UTextureLightProfile::Brightness.

However, in USpotLightComponent::ComputeLightBrightness(), the engine does not check whether bUseIESBrightness is active before evaluating IntensityUnits. If the spotlight was left on its default unit (ELightUnits::Lumens), the engine erroneously treats the candela value as lumens and divides it by the cone solid angle:

Ω = 2π(1 - cos(θ_half))

Because candelas are already luminous intensity per steradian, this multiplies the fixture’s physical beam intensity by 1/Ω (causing a 1.4× to 5× brightness inflation depending on the cone angle). If IntensityUnits was left as Unitless, it multiplies the physical candelas by 16. Furthermore, because the Details panel greys out the Intensity Units dropdown once “Use IES Intensity” is checked, users cannot see that this hidden setting is actively corrupting physical lighting calculations.

What Type of Bug are you experiencing?

Foundation (C++ Tools, Profiling, & Pipeline)

Steps to Reproduce

  1. In a blank level, spawn a SpotLight at Z = 1000 cm (10 meters above the ground), aimed straight down (Pitch = -90).
  2. Assign any standard IES Profile texture with a known peak intensity (e.g. 10,000 cd).
  3. In the spotlight’s Details panel, check “Use IES Intensity” (bUseIESBrightness = true).
  4. Read the illuminance (lux) at the ground nadir point (E = I/d² = 10000/10² = 100 lux).
  5. Adjust the spotlight’s Outer Cone Angle from 80° to 30°.
  6. Switch the component’s IntensityUnits setting between Candelas, Lumens, and Unitless.

Expected Result

When “Use IES Intensity” is enabled, the physical candela distribution from the IES profile should govern the light output. Peak ground illuminance under the light should remain E = I₀/d² (100 lux) regardless of adjustments to the spotlight’s cone angles or whatever IntensityUnits was set to prior to checking the box.

Observed Result

Center ground illuminance varies drastically with cone angle changes because the candela value is divided by the cone’s solid angle when IntensityUnits == Lumens. Narrow spotlight cones produce unphysical brightness spikes several times higher than the IES profile specification. When IntensityUnits == Unitless, center illuminance is scaled by 16 (1,600 lux). Ground truth matching only occurs if the user explicitly switches IntensityUnits to Candelas.

Affects Versions

5.8

Platform(s)

Windows

Additional Notes

Once again, this report is AI-generated, but based on my understanding, it looks to be accurate. I’m doing a fairly niche operation, so it’s realistic to have found it.