* Downsampled reflections (High scalability) now use temporal upsampling without a heavy spatial filtering pass, so that they can match full resolution reflections (Epic scalability). The main difference between scalability is now tonemapping reducing energy for High and a small spatial filter running on thin and unstable features.
* Temporal accumulation is now more stable, especially under motion. It uses a wider neighborhood clamp with improved history heuristics.
* Ghosting has been somewhat reduced using a tighter neighborhood clamp in YCoCg space and various confidence heuristics speeding up temporal accumulation when a potential mismatch is detected.
* Reflections are in general sharper. Corrected temporal reprojection math, spatial filter is less aggressive, has improved edge stoppers and is driven by a temporal variance, which allows it to run only on pixels which didn't converge well.
* There's less noise due to a combination of improved temporal accumulation, spatial filtering and a bit of color space crunching which helps to reduce energy in hardest to denoise cases
* Fixed various bugs with reading uninitialized data on screen borders and during reprojection
* A few optimizations, like using groupshared to calculate temporal neighborhood and skipping certain operations if they aren't needed
Performance. Console. 1080p. HWRT. LumenReflectiveTest.
Glossy
Epic: 2.89ms -> 2.64ms
High: 1.63ms -> 1.49ms
Mirror
Epic: 1.17ms->1.01ms
High: 1.94ms->1.74ms
[CL 34167848 by krzysztof narkowicz in ue5-main branch]
* The reason is that Epic mode will trace many more rays and will benefit from better TLAS build while High mode is mostly dominated by TLAS build cost.
#rb Krzysztof.Narkowicz
[CL 33114566 by aleksander netzel in ue5-main branch]
Also fixed up some minor things missed from the new detail mode (comments, etc).
#rb jordan.cristiano
[FYI] bryce.lumpkin, Andrew.Davidson, mihnea.balta
[CL 31535952 by andrew ladenberger in ue5-main branch]
Adjusted r.LightMaxDrawDistanceScale on default Low scalability to be the same as Medium (0.5).
#jira UE-197174
#rb Jamie.Hayes
[CL 30336589 by erebel55 in ue5-main branch]
Motivations of this change:
1) Temporal upscale by default in game builds even when dynamic resolution is not supported;
2) Fixes "Editor Preferences > Performance > Viewport Resolution > Override game screen percentage settings with editor settings in PIE" or (r.Editor.Viewport.OverridePIEScreenPercentage) that used to override r.ScreenPercentage in PIE by default to prevent accidental out of video memory when going PIE on high resolution/DPI display that was not discoverable enought user and generating misunderstanding;
3) Makes editor UI more understandable that the resolution controls under Settings > Engine Scalability Settings is actually PIE resolution settings, since the editor viewport screen percentage is controled independently in editor viewport top left menus;
4) Fixes inconsistency where VR and mobile renderer viewport didn't have their own settings like path tracer or non-realtime editor viewports had;
5) Adds resolution quality presets: just a slider for the 3D rendering resolution is very subjective to a player what to choose, whereas presets allows to more intuitively suggests trade off on the screen percentage range.
What this changes does to the end user:
1) Implements default screen percentage project settings in Project Preferences > Rendering > Default Screen Percentage (or r.ScreenPercentage.Default.*) for each indivual uses case that are: desktop renderer, mobile renderer, VR rendering, path tracer
1.1) Desktop renderer renderer default to screen percentage based on display resolution to automatically temporally upscale;
1.2) All other rendering methods (mobile render, VR renderer, path tracer) defaults to native resolution rendering as before.
2) Adds editor viewport screen percentage settings for mobile renderer and VR in Project Settings > Editor Performance > Viewport Resolution
3) Changes defaults of sg.ResolutionQuality and r.ScreenPercentage to 0 and fallbacks to project settings' default screen percentage
4) Rewrite Level Editor UI > Settings > Engine Scalability Settings to:
4.1) Says it only apply to PIE viewport, not including Simulate in Editor since these is still viewed with editor viewports, and warn when there is no PIE game viewports;
4.2) Explicitly says what is the current screen percentage of the PIE game viewport;
4.3) Explicitly says what is the current rendering and display resolutions;
4.4) Says what rendering mode is being applied (Desktop renderer, mobile renderer, VR rendering, path tracer)
4.5) Says where the settings come from, r.ScreenPercentage was directly set by console code, or whether the Engine Scalability was overident (sg.ResolutionQuality>0) or where the default settings come from (project's default screen percentage settings or editor viewport preferences)
4.6) Says the actually setting is being used (Manual, Based on Display Resolution, Based on OS DPI Scale)
4.7) Explicitly says which anti-aliasing method is being used on the anti-aliasing scalability group
5) The "Editor Preferences > Performance > Viewport resolution > Override project's default screen percentage settings with editor viewports' settings in PIE" (r.Editor.Viewport.OverridePIEScreenPercentage) now chooses whether the default screen percentage project settings should be overriden by the editor viewport's default settings. sg.ResolutionQuality and r.ScreenPercentage now behaving as a override, it means they are also applied in PIE to avoid user confusions when they do indeed what to take control of it in the project settings or game logic.
6) Adds resolution quality presets in BaseScalability.ini that can be customised in a project's DefaultScalability.ini:
6.1) Default 3D resolution preset: Sets sg.ResolutionQuality=0 to end up using the default project settings presets which for the case of the desktop renderer means temporal upscaling by default based on the display resolution like Fortnite's Recommended settings.
6.2) Performance 3D resolution preset: Sets sg.ResolutionQuality=100*1080/2160
6.3) Balanced 3D resolution preset: Sets sg.ResolutionQuality=100*1260/2160
6.4) Quality 3D resolution preset: Sets sg.ResolutionQuality=100*1440/2160
6.5) Native 3D resolution preset: Sets sg.ResolutionQuality=100
#rb rob.srinivasiah, jack.porter, juan.canada, allan.bentham
#jira UE-184651
[CL 25988162 by guillaume abadie in ue5-main branch]
r.TSR.History.GrandReprojection=1 doesn't looks nearly as good as r.TSR.History.ScreenPercentage=200 and cause high maintenance burden;
r.TSR.Subpixel.Method=1 is just always worst looking due to the introduce instability on the image.
#rb none
#jira UE-179496
[CL 25977651 by guillaume abadie in ue5-main branch]
* Tonemapper have too many shader permutations
* Doesn't make any meaningful performance difference on slowest platforms
* Renames the GrainQuantization to BackbufferQuantizationDithering to reduce confusion with film grain
* Offer it on all post processing scalability settings
#rb rod.bogart, serge.bernier
#jira none
#preflight 6449b3926b589f8b36a118b2
[CL 25213159 by Guillaume Abadie in ue5-main branch]
* Tonemapped weighting during the spatial resolve is now enabled by default on High settings, which causes reflections on rough surfaces to lose brightness, but is necessary for acceptable quality with bright emissives
* Controlled by r.Lumen.Reflections.ScreenSpaceReconstruction.TonemapStrength
* Temporal filter no longer lowers strength on mirror reflections for half res reflections
* Disabled reflection pixel jitter
* Neighborhood clamp is expanded in areas of high spatial resolve variance, controlled by r.Lumen.Reflections.Temporal.NeighborhoodClampExpandWithResolveVariance
* The bilateral filter skips the normal weight in areas of disocclusion. This reduces fireflies around the edges of the screen under camera movement, especially when the material has a noisy normal but low roughness.
[CODEREVIEW] Daniel.Wright
[CL 24062588 by marc audy in ue5-main branch]