Directional light, useBlurExponentialShadowMap. Only avatar casts shadows.
The problem could be partially solved with (for example) shadowGenerator.frustumEdgeFalloff = 3.0;
but seems this setting could be quite individual and depends on model parameters (like size, for example) as well.
Is there any way to prevent further shadow casting from Directional light if the shadow already presents on some upper (or closer) mesh?
Then you need to add a bit of shader code to remove shadows when the pixel to be shaded is not in the light frustum in the z direction. Fortunately, there’s a shader variable (vDepthMetricX) which gives you this information for the light with index X: the value is between 0…1 for points inside the frustum.
So, here’s how you can do it with a material plugin: