SSR rendering of reflection lags behind camera/head movement

Hello,

I am experiencing an issue where the SSR reflections are lagging behind the movement of the camera (and when using VR lags behind the head movement).

I have two videos below demonstrating the issue inside the editor:


As you can see in the videos, the reflected items in the scene do not align with their reflections on the reflective surfaces while the camera is panning around. When the camera panning is stopped, the reflections are aligned appropriately.

I assume that this is a result of the SSR reflections not be updated quickly enough during the camera movement.

This issue is really noticeable in VR as with even minor head movements the reflections appear to dance around. Using SSR makes a vast improvement for the purposes of architectural visualization and I would like to continue using it - even with some aspect of the negative issue I am experiencing and mentioned above.

I was wondering if there is something that I can do to mitigate or resolve this issue?

I am on UE 4.27.2 and using an NVIDIA GeForce RTX 2080, with SSR.Quality set to the highest level.

Thanks

Brian

Hey Brian,

I was experiencing the same issue, and did a bit of digging into this. The issue seems a bit conditional, and likely a bug in UE4’s source. There are two ways around this issue depending if you’re building from source or not.

If you’re building from source:
Navigate to ScreenSpaceRayTracing.cpp, line: CommonParameters.SceneTextures.GBufferVelocityTexture = GraphBuilder.RegisterExternalTexture(GSystemTextures.MidGreyDummy)
and replace MidGreyDummy to BlackDummy

If you’re using the UE4 launcher:
Simply place a skeletal mesh (or any other mesh that is considered “dynamic”) in the scene.

Some background on the issue:
If there aren’t any dynamic meshes present in the scene, UE4 will skip over the RenderVelocity RenderPass, and instead will use the MidGreyDummy texture with 0.5 as a default value for all channels. DecodeVelocityFromTexture() should scale the 0.5 to 0.0, but for some reason this doesn’t seem to be the case (I haven’t dug that far!). Resulting in velocity being present during the SSR pass.
Simply replacing it with a BlackDummy texture with a value of 0.0 will ensure that velocity is always 0.0. (DecodeVelocityFromTexture() isn’t called when the VelocityTexture doesn’t consist of a value higher than 0)

Hope it helps!

  • Yun
1 Like

Hi Yun,

Thanks for letting me know about your research into this issue. I have tried a similar test scene (like you suggested) and added a ‘cube’ set to movable but still experience the same lagging effect of the reflection.

I am not building from source so I am not easily able to test your first suggestion.

Could you attach a simple project/test level like the one I originally posted showing how you added a dynamic mesh to solved the issue?

Thanks in advance

Brian

Hey,

I should’ve been more specific about what I meant with a skeletal mesh, my bad!

The following works for me:

  • Place an “Empty Character” Actor into your scene
  • Assign a “Skeletal Mesh” to the Mesh Component in the Character Actor
    This solution however isn’t ideal… The Skeletal mesh always needs to be in view in order for the SSR to work properly… (maybe it’s possible to make it invisible somehow?)

Another not ideal solution is to enable the r.Test.ForceBlackVelocityBuffer 1 Console Variable (you can enable it by pressing the “~” key, and paste the command).
However, this also has two caveats:

  • This will always disable the velocity buffer, but this might also influence other effects that rely on the Velocity Buffer (e.g Motion Blur or TAA, etc)
  • Only works in the Editor

In the end the UE team needs to take a look at this and implement a proper fix, although I don’t think it’s going to be high on their priority list. There’s been a bug report about this issue already since May, but hasn’t gotten any votes.

Although the bug persists in UE5, it’s not that apparent because the default Reflection mode uses Lumen.

Thanks again Yun1!

I was able to get the screen space reflections to work adding the empty character and skeletal mesh as you suggested.

I am doing arch vis in VR and would really like to use SSR rather than placing a whole bunch of reflection spheres in complex room shapes.

Utilizing SSR at quality 3 with a NVidia GeForce RTX 2080 seems useable as the framerate (depending on the scene) can still run at 80 fps.

The problem I run into is that after about 10-20 secs the frame rate drops to ~25 fps and then i need to reset my oculus rift s and restart unreal. Running other apps before I reset the rift also run at a reduced frame rate.

Using SSR in VR seems to break the GPU somehow?

ANy thoughts on how my dream of using SSR in VR might be possible?

Thanks in advance

Brian