==
* Added instance offset and count to primitive data, along with GetPrimitiveUniformShaderParameters() diffs
* Remaining FInstanceCullingManager& hooks through functions
* Various todo comments to address later
* Calls to (disabled for now) BuildRenderCommands()
* Mutability of FViewInfo in some spots
* Additional instance culling draw params in a few places
* EVertexInputStreamType cleanup
* UseVirtualShadowMaps() feature capability helper function
#authors ola.olsson, graham.wihlidal
#rb graham.wihlidal
#fyi brian.karis, rune.stubbe
[CL 15092149 by graham wihlidal in ue5-main branch]
Two pass occlusion for Non-VSM shadows
Changes shadowmap atlas rendering to render into the border, so we have real data for wide shadowmap filtering kernels. Also improves atlas HZB performance.
#rb ola.olsson
#fyi graham.wihlidal, brian.karis, andrew.lauritzen
[CL 14762582 by Rune Stubbe in ue5-main branch]
- Refactor shadow depth rendering high level to clean up passes a bit
- Add back in SnapResolution to allow the complete shadow maps to snap consistently with the shadow that is their copy source (otherwise the projections differ)
- NOTE: Shadow bias for directional lights is technically dependent on resolution, and it is baked into the high resolution map. Thus the copy path has a minor difference in biasing here but it's not major concern for the uses of the complete shadow map.
#rb ola.olsson
#ROBOMERGE-SOURCE: CL 14321491 in //UE5/Release-5.0-M2/...
#ROBOMERGE-BOT: STARSHIP (Release-5.0-M2 -> Main) (v738-14305781)
[CL 14321504 by andrew lauritzen in ue5-main branch]
- Use this shadow map for Lumen and volumetrics so that all geometry is present
- Resolution can be controlled with r.Shadow.CompleteShadowMapResolution (default 256). 0 disables, which will result in missing Nanite geometry in these secondary effects (as before this change)
- NOTE: Currently this shadow map is rendered with another pass over the geometry, but this will be replaced by a copy/resample/composite in a future change
Other changes:
- Some fixes to shadow map caching
- Some initial refactors to sorted projected shadow info lists; more to come to reduce the amount of code that iterates and filters AllProjectedShadows around the engine and centralize it in shadow setup.
- Removed unused parameters from a a few functions
#rb ola.olsson
#fyi krzysztof.narkowicz, daniel.wright, sebastien.hillaire
[CL 14224191 by andrew lauritzen in ue5-main branch]
#RB none
#ROBOMERGE-OWNER: arne.schober
#ROBOMERGE-AUTHOR: arne.schober
#ROBOMERGE-SOURCE: CL 12789290 via CL 12789324 via CL 12789325
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v681-12776863)
[CL 12789326 by arne schober in Main branch]
Also changing the interface for better encapsulation by cutting the origial itterator concept and focusing on small subset of configurable itteration strategies instead.
#RB Andrew.Scheidecker, Yoan.StAmant
#ROBOMERGE-OWNER: arne.schober
#ROBOMERGE-AUTHOR: arne.schober
#ROBOMERGE-SOURCE: CL 12785392 via CL 12785681 via CL 12785682
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v681-12776863)
[CL 12786795 by arne schober in Main branch]
#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]
* IntiViews
* Dispatch prepass parallel cmd list (flickering, as global buffers weren't committed).
* InitShadows.
* Commit global buffers (race condition and potential crash).
This was fixed by:
* Renamed FNiagaraGlobalReadBuffer to FGlobalDynamicReadBuffer and moved it out from Niagara.
* Removed all global buffer singletons and placed them inside appropriate renderers as static members.
* They are also separated into two - one for InitViews and one for InitShadows, so we can dispatch prepass while writing to the shadow global buffers.
* All global buffers are now passed as a parameter and/or through mesh collector.
#jira UE-69167
#rb Rolando.Caloca
#rnx
[CL 4871865 by Krzysztof Narkowicz in Main branch]
*InitViews computes approximate max number of dynamic draws and use it to allocate mesh draw command resources (primitive id vertex buffer, mesh draw command arrays, number of parallel draw tasks etc).
*DynamicMeshDrawCommandStorage was moved to the FMeshDrawCommandPassSetupTaskContext, as it's now internally handled by the task.
*Mobile BasePass sort key computation and BasePass / BasePassCSM list merging based on CSM visibility was fully moved to the FMeshDrawCommandPassSetupTask.
#rb Daniel.Wright
#fyi Dmitriy.Dyomin, Allan.Bentham
[CL 4719711 by Krzysztof Narkowicz in Dev-Rendering branch]
*FParallelMeshDrawCommandPass stored on View controls two parallel tasks and their data - sorting and merging task, and drawing task. It is initialized based on temporary visible mesh draw command lists inside InitViews. It is also the only way to submit mesh draw commands in parallel.
*Raytraycing mesh draw commands are now stored separately on the view.
*Local shadows now can be sorted in parallel too.
*Removed mobile SortMeshDrawCommands function override, which was required to merge NoCSM/CSM base pass lists. Instead mobile base pass is skipped inside InitViews and is sorted later - inside SortMobileBasePassAfterShadowInit.
#rb Daniel.Wright
#fyi Arne.Schober, Dmitriy.Dyomin, Allan.Bentham
[CL 4690851 by Krzysztof Narkowicz in Dev-Rendering branch]