TemporalAA and FXAA cause Artifacts in Reflection Mode with SSR

When in Reflection Viewmode in the Editor, the Scene shows artifacts:
r.SSR.Quality = 0 (off); No AA:

r.SSR.Quality > 0, FXAA:

r.SSR.Quality > 1, TemporalAA:

Hey Raildex_,

I am sorry, but it is really hard to tell what you are pointing out here. The only thing I am gathering is the difference between FXAA and TAA reflections showing up in the visualizer. What specifically do you mean when you say artifacts?

Thanks,

H

Uhm, do you see my screenshots?

Don’t tell me it is INTENDED to look like garbage?

When AA is off and SSR is off, I see the Reflections how they should be.
When AA is On and SSR is on, I either see no reflections (FXAA) or the SSR interferes with the Reflections of Reflectioncubes (TAA)

The Reflection Viewmode is used to adjust precomputed Reflections by Reflection Cubes. SSR shouldn’t be shown in this viewmode.

Edit here’s another screenshot with ssr.quality = 4 and TemporalAA.

Now tell me this is how the Viewport should look like.

The Reflection viewmode overrides all normals to be the smooth vertex normal, and makes all surfaces fully specular and completely smooth (mirror like). Limitations and artifacts of the Reflection Environment are also clearly visible in this mode so it is important to switch to Lit periodically to see what the reflections look like in normal conditions (bumpy normals, varying glossiness, dim specular).

Reflections through this method are approximate. Specifically, the reflection of an object will rarely match up with the actual object in the level due to projection onto simple shapes. This tends to create multiple versions of that object in reflections as many cubemaps are being blended together. Flat, smooth surfaces that cause mirror reflections will show the error very noticeably. Use detail normal maps and roughness to help break up the reflection and these artifacts.

The cubemap reflection is mixed together with the lightmap indirect specular based on how rough the material is. A very rough material (fully diffuse) will converge on the lightmap result. This mixing is essentially combining the high detail part of one set of lighting data (cubemaps) with the low-frequency part of another set of lighting data (lightmaps). For this to work correctly, though, only indirect lighting can be in the lightmap. This means that only the indirect lighting from Stationary lights can improve the quality of reflections on rough surfaces. Static light types should not be used together with the Reflection Environment as they will put direct lighting in the lightmap. Note that this mixing with the lightmap also means that the map must have meaningful indirect diffuse lighting and that lighting must already be built to see results.

This was all taken straight from our documentation on the Reflection Environment which explains the issue you are describing in the limitations section, and gives solutions on how to work around the limitations to optimize your reflections.

Regarding the FXAA not looking correct, 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 and MSAA are becoming a more commonly used anti-aliasing approach due to its high quality and lower performance cost.

Thanks,

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.

Are you sure? Because what I’m getting is:
SSR + FXAA = correct reflections with 1 frame lag.
SSR + TAA = No lag but now HUD elements are reflected (despite being flagged not to)

Really struggling to find any documentation about the render ordering for TAA in Unreal…