Save 0.08ms on simple case on last gen platform.
#rb none
#jira none
#preflight 62741a15021adeb35cb29fd7
#fyi sebastien.hillaire
[CL 20062542 by Charles deRousiers in ue5-main branch]
This CL changes LumenScreenProbeGather and LumenReflection to support 'overflow' tiles which allows to lit multiple layers per pixels. The screen is now divided into the 'primary' space (i.e., the regular view rect), and an 'overflow' space (offset at the bottom of the view texture, and whose size is configurable with a CVars). During the classification/integration/... passes, an extra indirect pass is done for computing the overflow tiles. This 'flatten' layout also allows to bookeep history data from frame to frame.
There are a number of follow up to this CL when Strata is enabled:
* Multi-view code is in place but not working correctly yet when Strata is enabled
* Reflection bilateral filter place is not fully stable yet
* UAV overlap for resource written by the regular & overflow pass are not put in place yet
* 'Overflow' tile can have border filtering artifact that needs to be addressed.
Performance and occupancy regression have done on PS5 on CitySample.
#rb daniel.wright, sebastien.hillaire
#preflight 624ed58c9660409d77a83309
#ROBOMERGE-AUTHOR: charles.derousiers
#ROBOMERGE-SOURCE: CL 20008236 via CL 20008250 via CL 20008258
#ROBOMERGE-BOT: UE5 (Release-Engine-Staging -> Main) (v943-19904690)
[CL 20009992 by charles derousiers in ue5-main branch]
* Existing calls to CreateSceneTextureShaderParameters and similar functions use "GetSceneTexturesChecked", which allows for the possibility that they are reached in a code path where scene textures haven't been initialized, and nullptr is returned instead of asserting. The shader parameter setup functions then fill in dummy defaults for that case. The goal was to precisely match the original behavior, which queried the RDG blackboard, and gracefully handled null if scene textures weren't there. This definitely appears to occur in FNiagaraGpuComputeDispatch::ProcessPendingTicksFlush, which can be called with a dummy scene with no scene textures. In the future, I may change this so dummy defaults are filled in for FSceneTextures at construction time, so the structure is never in an uninitialized state, but I would like to set up a test case for the Niagara code path before doing that, and the checks aren't harmful in the meantime.
* I marked as deprecated global functions which query values from FSceneTexturesConfig, but they'll still work with the caveat that if you use multi-view-family rendering, the results will be indeterminate (whatever view family rendered last). There was only one case outside the scene renderer that accessed the globals (depth clear value), which I removed, noting that there is nowhere in the code where we modify the depth clear value from its global default. I would like to permanently deprecate or remove these at some point. Display Cluster is the only code that's currently using the multi-view-family code path, and as a new (still incomplete) feature, third party code can't be using it, and won't be affected.
#jira NONE
#rb chris.kulla zach.bethel mihnea.balta
#preflight 6261aca76119a1a496bd2644
[CL 19873983 by jason hoerner in ue5-main branch]
* Added "BeginRenderingViewFamilies" render interface call that accepts multiple view families. Original "BeginRenderingViewFamily" falls through to this.
* FSceneRenderer modified to include an array of view families, plus an active view family and the Views for that family.
* Swap ViewFamily to ActiveViewFamily.
* Swap Views array from TArray<FViewInfo> to TArrayView<FViewInfo>, including where the Views array is passed to functions.
* FSceneRenderer iterates over the view families, rendering each one at a time, as separate render graph executions.
* Some frame setup and cleanup logic outside the render graph runs once.
* Moved stateful FSceneRenderer members to FViewFamilyInfo, to preserve existing one-at-a-time view family rendering behavior.
* Display Cluster (Virtual Production) uses new API.
Next step will push everything into one render graph, which requires handling per-family external resources and cleaning up singletons (like FSceneTextures and FSceneTexturesConfig). Once that's done, we'll be in a position to further interleave rendering, properly handle once per frame work, and solve artifacts in various systems.
#jira none
#rnx
#rb zach.bethel
#preflight 625df821b21bb49791d377c9
[CL 19813996 by jason hoerner in ue5-main branch]
- This debug mode is mode 3.
- StrataTree can be written/read and used in later pass to print/draw on screen.
#rb none
#preflight 625864a37a394d0082adb970
[CL 19760364 by Sebastien Hillaire in ue5-main branch]
- partial checkin to continue on another stream.
- Write to the end of the strata texture array is working.
#rb none
#preflight none
#fyi charles.derousiers
[CL 19752138 by Sebastien Hillaire in ue5-main branch]
This CL split the resources shared between views (non-buffer/tiled data) and resources unique to view (e.g., tile data). This is to ease overall setup, but we might re-regroup them later.
#rb none
#jira none
#preflight 62488f4d927e60e3418751db
#fyi sebastien.hillaire
[CL 19601993 by Charles deRousiers in ue5-main branch]
- Deprecated all the Create functions in FRHITextureDesc
- Added Create functions to FRDGTextureDesc which now derives from FRHITextureDesc instead of just being an alias
- FRHITextureCreateDesc can now be constructed functionally via SetXXX functions that return a reference to the FRHITextureCreateDesc
- Fixed a couple bad uses of FRHITexture*Desc types that should have been using FRDGTextureDesc
#jira none
#rb zach.bethel, luke.thatcher, mihnea.balta
#preflight 623df2e16d39f6b5a057299e
[CL 19516773 by christopher waters in ue5-main branch]
For pixel with complex/multi-BSDF computes BSDF material byte/index offsets and 'overflowing' tile.
This wil be used by Lumen for handling/parallelizing lighting computation.
#rb none
#jira none
#preflight 6234c38848746817f13c87bb
#fyi sebastien.hillaire
[CL 19438082 by Charles deRousiers in ue5-main branch]