UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
FSceneCullingBuilder Class Reference

Classes

struct  FChunkBuilder
 
struct  FStats
 
struct  FTempCell
 

Public Types

enum class  EExplicitBoundsUpdateMode { Disabled , Incremental , Full }
 
using FSpatialHash = FSceneCulling::FSpatialHash
 
using FHashElementId = FSpatialHash::FHashElementId
 
using FPrimitiveState = FSceneCulling::FPrimitiveState
 
using FCellIndexCacheEntry = FSceneCulling::FCellIndexCacheEntry
 
using FBlockLoc = FSceneCulling::FBlockLoc
 

Public Member Functions

bool IsTempCell (int32 CellIndex)
 
 FSceneCullingBuilder (FSceneCulling &InSceneCulling, bool bAnySceneUpdatesExpected)
 
SC_FORCEINLINE uint32 ReallocateChunkRange (uint32 NewNumItemChunks, uint32 PrevItemChunksOffset, uint32 PrevNumItemChunks)
 
SC_FORCEINLINE FHashElementId FindOrAddBlock (const FBlockLoc &BlockLoc)
 
SC_FORCEINLINE FBlockLoc ToBlock (const FSceneCulling::FLocation64 &Loc)
 
SC_FORCEINLINE FTempCellGetOrAddTempCell (const FSceneCulling::FLocation64 &InstanceCellLoc)
 
SC_FORCEINLINE FTempCellGetOrAddTempCell (int32 CellIndex)
 
SC_FORCEINLINE int32 AddRange (const FSceneCulling::FLocation64 &InstanceCellLoc, int32 InInstanceIdOffset, int32 InInstanceIdCount, EUpdateFrequencyCategory::EType UpdateFrequencyCategory)
 
SC_FORCEINLINE int32 AddToCell (const FSceneCulling::FLocation64 &InstanceCellLoc, int32 InstanceId, EUpdateFrequencyCategory::EType UpdateFrequencyCategory)
 
SC_FORCEINLINE FSceneCulling::FLocation64 ClampCellLoc (const FSceneCulling::FLocation64 &InLoc)
 
template<EUpdateFrequencyCategory::EType UpdateFrequencyCategory, typename HashLocationComputerType >
SC_FORCEINLINE void BuildInstanceRange (int32 InstanceDataOffset, int32 NumInstances, HashLocationComputerType HashLocationComputer, FSceneCulling::FCellIndexCacheEntry &CellIndexCacheEntry)
 
SC_FORCEINLINE FHashElementId GetBlockId (const FBlockLoc &BlockLoc)
 
SC_FORCEINLINE int32 GetCellIndex (const FSceneCulling::FLocation64 &CellLoc)
 
SC_FORCEINLINE void FinalizeTempCellsAndUncullable ()
 
int32 AllocateCacheEntry ()
 
void FreeCacheEntry (int32 CacheIndex)
 
FCellIndexCacheEntryGetCacheEntry (int32 CacheIndex)
 
SC_FORCEINLINE void LogCell (const FCellHeader &CellHeader)
 
uint32 AllocateChunk ()
 
void FreeChunk (uint32 ChunkId)
 
SC_FORCEINLINE FPrimitiveState ComputePrimitiveState (const FPrimitiveBounds &Bounds, FPrimitiveSceneInfo *PrimitiveSceneInfo, int32 NumInstances, int32 InstanceDataOffset, FPrimitiveSceneProxy *SceneProxy, FInstanceDataFlags InstanceDataFlags, const FPrimitiveState &PrevState)
 
template<EUpdateFrequencyCategory::EType UpdateFrequencyCategory>
SC_FORCEINLINE int32 AddCachedOrDynamic (const FInstanceSceneDataBuffers *InstanceSceneDataBuffers, int32 CacheIndex, const bool bHasPerInstanceLocalBounds, int32 InstanceDataOffset, int32 NumInstances)
 
SC_FORCEINLINE const FInstanceSceneDataBuffersGetInstanceSceneDataBuffers (FPrimitiveSceneInfo *PrimitiveSceneInfo)
 
SC_FORCEINLINE void AddPrecomputed (int32 InstanceDataOffset, const TSharedPtr< FInstanceSceneDataImmutable, ESPMode::ThreadSafe > &InstanceSceneDataImmutable)
 
SC_FORCEINLINE void AddInstances (FPersistentPrimitiveIndex PersistentId, FPrimitiveSceneInfo *PrimitiveSceneInfo)
 
void MarkCellForRemove (int32 CellIndex, int32 NumInstances, EUpdateFrequencyCategory::EType UpdateFrequencyCategory)
 
