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.
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)
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?
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.
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?