The VSM shadow Quality is greatly degraded when the resolution is reduced, this is a big problem for console builds with dynamic resolution.
It seems that the LOD is calculated using the rendering resolution, whch is not a good idea because you don’t know the size of a shadow texel depending on the projection angle and it is almost always vastly bigger than the pixel density. So there is no reason to drop the shadow resolution when the rendering resolution gets lowered. (Unlike Nanite)
Here is the example, as I said, Epic Quality, a simple spot a cone and a cube :
Setup :
With 100% Screen Percentage :
With 50% Screen Percentage :
Of course if I lower the r.Shadow.Virtual.ResolutionLodBiasLocal (here at 0) I get nicer results but the memory footprint explodes.
On console I have the ResolutionLodBiasLocal at 1, for 300Mb of shadows, if I set it to 0 I get 1Gb of shadows.
I also tried to change the ShadowResolutionScale on the light but there is no effect on values > 1.0
And of course when a scene gets a bit heavier on the GPU, the resolution drops and the shadows gets ugly (for no reason).
Raytraced shadows don’t have this problem but they are vastly more expansive.
So there is two things I would like to know :
- How can I untie VSM Shadows LOD and Pixel Density.
- How can I control the shadow LOD Bias/resolution on a per light basis.


