SSR not working on glass with FXAA

Hi,

I was testing the different AA options when I noticed that screen-space reflections on glass (or any translucent material) work only with temporal anti-aliasing. I tried FXAA and None, they produced no screen-space reflections on glass.

I’m using UE 4.11 Preview 8.

Hey ,

Could you provide me with some screenshots so I can visualize the issue on my end, as well as some simple steps to reproduce the issue in a blank project?

I do know that we do not focus on FXAA as TemporalAA yields greater results and has a multitude of benefits when enabled in the engine.

Cheers,

Certainly, here are two screenshots.

With TAA:

And with FXAA:

Steps to reproduce:

  1. Make an unbounded post-process volume with AA set to TAA (for now).

  2. Make a translucent material with Screen Space Reflections enabled under the Translucency pane. Make sure roughness is set to 0 and metallic is set to something high, like 0.9 or so. Set Specularity so that you can see the reflection properly (I use 10). Set Opacity at 0.3 and BaseColor can be a gray, like 0.5.

  3. Now give this material to an object, say, a cube, and make the surroundings bright enough so they can be seen in the reflection.

  4. Change the AA method to either FXAA or None and the reflections disappear.

Note: I’m using entirely dynamic lights and I’ve disabled Lightmass. Also, no environment captures.

After some investigation, this is the expected behavior of SSR with FXAA enabled. We currently are not focusing resources on improving the FXAA implementation as Temporal AA yields better results and is a more modern implementation. There is a way to fix this yourself in code if you have a graphics programmer and a source version of the engine.

You would need to sample the current screen buffer instead of the last frame’s buffer under the assumption that all opaque objects will have already rendered to it (plus setting the PREV_FRAME_COLOR directive to 0). SSR requires some form of Temporal AA though so a SSR specific Temporal AA pass is run if the general one is disabled. At the same time Temporal AA is run it copies the pointer off of the result and sticks it on viewstate to use in the next frame. You could do that for what would have been the input to Temporal AA.

Thank you for taking the time to report this issue and let me know if you have further questions.

Temporal AA makes everything look like someone smeared vaseline all over your eyeballs. It’s horrible.

I use temporal AA for everything. It is a much more advanced form of Anti Aliasing. It is actually a bit the way your eyes work.