void MarkForRemove (int32 CellIndex, int32 InstanceDataOffset, int32 NumInstances, EUpdateFrequencyCategory::EType UpdateFrequencyCategory)
 
SC_FORCEINLINE void MarkCellBoundsDirty (int32 CellIndex, bool bStaticChanged, bool bDynamicChanged)
 
SC_FORCEINLINE void MarkCellBoundsDirty (int32 CellIndex, EUpdateFrequencyCategory::EType UpdateFrequencyCategory)
 
void RemovePrecomputed (FSceneCulling::FPrimitiveState &PrimitiveState)
 
void MarkInstancesForRemoval (FPersistentPrimitiveIndex PersistentPrimitiveIndex, FPrimitiveSceneInfo *PrimitiveSceneInfo)
 
template<typename HashLocationComputerType >
SC_FORCEINLINE void UpdateProcessDynamicInstances (HashLocationComputerType &HashLocationComputer, int32 InstanceDataOffset, int32 NumInstances, int32 PrevNumInstances, FSceneCulling::FCellIndexCacheEntry &CellIndexCacheEntry)
 
SC_FORCEINLINE void UpdateInstances (FPersistentPrimitiveIndex PersistentPrimitiveIndex, FPrimitiveSceneInfo *PrimitiveSceneInfo)
 
bool IsMarkedForRemove (uint32 InstanceId)
 
void PublishStats ()
 
void UploadToGPU (FRDGBuilder &GraphBuilder, FSceneUniformBuffer &SceneUniformBuffer)
 
void ProcessPreSceneUpdate (const FScenePreUpdateChangeSet &ScenePreUpdateData)
 
void ProcessPostSceneUpdate (const FScenePostUpdateChangeSet &ScenePostUpdateData)
 

Public Attributes

EExplicitBoundsUpdateMode ExplicitBoundsMode = EExplicitBoundsUpdateMode::Disabled
 
FStats Stats
 
TBitArray< SceneRenderingAllocatorRemovedInstanceFlags
 
int32 LowestFreeCacheIndex = 0
 
FSceneCulling::FLocation64 CachedCellLoc
 
int32 CachedCellIdIndex = -1
 
TArray< FTempCell, SceneRenderingAllocatorTempCells
 
int32 TotalCellChunkDataCount = 0
 
FSceneCullingSceneCulling
 
FSceneCulling::FSpatialHashSpatialHash
 
FSceneCulling::FSpatialHash::FSpatialHashMapSpatialHashMap
 
TBitArray< SceneRenderingAllocatorTempCellMask
 
int32 NumDirtyBlocks = 0
 
TBitArray< SceneRenderingAllocatorDirtyBlocks
 
TBitArray< SceneRenderingAllocatorDirtyChunks
 
TBitArray< SceneRenderingAllocatorDirtyCellBoundsMaskStatic
 
TBitArray< SceneRenderingAllocatorDirtyCellBoundsMaskDynamic
 
TArray< int32, SceneRenderingAllocatorDirtyCellBoundsIndices
 
TArray< FIntVector2, SceneRenderingAllocatorDirtyChunkBoundsData
 
TStructuredBufferScatterUploader< FCellBlockDataBlockDataUploader
 
TStructuredBufferScatterUploader< uint32, INSTANCE_HIERARCHY_MAX_CHUNK_SIZEItemChunkDataUploader
 
TStructuredBufferScatterUploader< FPackedCellHeaderCellHeaderUploader
 
TStructuredBufferScatterUploader< uint32ItemChunkUploader
 
FPrimitiveState::EState DynamicInstancedPrimitiveState = FPrimitiveState::Dynamic
 
int32 TotalUpdatedInstances = 0
 
int32 TotalAddedInstances = 0
 
int32 TotalRemovedInstances = 0
 
bool bUsePrecomputed = false
 

Static Public Attributes

static constexpr uint32 TempCellMarker = 0xFFFFFFFFu
 
static constexpr int32 CellBlockSize = FSpatialHash::CellBlockSize
 
static constexpr int32 CellBlockDimLog2 = FSpatialHash::CellBlockDimLog2
 
static constexpr int32 MaxChunkSize = int32(INSTANCE_HIERARCHY_MAX_CHUNK_SIZE)
 
static constexpr FPackedCellHeader InvalidPackedCell = FPackedCellHeader{ 0u, 0u }
 

Member Typedef Documentation

◆ FBlockLoc

◆ FCellIndexCacheEntry

