#rnx
#rb none
#ROBOMERGE-OWNER: ryan.durand
#ROBOMERGE-AUTHOR: ryan.durand
#ROBOMERGE-SOURCE: CL 10869210 via CL 10869511 via CL 10869900
#ROBOMERGE-BOT: (v613-10869866)
[CL 10870549 by ryan durand in Main branch]
- Fixed regression with checkerboard rendering and odd render target sizes. The passes were not guaranteed to produce
a UV coordinate centered on an input pixel for each output pixel.
- Fixed regression when visualizing SSS at native screen resolution (i.e. no secondary spatial upsampling). The issue was that
the rendering composition graph injects the backbuffer as the last texture in the post processing pipeline. If visualize SSS was
the last pass, it would overwrite the backbuffer texture, causing visual artifacts.
- Minor performance improvement for multi-view SSS. All views in a split-screen scenario now render into the same output target (instead
of ping ponging between multiple targets) and only views not utilizing SSS get copied from the source target. The is reduces the worst case
of viewport copied from O(N^2) to O(N); if all viewports use SSS (common in VR), then no copies are performed.
- Removed FScreenPassTexture in favor of more selective pairing of FRDGTextureRef and FScreenPassTextureViewport. This reduces
some boilerplate and extraneous memory copying. Motion blur passes now compute their viewport shader parameters once.
#jira UE-72787
#rb Guillaume.Abadie
[CL 6059686 by zach bethel in Dev-Rendering branch]
FScreenPassContext::Create used to allocate FScreenPassContext objects on FMemStack, however it has a non-trivial destructor which was never called.
Instead of allocating temporary objects on the FMemStack automatically to ensure that they remain alive for the duration of GraphBuilder lifetime, FRDGBuilder::AllocObject() has been added. It explicitly associates the lifetime of allocated temporary object with the specific graph builder.
Correct destructors are automatically called when FRDGBuilder itself is destroyed.
#jira UE-72802
#rb Guillaume.Abadie
[CL 5975133 by Yuriy ODonnell in Dev-Rendering branch]
- Removed samplers from input struct, since most samplers are shared between inputs.
- Introduced the FScreenPassTextureParameters struct, describing pixel / UV rect dimension
used to sample from a region of the texture in HLSL. Centralizes a lot of the common math
operations currently being done ad-hoc or exposed in PostProcessCommon.ush.
- Removed FScreenPassInput in favor of a non-shader parameter class called FScreenPassTexture. This
data structure pairs together the RDG texture and screen pass shader parameters. This allows pass
inputs to carry important state like which view rect is being used; this provides a more scalable alternative
to 'SceneColorViewRect' and 'ReferenceBufferSize'.
- Added an FScreenPassTextureViewportTransform struct that is designed to map UVs from one texture space
to another. For example, from the upsampled temporal AA UV to velocity UV.
- Replaced view-specific parameters with screen pass parameters in the subsurface shader.
#rb Guillaume.Abadie
#jira none
[CL 5833674 by zach bethel in Dev-Rendering branch]
- Cleaned up surrounding code so that subsurface post process code is referenced from one place.
- Cleaned up shaders to be more consistent and to better support the new parameter struct system.
- Refactored shaders to use new permutation API and shader parameter APIs.
#jira none
#rb Brian.Karis
[CL 5677263 by zach bethel in Dev-Rendering branch]