The distance field scene is shared between scene renders in a given frame. However, LOD requests are not tracked over the entire frame, but per scene render (e.g. camera or scene capture). Thus, if a scene render requests LOD0 for the distance field of an object and a second scene render requests LOD1, it will cause flickering in the distance field shadow tracing. This happens, since requests are enqueued as async readbacks, and thus in the next frame, the first render can end up using the distance field scene representation of the second render and vice versa. (see attached gif, note this is captured without temporal AA.)

Steps to Reproduce

1. Create empty scene.

2. Add a local light and enable distance field shadows.

3. Add a shadow caster object, and a receiving shadow object.

4. Add an actor with a SceneCaptureComponent, make sure it renders the shadow casting object and place it at a location larger than set by the GLumenSceneGlobalDFClipmapExtent.

5. There should now be flickering between LODs in the distance field shadows.

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-176870 in the post.

Login to Vote

ComponentUE - Graphics Features
Affects Versions5.3
Target Fix5.5
CreatedFeb 12, 2023
UpdatedFeb 13, 2024