TSR Ghosting after color grading

We are experiencing an issue where color grading becomes impossible when TSR is enabled, especially in low-light scenarios (dark areas), due to severe ghosting artifacts. I suspect this happens because TSR collects history before tonemapping; when we adjust colors aftertonemapping, the history buffer and the current frame no longer match. I tried using a post-process material set to “Before Tonemapping” for color grading, but it’s quite difficult to recreate all grading features at that stage. Ghosting will disappear after cvar - r.EyeAdaptation.PreExposureOverride 5-10 but it will create a lot more other issues, like emissive light almost will not work

Ghosting happening not only on reflective areas or water surfaces. It is everywhere, on water surfaces it is just more noticeable and more easy to reproduce

Also we need advice / best practice how to set the gamma values. r.TonemapperGamma also cause ghosting as well as gamma cvar.

Attached TSRGhosting.zip UE5.6 project

Thank you.

Steps to Reproduce
Enable Temporal Super Resolution. Add some lights and reflective surfaces to the scene. Add post-process volume or use cvar r.TonemapperGamma with high or low values to make ghosting more noticeable

Open the project and just fly around. Disable Post-process or delete post process volume to see that without color grading we are not facing the ghosting artifacts or surfaces

Hello there,

Both TSR’s UpdateHistory and ResolveHistory steps occur prior to the tonemapper, so the issue doesn’t stem from colour correction nor tonemapping.

It is safe to continue using the PostProcessVolume colour grading controls.

I’m still working to track down the exact cause with regards to TSR’s ghosting. At this stage, it does appear to be something in the reprojection that is causing the issue. Notably, TAA does not appear to exhibit the issue.

The explicit output tonemapper gamma controls are generally best left unless there is a good reason to modify them. The engine should automatically select the correct transforms when r.HDR.Display.OutputDevice and r.HDR.Display.ColorGamut are set. For LDR content, these two values are likely able to be left at their defaults to target sRGB.

As I understand r.TonemapperGamma, this CVar primarily controls the output device transform gamma, which is already inferred in most causes from r.HDR.Display.OutputDevice. It’s possible to specify an explicit gamma, but the default (sRGB) is generally correct for LDR content.

For grading, the gamma controls in the post process volume are likely preferable.

I hope that helps.

Best regards,

Chris

Hello Chris,

Thanks for the answer. Here is one more showcase that shows issues with TSR (100% default settings). At this stage we do not understand how to do color grading, because it start impossible to play if TSR used.

About gamma. My question is about which cvar or parameter is best to use for global gamma adjustment, similar to the gamma adjustment slider we see when the game launches for the first time.

For a user-facing calibration screen, r.TonemapperGamma should be the correct value as it’s related to the transform to match the user’s display. If a user’s display tracks a different gamma, setting the output device to ExplicitGamma and setting the value with r.TonemapperGamma should better match.

What appears to be happening, as far as I can tell, is the reprojection is allowing minor after images that the modifications to the slope are exposing. Normally, these are likely sitting in the floor and aren’t visible.

I’ll file a bug report and get back to you with the bug tracker.

Best regards,

Chris

Please find the bug tracking link available at Unreal Engine Issues and Bug Tracker (UE\-312483\).

Best regards,

Chris