Umbra Soft Shadows · Troubleshooting & FAQ
Common issues and their solutions when using Umbra Soft Shadows.
If shadows show banding, softness changes, or visual breaks at different distances:
If certain objects do not cast shadows under Umbra:
ShadowCaster and DepthOnly passes.When the penumbra appears truncated at the edges:
There is a known bug in the Octahedron shader included with Amplify Impostors that ignores shadow coordinates when shadows are set to screen space. To fix, edit the Amplify shader and locate these lines:
#if defined(_MAIN_LIGHT_SHADOWS)
inputData.shadowCoord = TransformWorldToShadowCoord(inputData.positionWS);
#else
// inputData.shadowCoord = float4(0, 0, 0, 0); // BUG
inputData.shadowCoord = float4(inputData.normalizedScreenSpaceUV, 0, 1); // FIX
#endif
If the Receive Shadows feature on a Volumetric Fog 2 volume stops working when Umbra is enabled:
If shadows appear to trail behind during quick camera rotations:
Umbra renders soft shadows into a screen-space texture (_ScreenSpaceShadowmapTexture) and activates the _MAIN_LIGHT_SHADOWS_SCREEN keyword so URP routes shadow sampling to that texture instead of the regular shadowmap. For any shader to receive Umbra shadows, it must support this keyword.
#pragma multi_compile _ _MAIN_LIGHT_SHADOWS _MAIN_LIGHT_SHADOWS_CASCADE _MAIN_LIGHT_SHADOWS_SCREEN
If the shader only declares _MAIN_LIGHT_SHADOWS or _MAIN_LIGHT_SHADOWS_CASCADE but not _MAIN_LIGHT_SHADOWS_SCREEN, it will ignore Umbra's texture and fall back to Unity's default hard shadows or no shadows at all.
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Shadows.hlsl"
half shadowAtten = MainLightRealtimeShadow(shadowCoord);
When _MAIN_LIGHT_SHADOWS_SCREEN is active, this function automatically reads from Umbra's screen-space texture. Do not sample the shadowmap directly.
_MAIN_LIGHT_SHADOWS_SCREEN keyword variant.MainLightRealtimeShadow().Check the included SimpleShader.shader in the Demo folder for a minimal working example.
Help us improve this documentation page.