UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SceneCulling.cpp File Reference

Classes

class  FComputeExplicitChunkBounds_CS
 
struct  FBoundsTransformerBase
 
struct  FBoundsTransformerUniqueBounds
 
struct  FBoundsTransformerSharedBounds
 
struct  FHashLocationComputerFromBounds< BoundsTransformerType >
 
class  FSceneCullingBuilder
 
struct  FSceneCullingBuilder::FStats
 
struct  FSceneCullingBuilder::FChunkBuilder
 
struct  FSceneCullingBuilder::FTempCell
 

Namespaces

namespace  EUpdateFrequencyCategory
 

Macros

#define SC_FORCEINLINE   FORCEINLINE
 
#define OLA_TODO   0
 
#define SC_ENABLE_DETAILED_LOGGING   0
 
#define SC_ENABLE_GPU_DATA_VALIDATION   (DO_CHECK)
 
#define SC_ALLOW_ASYNC_TASKS   1
 
#define SC_SCOPED_NAMED_EVENT_DETAIL(...)
 
#define SC_SCOPED_NAMED_EVENT_DETAIL_TCHAR(...)
 
#define SC_ENABLE_DETAILED_BUILDER_STATS   (!(UE_BUILD_SHIPPING || UE_BUILD_TEST))
 
#define UPDATE_BUILDER_STAT(Builder, StatId, Delta)   (Builder).Stats.StatId += Delta
 
#define SC_DETAILED_LOGGING_SCOPE(_Builder_)
 
#define BUILDER_LOG(...)
 
#define BUILDER_LOG_SCOPE(...)
 
#define BUILDER_LOG_LIST(...)
 
#define BUILDER_LOG_LIST_APPEND(...)
 

Typedefs

using FInt8Vector3 = UE::Math::TIntVector3< int8 >
 

Enumerations

enum  EUpdateFrequencyCategory::EType { EUpdateFrequencyCategory::Static , EUpdateFrequencyCategory::Dynamic , EUpdateFrequencyCategory::Num }
 

Functions

 DECLARE_STATS_GROUP (TEXT("SceneCulling"), STATGROUP_SceneCulling, STATCAT_Advanced)
 
 DECLARE_CYCLE_STAT (TEXT("Test"), STAT_SceneCulling_Test, STATGROUP_SceneCulling)
 
 DECLARE_CYCLE_STAT (TEXT("Test Sphere"), STAT_SceneCulling_Test_Sphere, STATGROUP_SceneCulling)
 
 DECLARE_CYCLE_STAT (TEXT("Test Convex"), STAT_SceneCulling_Test_Convex, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Test Sphere Blocks"), STAT_SceneCulling_TestSphereBlocks, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Test Sphere Cells"), STAT_SceneCulling_TestSphereCells, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Test Sphere Bounds"), STAT_SceneCulling_TestSphereBounds, STATGROUP_SceneCulling)
 
 DECLARE_CYCLE_STAT (TEXT("Update Pre"), STAT_SceneCulling_Update_Pre, STATGROUP_SceneCulling)
 
 DECLARE_CYCLE_STAT (TEXT("Update Post"), STAT_SceneCulling_Update_Post, STATGROUP_SceneCulling)
 
 DECLARE_CYCLE_STAT (TEXT("Update Finalize"), STAT_SceneCulling_Update_FinalizeAndClear, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Removed Instances"), STAT_SceneCulling_RemovedInstanceCount, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Updated Instances"), STAT_SceneCulling_UpdatedInstanceCount, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Added Instances"), STAT_SceneCulling_AddedInstanceCount, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Update Uploaded Chunks"), STAT_SceneCulling_UploadedChunks, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Update Uploaded Cells"), STAT_SceneCulling_UploadedCells, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Update Uploaded Items"), STAT_SceneCulling_UploadedItems, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Update Uploaded Blocks"), STAT_SceneCulling_UploadedBlocks, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Block Count"), STAT_SceneCulling_BlockCount, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Cell Count"), STAT_SceneCulling_CellCount, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Chunk ID Count"), STAT_SceneCulling_ItemChunkCount, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Explicit Chunk Count"), STAT_SceneCulling_ExplicitChunkCount, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Compressed Chunk Count"), STAT_SceneCulling_CompressedChunkCount, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Item Buffer Size"), STAT_SceneCulling_ItemBufferSize, STATGROUP_SceneCulling)
 
 DECLARE_FLOAT_COUNTER_STAT (TEXT("Chunk Occupancy"), STAT_SceneCulling_ChunkOccupancy, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Total Id Cache Size"), STAT_SceneCulling_IdCacheSize, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Scene Instance Count"), STAT_SceneCulling_SceneInstanceCount, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Num Static Instances"), STAT_SceneCulling_NumStaticInstances, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Num Dynamic Instances"), STAT_SceneCulling_NumDynamicInstances, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Non-Empty Cell Count"), STAT_SceneCulling_NonEmptyCellCount, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Ranges Added"), STAT_SceneCulling_RangeCount, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Num Comp. Ranges"), STAT_SceneCulling_CompRangeCount, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Update Visited Id Count"), STAT_SceneCulling_VisitedIdCount, STATGROUP_SceneCulling)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Update Copied Id Count"), STAT_SceneCulling_CopiedIdCount, STATGROUP_SceneCulling)
 
 CSV_DEFINE_CATEGORY (SceneCulling, true)
 
 LLM_DECLARE_TAG_API (SceneCulling, RENDERER_API)
 
 DECLARE_LLM_MEMORY_STAT (TEXT("SceneCulling"), STAT_SceneCullingLLM, STATGROUP_LLMFULL)
 
 DECLARE_LLM_MEMORY_STAT (TEXT("SceneCulling"), STAT_SceneCullingSummaryLLM, STATGROUP_LLM)
 
 LLM_DEFINE_TAG (SceneCulling, NAME_None, NAME_None, GET_STATFNAME(STAT_SceneCullingLLM), GET_STATFNAME(STAT_SceneCullingLLM))
 
 IMPLEMENT_SCENE_EXTENSION (FSceneCulling)
 
