f75e6fdd1f
Chasing "why does this ground wash light keep swinging as a black wedge" landed on something much wider than one lamp. Gallop's light shaders take their blend state from material properties — LightBlinkBlend and friends declare `Blend [_SrcBlend] [_DstBlend]`. Every one of live10149's 26 materials stores _SrcBlend=One, _DstBlend=Zero, i.e. opaque overwrite. That is not authoring intent: all 26 also carry _WorkflowMode, _Surface, _ClearCoatMask, _Smoothness and _Blend in their float tables, which is URP Lit's property set, and One/Zero is URP Lit's opaque preset. The table was stamped over the whole batch. The authored values are recoverable, because the shaders declare their own defaults. Of the 16 shaders in the bundle that expose these two properties, 14 default to One/One — additive — and they are exactly the emissive family: LightBlinkBlend, LightBlend, StageBeamLight and its Cutoff/Fadeout variants, StageLightBlinkCutoff/Fadeout, the three StageProjectorBlend variants, StageMonitorBlend*, MirrorBallProjector, BgUnlitStencilAlpha. Forced opaque, an additive beam whose _BlinkLightColor is black stops being "adds nothing, so invisible" and becomes a solid black wall — which is what the swinging wash beams look like on screen, and very likely also what LIVE_TRACKS.md has been recording as "small bulbs render as black blocks". So on stage init, every material whose shader declares _SrcBlend/_DstBlend gets those reset to the shader's declared default. The correction is self-limiting: for a shader that really is opaque the default is already One/Zero and nothing changes. Only properties the current shader actually declares are touched — the material's saved table is the thing we do not trust here, so it is not consulted for what to write. Every change is logged with material, shader and before/after, so the next run says exactly what was corrected rather than leaving it to inference. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UzXXkLzVC8pNA3JjyUGMbq