Lumen GI and Reflections feedback thread

We already have jitter from screen pixels and not sure what else could be jittered for roughness=0.

Sorry, there was a typo. I meant to say this is handed off to TSR/TAA. Which is problematic for accessibility(Temporal upscaling and Motion Blur included). Temporal effects such as frostbites SSR and warframe SSAO are low resoltion but have their own systems in place to upscale and accumulate. Advil recently advised against Temporal AA and Upscalers and Blur Busters also trying to bring awareness to devs about this issue. Per effect ghosting isn’t a issue, becuase it doesn’t cause the entire scene or even effect to blur.

DLSS RR uses a specular motion vector buffer based on specular hit distance from the first bounce. Maybe a combination of short term interpolation as a fallback. Also, I would like more control as to how fast past reflections are faded away. I have done some slight jittering with GXXsampling but It didn’t end up working becuase past frame are discarded/faded too fast.

Maybe a value that controls how fast/slow past channel information cuts off over time too?

Now, again I really appreciate the work done on performance regarding reflections but I do have a concern over the major jump in performance cost in the ScreenReconstruction method which jumped significantly. Also, I find screen traces to lack performance/quality seen in other engines and implementations as Frostbites SSSR and this AMD hybrid solution demo(which might be optimized for consoles due to RDNA2 focus).

I have carefully measured performance on each scene, these aren’t meant to put Lumen down, but rather make a point about cost/quality. In in all my test, AA is off, clipmap extent is at 0.0, r.UpscaleQuality is at 0 and assume everything is on default high settings unless stated otherwise.

Frostbites documented SSR uses TAA, which was kinda needed at the time(PS4), but modders and recent games have taken that solution to remain to stable without TAA and at very little cost, we are talking maybe 12% of a 3060 at 1440p in a very wet environment, no world normal limited in trace directions, little to no smearing, both High and 0.0 roughness remain very stable without TAA and no major dithering is produced for that matter. Even in fast traveling motion, no smearing is as pronounce compared to Lumen Screen Traces.

Test scene

Path Traced:


I’ll go ahead an omit blurry 0.0 reflections from the comments below since this seems like it will be tackled soon so I’m not worried about that.

  • 1440p, 3060, cost 4.3ms with the setting I stated. Looks fine if not pretty close to path traced but looks more smeary in comparison to frostbites SSSR in motion. That smear issue is still present in every one of these scenarios, which could be fixed with less frames or better use of specular motion vectors.

  • 1440p, 3060, cost 1.5ms with r.Lumen.Reflections.ScreenSpaceReconstruction 0 and r.Lumen.Reflections.BilateralFilter 0. Anything not moving with roughness above .02 displays very noisy and visually sporadic reflections. The reflection output is rough on the eyes because we can easily distinguish 4 real pixels represent a output pixel. Ugly(sorry😬) dithering patterns also become visible on cutoff edges.

  • 1440p, 3060, cost 3.5ms with r.Lumen.Reflections.ScreenSpaceReconstruction 0 r.Lumen.Reflections.BilateralFilter 0 and r.Lumen.Reflections.DownsampleFactor 1 The noise mentioned in bullet above is now 80-90% cleaned up. Dithering patterns become less visible but are still present. The noise can be further softened with r.Lumen.Reflections.Temporal.MaxRayDirections 32 at no cost.

  • 1440p(r.ScreenPercentage 40, 1027x579), 3060, cost 1.04ms with r.Lumen.Reflections.DownsampleFactor 1 r.Lumen.Reflections.BilateralFilter.StrongBlurVarianceThreshold 0.1
    Everything in the scene looks low res but reflections are clean with no noise, proportionally blurred and clear on differentiating roughness, even 0.0 looks clear my display which is 1440p.
    A slight problem arises, the reflections above 0.07 look too blocky which could be taken care of by a spatial upscaler(rather than nearest) Like r.Upscale.Quality 5 or FSR1+Edge correction seen in the AMD hybrid SSSR+RT project(It would need a Cavr to control what roughness receives this spatial upscale).

Taking advantage of the last scenarios performance would entail computing downsampled versions of the g-buffers and spatial algos, but I can’t imagine that being more expensive than all the other scenarios I listed. Also r.Lumen.Reflections.RadianceCache 1 feels misleading as in my experience, it actually increases the cost of Lumen Reflections (lowest .25ms, highest .50ms).
I feel like this would then be better paired with the power of offscreen traces.

1 Like