const TCHAREUpdateFrequencyCategory::ToString (EType Category)
 
bool operator== (const FInstanceSceneDataBuffers::FCompressedSpatialHashItem A, const FInstanceSceneDataBuffers::FCompressedSpatialHashItem B)
 
SC_FORCEINLINE FPackedCellHeader PackCellHeader (const FCellHeader &CellHeader)
 
SC_FORCEINLINE FSceneCulling::FLocation8 ToBlockLocal (const FSceneCulling::FLocation64 &ItemLoc, const FSceneCulling::FBlockLoc &BlockLoc)
 
FInt64Vector3 ToLevelRelative (const FInt64Vector3 &Coord, int32 LevelDelta)
 
FSceneCulling::FLocation64 ToLevelRelative (const FSceneCulling::FLocation64 &Loc, int32 LevelDelta)
 
template<int32 LevelDelta>
FInt64Vector3 ToLevelRelative (const FInt64Vector3 &Coord)
 
template<int32 LevelDelta>
FSceneCulling::FLocation64 ToLevelRelative (const FSceneCulling::FLocation64 &Loc)
 
FSceneCulling::FFootprint64 ToLevelRelative (const FSceneCulling::FFootprint64 &Footprint, int32 LevelDelta)
 
 IMPLEMENT_GLOBAL_SHADER (FComputeExplicitChunkBounds_CS, "/Engine/Private/SceneCulling/SceneCullingBuildExplicitBounds.usf", "ComputeExplicitChunkBounds", SF_Compute)
 
SC_FORCEINLINE FVector4d TransformBounds (VectorRegister4f VecOrigin, VectorRegister4f VecExtent, const FRenderTransform &LocalToPrimitiveRelative, VectorRegister4Double PrimitiveToWorldTranslationVec)
 
template<typename T >
bool operator< (const RenderingSpatialHash::TLocation< T > &Lhs, const RenderingSpatialHash::TLocation< T > &Rhs)
 

Variables

FString GSceneCullingDbgPattern
 
FAutoConsoleVariableRef CVarSceneCullingDbgPattern (TEXT("r.SceneCulling.DbgPattern"), GSceneCullingDbgPattern, TEXT(""), ECVF_RenderThreadSafe)
 

Macro Definition Documentation

◆ BUILDER_LOG

#define BUILDER_LOG (   ...)

◆ BUILDER_LOG_LIST

#define BUILDER_LOG_LIST (   ...)

◆ BUILDER_LOG_LIST_APPEND

#define BUILDER_LOG_LIST_APPEND (   ...)

◆ BUILDER_LOG_SCOPE

#define BUILDER_LOG_SCOPE (   ...)

◆ OLA_TODO

#define OLA_TODO   0

◆ SC_ALLOW_ASYNC_TASKS

#define SC_ALLOW_ASYNC_TASKS   1

◆ SC_DETAILED_LOGGING_SCOPE

