Rendering without any temporal accumulation

Soft shadows have always been a pain point. Capsule shadows, Distance field shadows, and raytraced shadows kinda work, but all have a bunch of limitations and quality issues. MegaLights and VSM handle them better than the old solutions, but are very temporal.

Yes, and TAA anyway just makes a mess of clean line and texture work with a slight blur on everything that piles up. I have tried a few versions of sharpening the result, and I keep running into the never “good”, always a trade-off of artefacts, jitter or blur.

Temporal accumulation is the crux of that issue, so I was searching for a suitable set-up that didn’t use it … but I think there isn’t one at least not one that falls in my wheelhouse :slight_smile:

Just enable Forward Shading with MSAA, then use a combination of static and stationary lighting, and you’ll be mostly done with tearing issues, disable post-processing effects (exposure compensation histogram and co.). Maybe the only remaining temporal stuff would be volumetric fog, but pretty much that’s it I guess.

Yes, forward rendering was our first idea and among the first things we tried.

The results didn’t meet our requirements. I’m sure much, if not all, the limitation was down to a lack of experience working with Forward rendering in Unreal. Unreal seems to really hamstring you in terms of what you can do as you drift away from the default Differed TAA Lumen setup, and the quality of shadows, lighting and fog in forward was poor.

So we moved on to differed rendering, which did improve things a fair bit over forward, fog and point lights got easier to work with, and non-baked hard shadows nice and crisp SMAA did its job well but soft shadows complete trash, baked shadows really poor quality though I am sure we could have eventually sorted that out learning our way through lighting volumes or whatever it is UE calls it.

I will keep working on it and do want to revisit the Forward Rendering option and study up on baked lighting in Unreal so I will revisit the effort once I have had a chance to do that.

In theory with Deferred Rendering, you can somehow limit a lot of the tearing/blurry issues.

Basically:

  • Enable TAA, but disable “Temporal Upsampling” (in Rendering settings), or use FXAA
  • Enforcing 100% screen percentage (r.screenpercentage 100)
  • Disable the dreaded Motion Blur thing too!
  • Use static and/or stationary lighting, with a good lightmap resolution (you can tweak this on static meshes), and don’t forget to use “Use Area Shadows for stationary” on light settings
  • Disable everything related to Lumen, Raytracing, and Virtual Shadow Maps (in Rendering settings)
  • Basically, move to DX11 RHI (instead of DX12), that will automatically disable Lumen, RT, and VSM
  • Play safe with Volumetric Fog (or do not use it at all, and neither Additive materials)

You can achieve pretty good image quality with this, with no noticeable usual issues due to temporal accumulation. But this kind of setup with precomputed GI will obviously quite limit the movability of lights. And the thing that might lacks a bit is on reflections of the environment and “shiny” surfaces (Lumen does a very good job for specular reflections, as legacy Reflection Captures give lower quality results, unless using the very very expensive Planar Reflections).

I have a curious hobby to to take full complex scenes from the Asset Store, and transform them to meet such “No Temporal Accumulation” requirements. This usually works by doing everything I mentioned + redoing the lighting with fully static and/or stationary setups. With some work, it works very nice in practice.

The scenes are no more “dynamic” in the sense where you can not move lights that would change GI too much, but it is refreshing to see nice crisp images at very decent FPS.

Good Luck!

1 Like