Using FXAA with translucent SSR produces incorrect results

When using a material that is both translucent and has screen space reflections enabled, if the camera has the anti-aliasing method set to FXAA (as opposed to the default of TemporalAA) the reflections don’t behave correctly. Specifically, they seem to be missing from large parts of the object. Compare the following two screen shots

With TempoalAA

With FXAA

This is with the same scene and material, I am only changing the anti-aliasing of the camera.

The material is really simple:

  • Any base colour (the example uses (0.6, 0.6, 1)
  • Metalic: 1
  • Spec: 0
  • Roughness: 0
  • Opacity: 0.8
  • Blend mode: translucent
  • Screen Space Reflections in translucency enabled
  • Lighting mode: TLM_Surface

Everything else unchanged. The scene is the default scene with a cube dropped in to demonstrate the transparency. Without the cube, the problem is still visible.

Hey ,

Thank you for taking the time to report this issue. I was able to reproduce the issue you are reporting and need to do a bit more digging in order to find the correct solution. It definitely appears to be a bug with SSR at the moment, but it also could be due to how FXAA functions versus Temporal AA.

I will return here when I have found more information about this issue. If you have any other questions or comments, please don’t hesitate to ask.

Thanks,

Hey ,

I was able to gather some more information on what you are reporting. This is a known issue with FXAA, and the order in which things are applied when calculating screen space reflections work differently than that of Temporal AA.

SSR as Temporal AA reflects the prior frame’s screen color which has fog and translucency and reflections in it. SSR without Temporal AA reflects the frame buffer as it is rendered to that point. Fog, translucency and reflections haven’t been rendered yet. Currently FXAA is not a priority as Temporal AA is becoming a more commonly used anti-aliasing approach due to its high quality and low performance cost.

Our main AA technique is a proprietary temporal anti-aliasing algorithm we simply call Temporal AA. It is vastly higher quality than FXAA and other spatial filters (MLAA, SMAA, etc) for subpixel aliasing, shading aliasing, and consistency under motion. It is much cheaper than MSAA when combined with any sophisticated rendering features (deferred shading, shadows, reflections, etc). It also solves shading aliasing which is very prevalent with physically based shading where MSAA only solves geometric aliasing. This is the technique we are invested in internally and will be using on our future projects because of it’s high quality.

I suggest using Temporal AA as the anti-aliasing mode. There are console variables you can use to help you scale and control the quality and number of samples when using Temporal AA. ‘r.TemporalAASharpness’ and ‘r.TemporalAASamples’. By default Samples is set to 8, but increasing it to 16 or 32 will give better results. By default Sharpness is set to 0.

I hope this provided you with enough information and insight as to why you are experiencing the issue. Let me know if you have any other questions.

Thank you,