#define SC_DETAILED_LOGGING_SCOPE (   _Builder_)

◆ SC_ENABLE_DETAILED_BUILDER_STATS

#define SC_ENABLE_DETAILED_BUILDER_STATS   (!(UE_BUILD_SHIPPING || UE_BUILD_TEST))

◆ SC_ENABLE_DETAILED_LOGGING

#define SC_ENABLE_DETAILED_LOGGING   0

◆ SC_ENABLE_GPU_DATA_VALIDATION

#define SC_ENABLE_GPU_DATA_VALIDATION   (DO_CHECK)

◆ SC_FORCEINLINE

#define SC_FORCEINLINE   FORCEINLINE

◆ SC_SCOPED_NAMED_EVENT_DETAIL

#define SC_SCOPED_NAMED_EVENT_DETAIL (   ...)

◆ SC_SCOPED_NAMED_EVENT_DETAIL_TCHAR

#define SC_SCOPED_NAMED_EVENT_DETAIL_TCHAR (   ...)

◆ UPDATE_BUILDER_STAT

#define UPDATE_BUILDER_STAT (   Builder,
  StatId,
  Delta 
)    (Builder).Stats.StatId += Delta

Typedef Documentation

◆ FInt8Vector3

Function Documentation

◆ CSV_DEFINE_CATEGORY()

CSV_DEFINE_CATEGORY ( SceneCulling  ,
true   
)

◆ DECLARE_CYCLE_STAT() [1/6]

