"A PointLight born with Shadows = true renders nothing: use a SpotLight"
▸ SYMPTOM
You place a PointLight, enable Shadows, and it contributes nothing to the frame: no light pool, no shadow, no illumination at all, and completely silently. No warning, no error. A SpotLight in the same spot lights the scene fine, which makes it look like something is wrong with your point light specifically.
▸ CAUSE
On this build the point-light shadow path is broken or refused wholesale. Confirmed by elimination:
- A runtime-created point light, parented to a plain (non-static) scene root, given
Shadows = trueat birth, is equally black, so it isn't a static-root shadow-cache issue or a creation-order issue. - Flipping
Shadowsoff on the live component restores the light's pool the same frame; flipping it back on kills it again. - A
SpotLightwithShadows = truein the identical position and reach works correctly, pooling and casting.
The difference is the shadow path: a PointLight needs a six-face cubemap (omnidirectional) shadow, and that path is the one failing here. SpotLight uses a single-view projected shadow, which is fine.
▸ FIX
For a shadow-casting lamp whose direction is known (a hanging street lamp, a wall sconce, a ceiling fixture) use a downward SpotLight instead of a shadowed PointLight:
- A narrow-enough cone (inner around 55°, outer around 80°, positioned a few metres up) puts a comparable pool on the ground and lets nearby characters cast into it.
- The trade is the point light's omnidirectional spill onto canopies and façades. If that spill matters to the shot, add a separate unshadowed point/ambient fixture for the fill and keep the
SpotLightfor the cast.
Second trap: light-flag A/B tests need a recreation cycle
Writing Shadows (or any similar flag) onto a light that was born with the opposite value does nothing visible (in either direction) until the light's underlying scene object is recreated. Disable/re-enable the GameObject to force that recreation. A probe that flips the flag and screenshots without a recreation cycle is testing nothing.
Confirm any change to this class of component with an actual rendered frame, never a property read alone: the property will happily report the new value while the frame is unchanged.
▸ WHY IT WORKS
The single-view projected shadow that a SpotLight renders is a different, working code path from the cubemap shadow a PointLight requires; routing a directional lamp through the SpotLight path sidesteps the broken one entirely and still gives you a grounded, character-casting pool. The recreation requirement follows from the light's shadow resources being allocated when its scene object is built: changing the flag afterward doesn't rebuild those resources until the object itself is recreated.
- Published