using FSceneCullingBuilder::FCellIndexCacheEntry = FSceneCulling::FCellIndexCacheEntry

◆ FHashElementId

◆ FPrimitiveState

using FSceneCullingBuilder::FPrimitiveState = FSceneCulling::FPrimitiveState

◆ FSpatialHash

Member Enumeration Documentation

◆ EExplicitBoundsUpdateMode

Enumerator
Disabled 
Incremental 
Full 

Constructor & Destructor Documentation

◆ FSceneCullingBuilder()

FSceneCullingBuilder::FSceneCullingBuilder ( FSceneCulling InSceneCulling,
bool  bAnySceneUpdatesExpected 
)
inline

Member Function Documentation

◆ AddCachedOrDynamic()

template<EUpdateFrequencyCategory::EType UpdateFrequencyCategory>
SC_FORCEINLINE int32 FSceneCullingBuilder::AddCachedOrDynamic ( const FInstanceSceneDataBuffers InstanceSceneDataBuffers,
int32  CacheIndex,
const bool  bHasPerInstanceLocalBounds,
int32  InstanceDataOffset,
int32  NumInstances 
)
inline

◆ AddInstances()

SC_FORCEINLINE void FSceneCullingBuilder::AddInstances ( FPersistentPrimitiveIndex  PersistentId,
FPrimitiveSceneInfo PrimitiveSceneInfo 
)
inline

◆ AddPrecomputed()

SC_FORCEINLINE void FSceneCullingBuilder::AddPrecomputed ( int32  InstanceDataOffset,
const TSharedPtr< FInstanceSceneDataImmutable, ESPMode::ThreadSafe > &  InstanceSceneDataImmutable 
)
inline

◆ AddRange()

SC_FORCEINLINE int32 FSceneCullingBuilder::AddRange ( const FSceneCulling::FLocation64 InstanceCellLoc,
int32  InInstanceIdOffset,
int32  InInstanceIdCount,
EUpdateFrequencyCategory::EType  UpdateFrequencyCategory 
)
inline

◆ AddToCell()

SC_FORCEINLINE int32 FSceneCullingBuilder::AddToCell ( const FSceneCulling::FLocation64 InstanceCellLoc,
int32  InstanceId,
EUpdateFrequencyCategory::EType  UpdateFrequencyCategory 
)
inline

◆ AllocateCacheEntry()

int32 FSceneCullingBuilder::AllocateCacheEntry ( )
inline

◆ AllocateChunk()

uint32 FSceneCullingBuilder::AllocateChunk ( )
inline

◆ BuildInstanceRange()

SC_FORCEINLINE void FSceneCullingBuilder::BuildInstanceRange ( int32  InstanceDataOffset,
int32  NumInstances,
HashLocationComputerType  HashLocationComputer,
FSceneCulling::FCellIndexCacheEntry &  CellIndexCacheEntry 
)
inline

◆ ClampCellLoc()

SC_FORCEINLINE FSceneCulling::FLocation64 FSceneCullingBuilder::ClampCellLoc ( const FSceneCulling::FLocation64 InLoc)
inline

◆ ComputePrimitiveState()

SC_FORCEINLINE FPrimitiveState FSceneCullingBuilder::ComputePrimitiveState ( const FPrimitiveBounds Bounds,
FPrimitiveSceneInfo PrimitiveSceneInfo,
int32  NumInstances,
int32  InstanceDataOffset,
FPrimitiveSceneProxy SceneProxy,
FInstanceDataFlags  InstanceDataFlags,
const FPrimitiveState PrevState 
)
inline

◆ FinalizeTempCellsAndUncullable()

SC_FORCEINLINE void FSceneCullingBuilder::FinalizeTempCellsAndUncullable ( )
inline

◆ FindOrAddBlock()

SC_FORCEINLINE FHashElementId FSceneCullingBuilder::FindOrAddBlock ( const FBlockLoc BlockLoc)
inline

◆ FreeCacheEntry()

void FSceneCullingBuilder::FreeCacheEntry ( int32  CacheIndex)
inline

◆ FreeChunk()

void FSceneCullingBuilder::FreeChunk ( uint32  ChunkId)
inline

◆ GetBlockId()

SC_FORCEINLINE FHashElementId FSceneCullingBuilder::GetBlockId ( const FBlockLoc BlockLoc)
inline

◆ GetCacheEntry()

FCellIndexCacheEntry & FSceneCullingBuilder::GetCacheEntry ( int32  CacheIndex)
inline

◆ GetCellIndex()

SC_FORCEINLINE int32 FSceneCullingBuilder::GetCellIndex ( const FSceneCulling::FLocation64 CellLoc)
inline

