14#include "SceneCullingDefinitions.h"
98 template <
typename ResultConsumerType>
131 using UIntType = std::make_unsigned_t<FIntVector4::IntType>;
164 bool IsSmallCullingVolume(
const FCullingVolume& CullingVolume)
const;
173 void ValidateAllInstanceAllocations();
180 struct FCellIndexCacheEntry
182 static constexpr uint32 SingleInstanceMask = 1u << 31;
183 static constexpr uint32 CellIndexMask = (1u << 31) - 1u;
184 static constexpr uint32 CellIndexMax = 1u << 31;
195 check(!bSingleInstanceOnly || NumInstances == 1);
197 if (NumInstances > 1)
200 Items.Add(CellIndex);
201 Items.Add(NumInstances);
206 Items.Add(
uint32(CellIndex) | SingleInstanceMask);
215 check(bSingleInstanceOnly);
218 Items[
Index] =
uint32(CellIndex) | SingleInstanceMask;
236 if ((
PackedCellIndex & FCellIndexCacheEntry::SingleInstanceMask) == 0u)
243 bool bSingleInstanceOnly =
false;
250 struct FPrimitiveState
252 static constexpr int32 PayloadBits = 28;
255 : InstanceDataOffset(-1)
275 int32 InstanceDataOffset;
290 int32 TotalCellIndexCacheItems = 0;
292 int32 NumDynamicInstances = 0;
293 int32 NumStaticInstances = 0;
299 bool bIsEnabled =
false;
300 bool bForceFullExplictBoundsBuild =
false;
322 int32 UncullableNumItemChunks = 0;
324 int32 SmallFootprintCellSideThreshold = 16;
325 bool bTestCellVsQueryBounds =
true;
326 bool bUseAsyncUpdate =
true;
327 bool bUseAsyncQuery =
true;
328 bool bPackedCellDataLocked =
false;
330 inline uint32 AllocateChunk();
331 inline void FreeChunk(
uint32 ChunkId);
333 inline void UnLockChunkCellData(
uint32 ChunkId);
334 inline int32 CellIndexToBlockId(
int32 CellIndex);
#define check(expr)
Definition AssertionMacros.h:314
@ INDEX_NONE
Definition CoreMiscDefines.h:150
@ ForceInit
Definition CoreMiscDefines.h:155
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::Math::TIntVector3< int32 > FIntVector3
Definition MathFwd.h:92
UE::Math::TSphere< double > FSphere
Definition MathFwd.h:54
UE::Math::TVector< double > FVector3d
Definition MathFwd.h:60
#define MAX_int32
Definition NumericLimits.h:25
#define DECLARE_SCENE_EXTENSION_UPDATER(ClassName, SceneExtensionClassName)
Definition SceneExtensions.h:390
#define DECLARE_SCENE_EXTENSION(ModuleExport, ClassName)
Definition SceneExtensions.h:384
Definition PrimitiveSceneInfo.h:266
Definition RenderGraphBuilder.h:49
Definition SceneCulling.cpp:810
Definition SceneCullingRenderer.h:33
Definition SceneCulling.h:52
virtual void PostSceneUpdate(FRDGBuilder &GraphBuilder, const FScenePostUpdateChangeSet &ChangeSet) override
Definition SceneCulling.cpp:2719
virtual void PreSceneUpdate(FRDGBuilder &GraphBuilder, const FScenePreUpdateChangeSet &ChangeSet, FSceneUniformBuffer &SceneUniforms) override
Definition SceneCulling.cpp:2682
~FUpdater()
Definition SceneCulling.cpp:2647
FUpdater(FSceneCulling &InSceneCulling)
Definition SceneCulling.h:56
Definition SceneCulling.h:40
static bool ShouldCreateExtension(FScene &Scene)
Definition SceneCulling.cpp:275
void PublishStats()
Definition SceneCulling.cpp:2594
virtual ISceneExtensionRenderer * CreateRenderer(FSceneRendererBase &InSceneRenderer, const FEngineShowFlags &EngineShowFlags)
Definition SceneCulling.cpp:2642
virtual ISceneExtensionUpdater * CreateUpdater()
Definition SceneCulling.cpp:2637
FSpatialHash::FFootprint32 FFootprint32
Definition SceneCulling.h:160
UE::Tasks::FTask GetUpdateTaskHandle() const
Definition SceneCulling.cpp:2836
FSpatialHash::FFootprint8 FFootprint8
Definition SceneCulling.h:159
void EndUpdate(FRDGBuilder &GraphBuilder, FSceneUniformBuffer &SceneUniformBuffer, bool bPublishStats)
Definition SceneCulling.cpp:2777
FSpatialHash::FFootprint64 FFootprint64
Definition SceneCulling.h:161
void TestSphere(const FSphere &Sphere, ResultConsumerType &ResultConsumer) const
Definition SceneCulling.inl:36
bool IsEnabled() const
Definition SceneCulling.h:90
Definition SceneCullingRenderer.h:80
Definition ScenePrimitiveUpdates.h:129
Definition ScenePrimitiveUpdates.h:116
Definition SceneRendering.h:2023
Definition ScenePrivate.h:2875
Definition SpanAllocator.h:15
Definition SceneExtensions.h:69
Definition SceneExtensions.h:45
Definition SceneExtensions.h:24
FScene & Scene
Definition SceneExtensions.h:40
RenderingSpatialHash::TLocation< int8 > FLocation8
Definition HierarchicalSpatialHashGrid.h:181
TFootprint< int8 > FFootprint8
Definition HierarchicalSpatialHashGrid.h:214
RenderingSpatialHash::TLocation< int32 > FLocation32
Definition HierarchicalSpatialHashGrid.h:180
RenderingSpatialHash::TLocation< int64 > FLocation64
Definition HierarchicalSpatialHashGrid.h:179
TFootprint< int64 > FFootprint64
Definition HierarchicalSpatialHashGrid.h:212
TFootprint< int32 > FFootprint32
Definition HierarchicalSpatialHashGrid.h:213
Definition RefCounting.h:454
Definition SharedPointer.h:692
Definition SparseArray.h:524
Definition RendererPrivateUtils.h:191
@ Dynamic
Definition SpatialAccelerationCollection.h:22
@ Unknown
Definition BehaviorTreeTypes.h:183
FString ToString(uint16 Value)
Definition PathFollowingComponent.cpp:82
double GetCellSize(int32 Level)
Definition RenderingSpatialHash.h:96
State
Definition PacketHandler.h:88
UE_STRING_CLASS Result(Forward< LhsType >(Lhs), RhsLen)
Definition String.cpp.inl:732
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition ConvexVolume.h:44
Definition SceneCulling.h:28
FVector3d WorldToVolumeTranslation
Definition SceneCulling.h:30
FSphere3d Sphere
Definition SceneCulling.h:33
FConvexVolume ConvexVolume
Definition SceneCulling.h:31
Definition ShowFlags.h:56
Definition ScenePrivate.h:2459
Definition SceneCulling.h:102
FORCEINLINE int32 GetLevel() const
Definition SceneCulling.h:119
FIntVector4 Data
Definition SceneCulling.h:137
FORCEINLINE void operator=(const FBlockLocAligned &BlockLocAligned)
Definition SceneCulling.h:115
FORCEINLINE bool operator==(const FBlockLocAligned &BlockLocAligned) const
Definition SceneCulling.h:110
FORCEINLINE FIntVector3 GetCoord() const
Definition SceneCulling.h:121
FORCEINLINE FBlockLocAligned(const RenderingSpatialHash::TLocation< int64 > &InLoc)
Definition SceneCulling.h:105
FORCEINLINE FBlockLocAligned()
Definition SceneCulling.h:103
FORCEINLINE FVector3d GetWorldPosition() const
Definition SceneCulling.h:123
FORCEINLINE uint32 GetHash() const
Definition SceneCulling.h:129
Definition SceneCulling.h:143
FBlockLoc FBlockLoc
Definition SceneCulling.h:145
static constexpr int64 MaxCellCoord
Definition SceneCulling.h:150
static constexpr int32 CellBlockDimLog2
Definition SceneCulling.h:144
static constexpr int64 MaxCellBlockCoord
Definition SceneCulling.h:148
Definition SceneCulling.h:187
int32 CellIndex
Definition SceneCulling.h:189
int32 NumInstances
Definition SceneCulling.h:188
Definition RenderingSpatialHash.h:17
IntType Z
Definition IntVector.h:1231
IntType W
Definition IntVector.h:1234
IntType X
Definition IntVector.h:1225
IntType Y
Definition IntVector.h:1228