// Copyright Epic Games, Inc. All Rights Reserved. #include "NaniteMaterials.h" #include "Async/ParallelFor.h" #include "Materials/Material.h" #include "Materials/MaterialRenderProxy.h" #include "NaniteDrawList.h" #include "NaniteSceneProxy.h" #include "NaniteVertexFactory.h" #include "NaniteVisualizationData.h" #include "NaniteRayTracing.h" #include "NaniteComposition.h" #include "NaniteShading.h" #include "Rendering/NaniteResources.h" #include "Rendering/NaniteStreamingManager.h" #include "RHI.h" #include "RHICommandList.h" #include "SceneUtils.h" #include "ScenePrivate.h" #include "ScreenPass.h" #include "GPUScene.h" #include "ClearQuad.h" #include "RendererModule.h" #include "PixelShaderUtils.h" #include "Lumen/LumenSceneCardCapture.h" #include "Substrate/Substrate.h" #include "SystemTextures.h" #include "BasePassRendering.h" #include "VariableRateShadingImageManager.h" #include "Lumen/Lumen.h" #include "ComponentRecreateRenderStateContext.h" #include "InstanceDataSceneProxy.h" extern TAutoConsoleVariable CVarParallelBasePassBuild; static TAutoConsoleVariable CVarNaniteMultipleSceneViewsInOnePass( TEXT("r.Nanite.MultipleSceneViewsInOnePass"), 1, TEXT("Supports rendering multiple views (FSceneView) whenever possible. Currently only ISR stereo rendering is supported."), ECVF_RenderThreadSafe ); extern int32 GNaniteShowStats; TRDGUniformBufferRef CreateDebugNaniteShadingUniformBuffer(FRDGBuilder& GraphBuilder) { FNaniteShadingUniformParameters* UniformParameters = GraphBuilder.AllocParameters(); UniformParameters->ClusterPageData = Nanite::GStreamingManager.GetClusterPageDataSRV(GraphBuilder); UniformParameters->HierarchyBuffer = Nanite::GStreamingManager.GetHierarchySRV(GraphBuilder); UniformParameters->VisibleClustersSWHW = GraphBuilder.CreateSRV(GSystemTextures.GetDefaultStructuredBuffer(GraphBuilder)); UniformParameters->ShadingBinData = GraphBuilder.CreateSRV(GSystemTextures.GetDefaultStructuredBuffer(GraphBuilder), PF_R32_UINT); const FRDGSystemTextures& SystemTextures = FRDGSystemTextures::Get(GraphBuilder); UniformParameters->VisBuffer64 = SystemTextures.Black; UniformParameters->DbgBuffer64 = SystemTextures.Black; UniformParameters->DbgBuffer32 = SystemTextures.Black; UniformParameters->ShadingMask = SystemTextures.Black; UniformParameters->MultiViewIndices = GraphBuilder.CreateSRV(GSystemTextures.GetDefaultStructuredBuffer(GraphBuilder)); UniformParameters->MultiViewRectScaleOffsets = GraphBuilder.CreateSRV(GSystemTextures.GetDefaultStructuredBuffer(GraphBuilder)); UniformParameters->InViews = GraphBuilder.CreateSRV(GSystemTextures.GetDefaultStructuredBuffer(GraphBuilder)); return GraphBuilder.CreateUniformBuffer(UniformParameters); } TRDGUniformBufferRef CreateDebugNaniteRasterUniformBuffer(FRDGBuilder& GraphBuilder) { FNaniteRasterUniformParameters* UniformParameters = GraphBuilder.AllocParameters(); UniformParameters->PageConstants.X = 0; UniformParameters->PageConstants.Y = Nanite::GStreamingManager.GetMaxStreamingPages(); UniformParameters->MaxNodes = Nanite::FGlobalResources::GetMaxNodes(); UniformParameters->MaxVisibleClusters = Nanite::FGlobalResources::GetMaxVisibleClusters(); UniformParameters->MaxCandidatePatches = Nanite::FGlobalResources::GetMaxCandidatePatches(); UniformParameters->MaxPatchesPerGroup = 0u; UniformParameters->MeshPass = 0u; UniformParameters->InvDiceRate = 1.0f; UniformParameters->RenderFlags = 0u; UniformParameters->DebugFlags = 0u; return GraphBuilder.CreateUniformBuffer(UniformParameters); }