1. Burley is disabled by default. To preview it, you need to 1) set r.SubsurfaceScattering.Type to 1 and 2) check the enable burley box in the profile.
2. Burley parameters always update from Separable. To disable it, set r.SSS.Burley.AlwaysUpdateParametersFromSeparable to 0.
#rb krzysztof.narkowicz
#jira none
[CL 7289867 by Tiantian Xie in Dev-Rendering branch]
This changes now explicitly write in code if a input is required using CreateRDGTextureForRequiredInput(), or optional CreateRDGTextureForOptionalInput() or should create a fallback with CreateRDGTextureForInputWithFallback() because still needed something because no permutation without it are existing.
#rb zach.bethel
#fyi juan.canada
[CL 6068769 by Guillaume Abadie in Dev-Rendering 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]
- Added clustered deferred pixel shader & supporting code (using render graph)
- GetSubsufaceProfileTexture_RT now returns non-const pointer to make it work with RegisterExternalTexture
- Added FSortedLightSetSceneInfo to store the sorted lights and ranges, moved light sorting to before light grid injection.
- Moved light sorting to own function: FDeferredShadingSceneRenderer::GatherAndSortLights
- Added Simple Lights to the sorted light array.
- Lights supporting clustered deferred now have their own sub-range (which include rect lights without a source texture)
- Added ranges of light indices to the FForwardLightData such that the shader can skip any lights that are not supported by clustered deferred (but they are there for other operations)
- Added flag to say if the lights were injected in the light grid.
- Added 'DummyRectLightSourceTexture' to FForwardLightData to use as the fallback rect light source texture instead of the clearly invalid DeferredLightData
- Refactored light grid injection to use RenderGraph and more convenient parameter setting.
- Added light type to local light data stored for light grid (2 bits packed into uint used for shadow map channel mask / lighting channel mask)
- Fix for light complexity that was influenced by translucent rendering (in an incorrect way).
- Added "r.DebugLightDiscardProp" / GDebugLightDiscardProp that allows discarding a proportion of the visible lights, to check performance scaling.
- Reorganized tiled deferred shader to reduce register pressure.
- Light grid build:
- Added view-space light data to speed up light grid build
- Added slightly improved cone culling test and re-ordererd the tests for better performance.
- Removed dead code: declaration of 'FClusteredLightsSceneInfo'
- Added Preexposure fix (also fixed exposure for light culling visualization)
#rb brian.karis
[CL 5771848 by Ola Olsson 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]
#rb Guillaume.Abadie
[FYI] arciel.rekman,rolando.caloca
#jira UE-66557
#ROBOMERGE-SOURCE: CL 5067079 in //UE4/Release-4.22/...
#ROBOMERGE-BOT: RELEASE (Release-4.22 -> Main)
[CL 5067089 by marcin undak in Main branch]
This split the GVisualizeTexture in two:
* first part that capture any texture using a pixel shader, implemented using render pass, that render graph can just automatically insert where needed;
* Second part to present on screem still in Renderer module, because using things like FCanvas, requiring
Depth buffer visualization is broken, because needs to have more functionality in FRDGTextureSRVDesc.
#rb none
[CL 4588745 by Guillaume Abadie in Dev-Rendering branch]
This implements the framework to write the high level rendering code into passes organized in direct acyclic graph. It is also unifying the uniform buffer, shader parameters, and pass parameters to same single API: structures with run time meta data. This allow high level user code be extremely seamless, user code debugging, and render graph ease of implementation and debugging.
Issue of collaborative work of Arne Schnober, Brian Karis, Daniel Wright, Marcus Wassmer and Guillaume Abadie.
Names of the graph managed resources are not final.
#rb Arne.Schnober, Brian.Karis, Daniel.Wright, Marcus.Wassmer
[CL 4492694 by Guillaume Abadie in Dev-Rendering branch]