VSM Warning Message

There are many uncached virtual shadows.

How can I suppress this message?

Increase group count of CullPerPageDrawCommandsCs?

Steps to Reproduce
Play level in what I uploaded, You might see ​"[VSM] Non-Nanite Marking Job Queue overflow. Performance may be affected. This occurs when many non-nanite meshes cover a large area of the shadow map.".

Hi there,

The warning about VSM marking queue overflow is displayed when too many non-Nanite instances within a single 64-thread compute group each cover more than 8 shadow pages which fills the groupshared LDS queue, which has a fixed size of 128 slots.

You can disable the message without addressing the underlying issue with r.Shadow.Virtual.AllowScreenOverflowMessages=0.

To prevent the underlying issue, you can:

  1. reduce the number of non-Nanite instances in the scene
  2. reduce non-Nanite shadow mesh coverage. Large meshes at high resolution require more pages per instance and more coverage.
  3. adjust resolution bias (r.Shadow.Virtual.ResolutionLodBiasDirectional, r.Shadow.Virtual.ResolutionLodBiasLocal, etc). lower resolutions will require fewer pages per instance.

Increase group count of CullPerPageDrawCommandsCs?

Increasing the group count won’t help because the queue is per group LDS (groupshared) and has a fixed number of slots.

I haven’t yet verified the specific steps necessary to address the issue in the sample level provided because the GPU hangs in Nanite::EmitDepthTargest whenever I load the level in 5.6.1. It appears to have something to do with the chamfer cube static mesh but I haven’t identified the issue yet and will continue looking into it tomorrow. If you are aware of a modification that was made to the mesh that may cause a crash please let me know.

I was able to open the level in latest (UE 5.8) but don’t see the warning message when looking around the level or in PIE.

We are working on improved support for larger numbers of animated skeletal meshes on screen, are you intending to upgrade your engine version? Otherwise, another option is to use the Mass crowd system that falls back to ISM Nanite VATs, which is what the City Sample uses for crowds.

Another change that may help a little is the dynamic mesh bounds feature introduced in CL#42426291 (388888)

Implemented dynamic mesh bounds for skinned meshes in GPU skin cache to improve culling for non-nanite VSM and general instance culling, the feature is disabled by default via the read-only cvar r.SkinCache.DynamicMeshBounds.

* For scenes with expensive non-nanite geometry that have poorly fitting bounds (often the case with small parts that inherit the parent bounds) the improvement can be significant.

UE 5.7 CL#45349090 (679703)

Hello.

It is unavoidable because this is a problem caused by a large number of characters.

Reducing resolution bias was not very effective.