DECLARE_CYCLE_STAT ( TEXT("Test Convex" ,
STAT_SceneCulling_Test_Convex  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_CYCLE_STAT() [2/6]

DECLARE_CYCLE_STAT ( TEXT("Test Sphere" ,
STAT_SceneCulling_Test_Sphere  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_CYCLE_STAT() [3/6]

DECLARE_CYCLE_STAT ( TEXT("Test")  ,
STAT_SceneCulling_Test  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_CYCLE_STAT() [4/6]

◆ DECLARE_CYCLE_STAT() [5/6]

DECLARE_CYCLE_STAT ( TEXT("Update Post" ,
STAT_SceneCulling_Update_Post  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_CYCLE_STAT() [6/6]

DECLARE_CYCLE_STAT ( TEXT("Update Pre" ,
STAT_SceneCulling_Update_Pre  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [1/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Added Instances" ,
STAT_SceneCulling_AddedInstanceCount  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [2/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Block Count" ,
STAT_SceneCulling_BlockCount  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [3/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Cell Count" ,
STAT_SceneCulling_CellCount  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [4/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Chunk ID Count" ,
STAT_SceneCulling_ItemChunkCount  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [5/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Compressed Chunk Count" ,
STAT_SceneCulling_CompressedChunkCount  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [6/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Explicit Chunk Count" ,
STAT_SceneCulling_ExplicitChunkCount  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [7/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Item Buffer Size" ,
STAT_SceneCulling_ItemBufferSize  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [8/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Non-Empty Cell Count" ,
STAT_SceneCulling_NonEmptyCellCount  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [9/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Num Comp. Ranges" ,
STAT_SceneCulling_CompRangeCount  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [10/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Num Dynamic Instances" ,
STAT_SceneCulling_NumDynamicInstances  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [11/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Num Static Instances" ,
STAT_SceneCulling_NumStaticInstances  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [12/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Ranges Added" ,
STAT_SceneCulling_RangeCount  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [13/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Removed Instances" ,
STAT_SceneCulling_RemovedInstanceCount  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [14/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Scene Instance Count" ,
STAT_SceneCulling_SceneInstanceCount  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [15/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Test Sphere Blocks" ,
STAT_SceneCulling_TestSphereBlocks  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [16/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Test Sphere Bounds" ,
STAT_SceneCulling_TestSphereBounds  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [17/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Test Sphere Cells" ,
STAT_SceneCulling_TestSphereCells  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [18/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Total Id Cache Size" ,
STAT_SceneCulling_IdCacheSize  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [19/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Update Copied Id Count" ,
STAT_SceneCulling_CopiedIdCount  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [20/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Update Uploaded Blocks" ,
STAT_SceneCulling_UploadedBlocks  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [21/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Update Uploaded Cells" ,
STAT_SceneCulling_UploadedCells  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [22/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Update Uploaded Chunks" ,
STAT_SceneCulling_UploadedChunks  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [23/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Update Uploaded Items" ,
STAT_SceneCulling_UploadedItems  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [24/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Update Visited Id Count" ,
STAT_SceneCulling_VisitedIdCount  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_DWORD_COUNTER_STAT() [25/25]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Updated Instances" ,
STAT_SceneCulling_UpdatedInstanceCount  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_FLOAT_COUNTER_STAT()

DECLARE_FLOAT_COUNTER_STAT ( TEXT("Chunk Occupancy" ,
STAT_SceneCulling_ChunkOccupancy  ,
STATGROUP_SceneCulling   
)

◆ DECLARE_LLM_MEMORY_STAT() [1/2]

DECLARE_LLM_MEMORY_STAT ( TEXT("SceneCulling")  ,
STAT_SceneCullingLLM  ,
STATGROUP_LLMFULL   
)

◆ DECLARE_LLM_MEMORY_STAT() [2/2]

DECLARE_LLM_MEMORY_STAT ( TEXT("SceneCulling")  ,
STAT_SceneCullingSummaryLLM  ,
STATGROUP_LLM   
)

◆ DECLARE_STATS_GROUP()

DECLARE_STATS_GROUP ( TEXT("SceneCulling")  ,
STATGROUP_SceneCulling  ,
STATCAT_Advanced   
)

◆ IMPLEMENT_GLOBAL_SHADER()

IMPLEMENT_GLOBAL_SHADER ( FComputeExplicitChunkBounds_CS  ,
"/Engine/Private/SceneCulling/SceneCullingBuildExplicitBounds.usf"  ,
"ComputeExplicitChunkBounds"  ,
SF_Compute   
)

◆ IMPLEMENT_SCENE_EXTENSION()

IMPLEMENT_SCENE_EXTENSION ( FSceneCulling  )

◆ LLM_DECLARE_TAG_API()

LLM_DECLARE_TAG_API ( SceneCulling  ,
RENDERER_API   
)

◆ LLM_DEFINE_TAG()

LLM_DEFINE_TAG ( SceneCulling  ,
NAME_None  ,
NAME_None  ,
GET_STATFNAME(STAT_SceneCullingLLM ,
GET_STATFNAME(STAT_SceneCullingLLM  
)

◆ operator<()

template<typename T >
bool operator< ( const RenderingSpatialHash::TLocation< T > &  Lhs,
const RenderingSpatialHash::TLocation< T > &  Rhs 
)
inline

◆ operator==()

◆ PackCellHeader()

SC_FORCEINLINE FPackedCellHeader PackCellHeader ( const FCellHeader CellHeader)

◆ ToBlockLocal()

SC_FORCEINLINE FSceneCulling::FLocation8 ToBlockLocal ( const FSceneCulling::FLocation64 ItemLoc,
const FSceneCulling::FBlockLoc BlockLoc 
)

◆ ToLevelRelative() [1/5]

template<int32 LevelDelta>
FInt64Vector3 ToLevelRelative ( const FInt64Vector3 Coord)
inline

◆ ToLevelRelative() [2/5]

FInt64Vector3 ToLevelRelative ( const FInt64Vector3 Coord,
int32  LevelDelta 
)
inline

◆ ToLevelRelative() [3/5]

FSceneCulling::FFootprint64 ToLevelRelative ( const FSceneCulling::FFootprint64 Footprint,
int32  LevelDelta 
)
inline

◆ ToLevelRelative() [4/5]

template<int32 LevelDelta>
FSceneCulling::FLocation64 ToLevelRelative ( const FSceneCulling::FLocation64 Loc)
inline

◆ ToLevelRelative() [5/5]

FSceneCulling::FLocation64 ToLevelRelative ( const FSceneCulling::FLocation64 Loc,
int32  LevelDelta 
)
inline

◆ TransformBounds()

SC_FORCEINLINE FVector4d TransformBounds ( VectorRegister4f  VecOrigin,
VectorRegister4f  VecExtent,
const FRenderTransform LocalToPrimitiveRelative,
VectorRegister4Double  PrimitiveToWorldTranslationVec 
)

Produce a world-space bounding sphere for an instance given local bounds and transforms.

Variable Documentation

◆ CVarSceneCullingDbgPattern

FAutoConsoleVariableRef CVarSceneCullingDbgPattern(TEXT("r.SceneCulling.DbgPattern"), GSceneCullingDbgPattern, TEXT(""), ECVF_RenderThreadSafe) ( TEXT("r.SceneCulling.DbgPattern")  ,
GSceneCullingDbgPattern  ,
TEXT("")  ,
ECVF_RenderThreadSafe   
)

◆ GSceneCullingDbgPattern

FString GSceneCullingDbgPattern