UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SceneCullingRenderer.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "SceneCulling.h"
7
8class FSceneCulling;
11
13 SHADER_PARAMETER(uint32, NumCellsPerBlockLog2)
14 SHADER_PARAMETER(uint32, CellBlockDimLog2)
15 SHADER_PARAMETER(uint32, LocalCellCoordMask) // (1 << NumCellsPerBlockLog2) - 1
16 SHADER_PARAMETER(int32, FirstLevel)
18 SHADER_PARAMETER(uint32, NumAllocatedChunks)
19
28
33{
35public:
37
39
40 inline bool IsEnabled() const { return SceneCulling.IsEnabled(); }
41
45 FInstanceHierarchyParameters& GetShaderParameters(FRDGBuilder& GraphBuilder);
46
53
57 FSceneInstanceCullingQuery* CreateInstanceQuery(FRDGBuilder& GraphBuilder);
58
61 void DebugRender(FRDGBuilder& GraphBuilder, TArrayView<FViewInfo> Views);
62
63private:
64 FSceneCulling& SceneCulling;
65 using FSpatialHash = FSceneCulling::FSpatialHash;
66
67 FInstanceHierarchyParameters ShaderParameters;
68 FRDGBuffer* CellHeadersRDG = nullptr;
69 FRDGBuffer* ItemChunksRDG = nullptr;
70 FRDGBuffer* InstanceIdsRDG = nullptr;
71 FRDGBuffer* CellBlockDataRDG = nullptr;
72 FRDGBuffer* ExplicitChunkBoundsRDG = nullptr;
73 FRDGBuffer* ExplicitChunkCellIdsRDG = nullptr;
74 FRDGBuffer* UsedChunkIdMaskRDG = nullptr;
75};
76
80{
81public:
83
88
92 void Add(uint32 FirstPrimaryView, uint32 NumPrimaryViews, const FCullingVolume& CullingVolume);
93
97 void Dispatch(FRDGBuilder& GraphBuilder, bool bAllowAsync = true);
98
99 // Get GPU stuffs, TBD
101
108 FSceneInstanceCullResult* GetResultAsync() const { return CullingResult; }
109
114 bool IsAsync() const { return AsyncTaskHandle.IsValid() && !AsyncTaskHandle.IsCompleted(); }
115
119 UE::Tasks::FTask GetAsyncTaskHandle() const { return AsyncTaskHandle; }
120
121 FSceneCullingRenderer& GetSceneCullingRenderer() { return SceneCullingRenderer; }
122
124 {
125 return ViewDrawGroups;
126 }
127
128private:
129 void ComputeResult();
130
131 FSceneCullingRenderer& SceneCullingRenderer;
132
134 FViewDrawGroups ViewDrawGroups;
135
136 struct FCullingJob
137 {
138 FCullingVolume CullingVolume;
139 int32 ViewGroupId = 0;
140 };
141
143
144 FSceneInstanceCullResult *CullingResult = nullptr;
145
146 UE::Tasks::FTask AsyncTaskHandle;
147};
148
149
154{
155public:
157 // The list of cell/view-group pairs to feed to rendering
159 // List of view group IDs (indexing into the query) that should be culled on a per chunk basis.
163 // This is the number of occluded chunks that might be emitted (if everything is occluded in the Main pass).
165 // This is the number of allocated chunks, we run a thread for each and skip those that are not currently in use.
170};
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_SCENE_EXTENSION_RENDERER(ClassName, SceneExtensionClassName)
Definition SceneExtensions.h:394
#define SHADER_PARAMETER_RDG_BUFFER_SRV(ShaderType, MemberName)
Definition ShaderParameterMacros.h:1800
#define BEGIN_SHADER_PARAMETER_STRUCT(StructTypeName, DllStorage)
Definition ShaderParameterMacros.h:1482
#define END_SHADER_PARAMETER_STRUCT()
Definition ShaderParameterMacros.h:1485
#define SHADER_PARAMETER(MemberType, MemberName)
Definition ShaderParameterMacros.h:1684
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition RenderGraphResources.h:1321
Definition RenderGraphBuilder.h:49
Definition SceneCullingRenderer.h:33
FSceneCullingRenderer(FSceneRendererBase &InSceneRenderer, FSceneCulling &InSceneCulling)
Definition SceneCullingRenderer.h:38
FSceneInstanceCullingQuery * CullInstances(FRDGBuilder &GraphBuilder, const FConvexVolume &ViewCullVolume)
Definition SceneCullingRenderer.h:52
bool IsEnabled() const
Definition SceneCullingRenderer.h:40
Definition SceneCulling.h:40
THierarchicalSpatialHashGrid< FBlockTraits > FSpatialHash
Definition SceneCulling.h:153
Definition SceneCullingRenderer.h:154
FCellChunkDraws CellChunkDraws
Definition SceneCullingRenderer.h:158
FSceneCullingRenderer * SceneCullingRenderer
Definition SceneCullingRenderer.h:167
uint32 UncullableNumItemChunks
Definition SceneCullingRenderer.h:169
uint32 UncullableItemChunksOffset
Definition SceneCullingRenderer.h:168
FChunkCullViewGroupIds ChunkCullViewGroupIds
Definition SceneCullingRenderer.h:161
uint32 NumAllocatedChunks
Definition SceneCullingRenderer.h:166
int32 MaxOccludedChunkDraws
Definition SceneCullingRenderer.h:164
uint32 NumInstanceGroups
Definition SceneCullingRenderer.h:162
Definition SceneCullingRenderer.h:80
void Dispatch(FRDGBuilder &GraphBuilder, bool bAllowAsync=true)
Definition SceneCullingRenderer.cpp:234
int32 AddViewDrawGroup(uint32 FirstPrimaryView, uint32 NumPrimaryViews)
Definition SceneCullingRenderer.cpp:204
FSceneInstanceCullResult * GetResultAsync() const
Definition SceneCullingRenderer.h:108
TConstArrayView< FViewDrawGroup > GetViewDrawGroups() const
Definition SceneCullingRenderer.h:123
UE::Tasks::FTask GetAsyncTaskHandle() const
Definition SceneCullingRenderer.h:119
FSceneCullingRenderer & GetSceneCullingRenderer()
Definition SceneCullingRenderer.h:121
bool IsAsync() const
Definition SceneCullingRenderer.h:114
FSceneInstanceCullResult * GetResult()
Definition SceneCullingRenderer.cpp:260
Definition SceneRendering.h:2023
Definition SceneExtensions.h:69
Definition ArrayView.h:139
Definition Array.h:670
bool IsValid() const
Definition Task.h:62
bool IsCompleted() const
Definition Task.h:68
Definition ConvexVolume.h:44
Definition SceneCulling.h:28