◆ GetInstanceSceneDataBuffers()

SC_FORCEINLINE const FInstanceSceneDataBuffers * FSceneCullingBuilder::GetInstanceSceneDataBuffers ( FPrimitiveSceneInfo PrimitiveSceneInfo)
inline

◆ GetOrAddTempCell() [1/2]

SC_FORCEINLINE FTempCell & FSceneCullingBuilder::GetOrAddTempCell ( const FSceneCulling::FLocation64 InstanceCellLoc)
inline

◆ GetOrAddTempCell() [2/2]

SC_FORCEINLINE FTempCell & FSceneCullingBuilder::GetOrAddTempCell ( int32  CellIndex)
inline

◆ IsMarkedForRemove()

bool FSceneCullingBuilder::IsMarkedForRemove ( uint32  InstanceId)
inline

◆ IsTempCell()

bool FSceneCullingBuilder::IsTempCell ( int32  CellIndex)
inline

◆ LogCell()

SC_FORCEINLINE void FSceneCullingBuilder::LogCell ( const FCellHeader CellHeader)
inline

◆ MarkCellBoundsDirty() [1/2]

SC_FORCEINLINE void FSceneCullingBuilder::MarkCellBoundsDirty ( int32  CellIndex,
bool  bStaticChanged,
bool  bDynamicChanged 
)
inline

◆ MarkCellBoundsDirty() [2/2]

SC_FORCEINLINE void FSceneCullingBuilder::MarkCellBoundsDirty ( int32  CellIndex,
EUpdateFrequencyCategory::EType  UpdateFrequencyCategory 
)
inline

◆ MarkCellForRemove()

void FSceneCullingBuilder::MarkCellForRemove ( int32  CellIndex,
int32  NumInstances,
EUpdateFrequencyCategory::EType  UpdateFrequencyCategory 
)
inline

◆ MarkForRemove()

void FSceneCullingBuilder::MarkForRemove ( int32  CellIndex,
int32  InstanceDataOffset,
int32  NumInstances,
EUpdateFrequencyCategory::EType  UpdateFrequencyCategory 
)
inline

◆ MarkInstancesForRemoval()

void FSceneCullingBuilder::MarkInstancesForRemoval ( FPersistentPrimitiveIndex  PersistentPrimitiveIndex,
FPrimitiveSceneInfo PrimitiveSceneInfo 
)
inline

◆ ProcessPostSceneUpdate()

void FSceneCullingBuilder::ProcessPostSceneUpdate ( const FScenePostUpdateChangeSet ScenePostUpdateData)
inline

◆ ProcessPreSceneUpdate()

void FSceneCullingBuilder::ProcessPreSceneUpdate ( const FScenePreUpdateChangeSet ScenePreUpdateData)
inline

◆ PublishStats()

void FSceneCullingBuilder::PublishStats ( )
inline

◆ ReallocateChunkRange()

SC_FORCEINLINE uint32 FSceneCullingBuilder::ReallocateChunkRange ( uint32  NewNumItemChunks,
uint32  PrevItemChunksOffset,
uint32  PrevNumItemChunks 
)
inline

Allocate space for a range of chunk-offsets in the buffer if needed, and free the previous chunk if there was one.

◆ RemovePrecomputed()

void FSceneCullingBuilder::RemovePrecomputed ( FSceneCulling::FPrimitiveState &  PrimitiveState)
inline

◆ ToBlock()

SC_FORCEINLINE FBlockLoc FSceneCullingBuilder::ToBlock ( const FSceneCulling::FLocation64 Loc)
inline

◆ UpdateInstances()

SC_FORCEINLINE void FSceneCullingBuilder::UpdateInstances ( FPersistentPrimitiveIndex  PersistentPrimitiveIndex,
FPrimitiveSceneInfo PrimitiveSceneInfo 
)
inline

◆ UpdateProcessDynamicInstances()

SC_FORCEINLINE void FSceneCullingBuilder::UpdateProcessDynamicInstances ( HashLocationComputerType HashLocationComputer,
int32  InstanceDataOffset,
int32  NumInstances,
int32  PrevNumInstances,
FSceneCulling::FCellIndexCacheEntry &  CellIndexCacheEntry 
)
inline

◆ UploadToGPU()

void FSceneCullingBuilder::UploadToGPU ( FRDGBuilder GraphBuilder,
FSceneUniformBuffer SceneUniformBuffer 
)
inline

Member Data Documentation

◆ BlockDataUploader

TStructuredBufferScatterUploader<FCellBlockData> FSceneCullingBuilder::BlockDataUploader

