UPDATE: Should be fixed as of CL#52537078 (fb7af1) USD: Bake all frames of exposure animation tracks.
When exporting Unreal Engine spot lights from a level to USD, lights with identical EV intensity and source radius settings but different outer cone angles produce inconsistent intensity values in the exported USD file.
The root cause seems to be in UsdToUnreal::ConvertLuxShapingAPIIntensityAttr (and my other places where this similar conversion happens for spotlight), the light area in square meters is computed as:
float SolidAngle = 2.f * PI * (1.f - GetSpotLightCosHalfConeAngle(OuterConeAngle)); float AreaInSqMeters = FMath::Max(SolidAngle * FMath::Square(SourceRadius / 100.f), KINDA_SMALL_NUMBER);
It seems the FMath::Max(..., KINDA_SMALL_NUMBER) guard was intended to prevent division by zero. However, because KINDA_SMALL_NUMBER = 1e-4 and the clamp triggers when: SolidAngle × (R/100)² < 1e-4
For example for source radius 1 any cone angle below 32.77°, the area is hard-clamped to 1e-4 regardless of the actual solid angle, making all such lights produce identical — and incorrect — intensity values.
The fix we have internally so far:
Move the clamp inside the expression so it applies only to the radius term, not to the combined product:
// BEFORE (buggy): clamps the whole expression, causing plateau below 32.77° float AreaInSqMeters = FMath::Max(SolidAngle * FMath::Square(SourceRadius / 100.f), KINDA_SMALL_NUMBER); // AFTER (fixed): clamps only radius², preserving correct solid angle scaling float AreaInSqMeters = SolidAngle * FMath::Max(FMath::Square(SourceRadius / 100.f), KINDA_SMALL_NUMBER);
It's unclear whether the actual formula used here actually represent what happens in engine, what appears to happen in engine is in order to preserve the same visual brightness of a light when it's outer cone increases you need to increase the lumens intensity. But when exporting those lights to USD the opposite happens - the intensity value grows bigger as we the outer cone decrease.
Steps to Reproduce
Expected Result: The intensity increases as the outer cone angle decreases.
Actual Result:
- 20°, 30° → intensity = same value, clamped in code
- 40°, 50° → intensity = different value, unclamped
The transition point for source radius 1 is at ~32.77°: all cone angles below this threshold are clamped to the same constant intensity; above it, intensities vary correctly with the solid angle.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-372625 in the post.
| 0 |
| Component | UE - Editor - Content Pipeline - USD |
|---|---|
| Affects Versions | 5.7 |
| Fix Commit | 52537078 |
|---|
| Created | Apr 3, 2026 |
|---|---|
| Resolved | Apr 9, 2026 |
| Updated | Apr 16, 2026 |
| 14641 - PrashunKC |