the symptom, in your words

"Geometry under an IsStatic root samples its lighting once, at creation"

✓ verified on 26.07.22
lane Getting art inposted

▸ SYMPTOM

You run a lighting A/B on static geometry. You mutate a light component live, then re-observe the geometry, for example with a screenshot comparison. The geometry shows no change.

You raise the delta and rewrite the value several times. Still no change. The result reads as this light does not affect this surface, so you conclude the light or the surface is wrong.

▸ CAUSE

Geometry parented under an IsStatic root samples its lit appearance at creation time. It bakes that appearance once and never resamples it. A runtime write to a light component does not reach it, because the geometry is not re-reading lighting at all after the first bake.

So the A/B tests nothing. Every live write lands after the one sample the geometry ever takes. The screenshot pair is identical because the static batch is identical, not because the light delta had no effect.

▸ FIX

Drive any lighting change on static geometry through the world build, not a live component write.

  1. Regenerate the static batches to apply a lighting change. Run the command that rebuilds or recompiles the scene's static geometry. The rebuild is the step that re-samples lighting for IsStatic content.
  2. Do not A/B static geometry by mutating a light at runtime. A live component write changes the light, but the baked geometry keeps its creation-time sample, so the comparison is blind.
  3. Move the geometry off the IsStatic root if you need live lighting. Non-static geometry samples lighting per frame and shows a runtime light change at once.

▸ WHY IT WORKS

The bake is a one-time sample taken at creation. Nothing on the static path reads lighting again, so a later light write has no surface to change. The world build re-creates the static batch, which takes a fresh sample and folds the new lighting in. Moving the geometry off the static root removes the bake, so the geometry reads lighting live and every write shows up.

Verified on engine 26.07.22: seen in a real project.
s&box moves fast; an undated fix is a liability. Spot a stale detail?
changelog
  • Published

Want to know when new guides or fixes drop? Join the community to help build this out. Report gotchas, flag outdated fixes, or just lurk.

Join the Discord