In no signal, I have a mechanic where
the sides of a room can disappear when the player is
behind them so the room can still be seen. In one of
these situations in the ceiling, there was a hole
which allowed the light from a Light3D
with shadows enabled to pass through. When the
ceiling was hidden, the shadows acted as if the
ceiling wasn't there, which was undesirable.
I tried fixing this by changing the
VisualInstance3D
to be on a different
layer that the camera couldn't see, but this didn't
fix the issue. I also changed
light_cull_mask
for the
Light3D
, but this didn't work either
since it appears to only control what surfaces the
light ends up on.
Looking this up online, I find out that the
solution is to create a
GeometryInstance3D
that has its
cast_shadow
property set to
SHADOW_CASTING_SETTING_SHADOWS_ONLY
:
Calinou @ forum.godotengine.org: Select your MeshInstance node, go to the Inspector’s GeometryInstance section then set the shadow mode to Shadows Only.
Make sure your mesh doesn’t have a transparent material attached to it. Otherwise, it won’t cast any shadows.