VSM to Shadow Mask Bits

It is a little hard to show how shadow mask bits buffer works, so let me temporally add a ground:

Untitled

And the shadow mask bits buffer is like this:

Untitled

Which is projected in VirtualShadowMapProjection pass.

Shadow Map Projection

<aside> ℹ️ /Engine/Private/VirtualShadowMaps/VirtualShadowMapProjection.usf

</aside>

To simplify the light rendering pass, we should convert the shadow map, which is discretely saved in the physical page pool texture, back into a screen-sized buffer.

A brief explaination is:

Regarding the result, it is a uint4 texture where each pixel can represent 16 light sources. Each light source can save a 16-level shadow factor.

In a classic shadow map, we only need to save one bit to indicate whether a pixel is in shadow or not. However, to render soft shadows, we need to know how much the light source is occluded. That's why we need more information than just a binary indicator.

Soft Shadow with Shadow Map Ray Tracing

The official documentation: https://docs.unrealengine.com/5.0/en-US/virtual-shadow-maps-in-unreal-engine/#softshadowswithshadowmapraytracing.

Untitled

To see a soft shadow, you need to increase the radius of the point light.

From: https://en.wikipedia.org/wiki/Umbra,_penumbra_and_antumbra

From: https://en.wikipedia.org/wiki/Umbra,_penumbra_and_antumbra