Quick answer: Most “blurry” Virtual Shadow Map shadows are intentionally soft: the directional light's Source Angle (or a local light's Source Radius) controls penumbra width. Lower it for crisper shadows. If shadows are genuinely low resolution, lower r.Shadow.Virtual.ResolutionLodBiasDirectional, check shadow scalability, and watch for page pool overflow.
Virtual Shadow Maps were designed to give sharp, detailed shadows at any distance, so it surprises people when they look soft or smeared. The cause is usually one of three settings: physically based softness, resolution bias, and the page pool.
Cause 1: the shadow is soft on purpose
VSM uses shadow map ray tracing (SMRT) to produce contact-hardening shadows: sharp near the caster, softer further away, with the width set by the light's size. A directional light's Source Angle defaults to about half a degree, roughly the real sun. On a stylized game or at a small scale that reads as blur.
- Lower Source Angle on the Directional Light (try 0.1 to 0.2) for crisper sun shadows.
- Lower Source Radius on point and spot lights for the same effect locally.
- For fully hard shadows, disable SMRT for directional lights with
r.Shadow.Virtual.SMRT.RayCountDirectional 0(andRayCountLocal 0for local lights).
Cause 2: resolution is biased down
VSM chooses which resolution level to render each page at from screen size, adjusted by a LOD bias. Scalability presets push that bias up at lower quality levels, and that looks like blurry, stair-stepped edges.
; DefaultEngine.ini or a device profile. Lower (more negative) = sharper.
[SystemSettings]
r.Shadow.Virtual.ResolutionLodBiasDirectional=-1.5
r.Shadow.Virtual.ResolutionLodBiasLocal=0
Try values in the console first. Each step of -1 roughly doubles the shadow resolution used, which increases memory use and rendering cost. Also check sg.ShadowQuality: if the game runs on Medium or Low shadows, you are looking at a deliberately cheaper configuration.
Cause 3: the physical page pool is full
VSM renders into a fixed pool of physical pages. When a frame needs more than the pool holds (large open scenes, many shadow-casting local lights, aggressive negative bias), pages are dropped or downgraded and shadows go blurry or blotchy. The engine shows an on-screen warning about the page pool when this happens in development builds.
Raise the pool with r.Shadow.Virtual.MaxPhysicalPages (for example 4096 or 8192) and watch GPU memory, or reduce demand: fewer shadow-casting local lights, smaller attenuation radii and less extreme bias.
Related: shadows that flicker or crawl
VSM caches pages between frames and invalidates them when something moves. Non-Nanite meshes with World Position Offset (foliage wind) invalidate every frame and can look unstable or expensive. Each primitive has a Shadow Cache Invalidation Behavior setting to control this, and the existing posts on page thrashing cover large scenes in detail.
How to see what VSM is doing
Use Show > Visualize > Virtual Shadow Map to view shadow mask, clipmap levels and cached pages. If the area you care about is drawn from a coarse clipmap level, it is a resolution issue (Cause 2). If page visualizations show heavy invalidation or missing pages, look at Cause 3 and the cache settings. stat gpu shows what each change costs.
Settings players end up on
Most players never see your Epic shadow settings. Bugnet's Unreal SDK attaches GPU, OS and a screenshot to every in-game report, so visual complaints come with the evidence needed to tell a real bug from a low-preset trade-off.
Related problems
- Fix: Unreal Virtual Shadow Maps Pages Thrashing
- Fix: Unreal Virtual Shadow Map Acne on Thin Foliage
- Fix: Unreal Virtual Shadow Map Page Cache Thrashing on Large Scenes
Frequently asked questions
Why are my Virtual Shadow Map shadows blurry in Unreal?
Usually because the light’s Source Angle or Source Radius makes them physically soft. Lower it for crisper shadows. Otherwise check the resolution LOD bias, shadow scalability and page pool.
How do I make Virtual Shadow Map shadows sharper?
Lower the directional light’s Source Angle, set r.Shadow.Virtual.ResolutionLodBiasDirectional to a more negative value, or disable SMRT soft shadows with r.Shadow.Virtual.SMRT.RayCountDirectional 0.
What happens when the Virtual Shadow Map page pool overflows?
Pages are dropped or rendered at lower resolution, so shadows look blurry or blotchy. Increase r.Shadow.Virtual.MaxPhysicalPages or reduce shadow demand.
Check Source Angle first. Half the "blurry VSM" reports are the sun doing what the sun does.