◆ bUsePrecomputed

bool FSceneCullingBuilder::bUsePrecomputed = false

◆ CachedCellIdIndex

int32 FSceneCullingBuilder::CachedCellIdIndex = -1

◆ CachedCellLoc

FSceneCulling::FLocation64 FSceneCullingBuilder::CachedCellLoc

◆ CellBlockDimLog2

constexpr int32 FSceneCullingBuilder::CellBlockDimLog2 = FSpatialHash::CellBlockDimLog2
staticconstexpr

◆ CellBlockSize

constexpr int32 FSceneCullingBuilder::CellBlockSize = FSpatialHash::CellBlockSize
staticconstexpr

◆ CellHeaderUploader

TStructuredBufferScatterUploader<FPackedCellHeader> FSceneCullingBuilder::CellHeaderUploader

◆ DirtyBlocks

TBitArray<SceneRenderingAllocator> FSceneCullingBuilder::DirtyBlocks

◆ DirtyCellBoundsIndices

TArray<int32, SceneRenderingAllocator> FSceneCullingBuilder::DirtyCellBoundsIndices

◆ DirtyCellBoundsMaskDynamic

TBitArray<SceneRenderingAllocator> FSceneCullingBuilder::DirtyCellBoundsMaskDynamic

◆ DirtyCellBoundsMaskStatic

TBitArray<SceneRenderingAllocator> FSceneCullingBuilder::DirtyCellBoundsMaskStatic

◆ DirtyChunkBoundsData

TArray<FIntVector2, SceneRenderingAllocator> FSceneCullingBuilder::DirtyChunkBoundsData

◆ DirtyChunks

TBitArray<SceneRenderingAllocator> FSceneCullingBuilder::DirtyChunks

◆ DynamicInstancedPrimitiveState

FPrimitiveState::EState FSceneCullingBuilder::DynamicInstancedPrimitiveState = FPrimitiveState::Dynamic

◆ ExplicitBoundsMode

EExplicitBoundsUpdateMode FSceneCullingBuilder::ExplicitBoundsMode = EExplicitBoundsUpdateMode::Disabled

◆ InvalidPackedCell

constexpr FPackedCellHeader FSceneCullingBuilder::InvalidPackedCell = FPackedCellHeader{ 0u, 0u }
staticconstexpr

◆ ItemChunkDataUploader

TStructuredBufferScatterUploader<uint32, INSTANCE_HIERARCHY_MAX_CHUNK_SIZE> FSceneCullingBuilder::ItemChunkDataUploader

◆ ItemChunkUploader

TStructuredBufferScatterUploader<uint32> FSceneCullingBuilder::ItemChunkUploader

◆ LowestFreeCacheIndex

int32 FSceneCullingBuilder::LowestFreeCacheIndex = 0

◆ MaxChunkSize

constexpr int32 FSceneCullingBuilder::MaxChunkSize = int32(INSTANCE_HIERARCHY_MAX_CHUNK_SIZE)
staticconstexpr

◆ NumDirtyBlocks

int32 FSceneCullingBuilder::NumDirtyBlocks = 0

◆ RemovedInstanceFlags

TBitArray<SceneRenderingAllocator> FSceneCullingBuilder::RemovedInstanceFlags

◆ SceneCulling

FSceneCulling& FSceneCullingBuilder::SceneCulling

◆ SpatialHash

FSceneCulling::FSpatialHash& FSceneCullingBuilder::SpatialHash

◆ SpatialHashMap

FSceneCulling::FSpatialHash::FSpatialHashMap& FSceneCullingBuilder::SpatialHashMap

◆ Stats

FStats FSceneCullingBuilder::Stats

◆ TempCellMarker

constexpr uint32 FSceneCullingBuilder::TempCellMarker = 0xFFFFFFFFu
staticconstexpr

◆ TempCellMask

TBitArray<SceneRenderingAllocator> FSceneCullingBuilder::TempCellMask

◆ TempCells

TArray<FTempCell, SceneRenderingAllocator> FSceneCullingBuilder::TempCells

◆ TotalAddedInstances

int32 FSceneCullingBuilder::TotalAddedInstances = 0

◆ TotalCellChunkDataCount

int32 FSceneCullingBuilder::TotalCellChunkDataCount = 0

◆ TotalRemovedInstances

int32 FSceneCullingBuilder::TotalRemovedInstances = 0

◆ TotalUpdatedInstances

int32 FSceneCullingBuilder::TotalUpdatedInstances = 0

The documentation for this class was generated from the following file: