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

Classes

struct  FFoliageRenderInstanceParams
 
struct  FFoliageCullInstanceParams
 
struct  FFoliageElementParams
 

Functions

 DECLARE_CYCLE_STAT (TEXT("Traversal Time"), STAT_FoliageTraversalTime, STATGROUP_Foliage)
 
 DECLARE_CYCLE_STAT (TEXT("Build Time"), STAT_FoliageBuildTime, STATGROUP_Foliage)
 
 DECLARE_CYCLE_STAT (TEXT("Batch Time"), STAT_FoliageBatchTime, STATGROUP_Foliage)
 
 DECLARE_CYCLE_STAT (TEXT("Foliage Create Proxy"), STAT_FoliageCreateProxy, STATGROUP_Foliage)
 
 DECLARE_CYCLE_STAT (TEXT("Foliage Post Load"), STAT_FoliagePostLoad, STATGROUP_Foliage)
 
 DECLARE_CYCLE_STAT (TEXT("HISMC_AddInstance"), STAT_HISMCAddInstance, STATGROUP_Foliage)
 
 DECLARE_CYCLE_STAT (TEXT("HISMC_AddInstances"), STAT_HISMCAddInstances, STATGROUP_Foliage)
 
 DECLARE_CYCLE_STAT (TEXT("HISMC_RemoveInstance"), STAT_HISMCRemoveInstance, STATGROUP_Foliage)
 
 DECLARE_CYCLE_STAT (TEXT("HISMC_GetDynamicMeshElement"), STAT_HISMCGetDynamicMeshElement, STATGROUP_Foliage)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Runs"), STAT_FoliageRuns, STATGROUP_Foliage)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Mesh Batches"), STAT_FoliageMeshBatches, STATGROUP_Foliage)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Triangles"), STAT_FoliageTriangles, STATGROUP_Foliage)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Instances"), STAT_FoliageInstances, STATGROUP_Foliage)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Occlusion Culled Instances"), STAT_OcclusionCulledFoliageInstances, STATGROUP_Foliage)
 
 DECLARE_DWORD_COUNTER_STAT (TEXT("Traversals"), STAT_FoliageTraversals, STATGROUP_Foliage)
 
 DECLARE_MEMORY_STAT (TEXT("Instance Buffers"), STAT_FoliageInstanceBuffers, STATGROUP_Foliage)
 
void ToggleFreezeFoliageCulling ()
 
void CalcLOD (int32 &InOutMinLOD, int32 &InOutMaxLOD, const FVector &BoundMin, const FVector &BoundMax, const FVector &ViewOriginInLocalZero, const FVector &ViewOriginInLocalOne, const float(&LODPlanesMin)[MAX_STATIC_MESH_LODS], const float(&LODPlanesMax)[MAX_STATIC_MESH_LODS])
 
bool CanGroup (const FVector &BoundMin, const FVector &BoundMax, const FVector &ViewOriginInLocalZero, const FVector &ViewOriginInLocalOne, float MaxDrawDist)
 

Variables

TAutoConsoleVariable< floatCVarFoliageMinimumScreenSize (TEXT("foliage.MinimumScreenSize"), 0.000005f, TEXT("This controls the screen size at which we cull foliage instances entirely."), ECVF_Scalability)
 
TAutoConsoleVariable< int32CVarFoliageMaxEndCullDistance (TEXT("foliage.MaxEndCullDistance"), 0, TEXT("Max distance for end culling (0 disabled)."))
 
TAutoConsoleVariable< floatCVarFoliageLODDistanceScale (TEXT("foliage.LODDistanceScale"), 1.0f, TEXT("Scale factor for the distance used in computing LOD for foliage."), FConsoleVariableDelegate::CreateLambda([](IConsoleVariable *InVariable) { FGlobalComponentRecreateRenderStateContext Context;}), ECVF_Scalability)
 
TAutoConsoleVariable< floatCVarRandomLODRange (TEXT("foliage.RandomLODRange"), 0.0f, TEXT("Random distance added to each instance distance to compute LOD."))
 
const VectorRegister VECTOR_HALF_HALF_HALF_ZERO = DECLARE_VECTOR_REGISTER(0.5f, 0.5f, 0.5f, 0.0f)
 

Function Documentation

◆ CalcLOD()

void CalcLOD ( int32 InOutMinLOD,
int32 InOutMaxLOD,
const FVector BoundMin,
const FVector BoundMax,
const FVector ViewOriginInLocalZero,
const FVector ViewOriginInLocalOne,
const float(&)  LODPlanesMin[MAX_STATIC_MESH_LODS],
const float(&)  LODPlanesMax[MAX_STATIC_MESH_LODS] 
)
inline

◆ CanGroup()

bool CanGroup ( const FVector BoundMin,
const FVector BoundMax,
const FVector ViewOriginInLocalZero,
const FVector ViewOriginInLocalOne,
float  MaxDrawDist 
)
inline

◆ DECLARE_CYCLE_STAT() [1/9]

DECLARE_CYCLE_STAT ( TEXT("Batch Time" ,
STAT_FoliageBatchTime  ,
STATGROUP_Foliage   
)

◆ DECLARE_CYCLE_STAT() [2/9]

DECLARE_CYCLE_STAT ( TEXT("Build Time" ,
STAT_FoliageBuildTime  ,
STATGROUP_Foliage   
)

◆ DECLARE_CYCLE_STAT() [3/9]

DECLARE_CYCLE_STAT ( TEXT("Foliage Create Proxy" ,
STAT_FoliageCreateProxy  ,
STATGROUP_Foliage   
)

◆ DECLARE_CYCLE_STAT() [4/9]

DECLARE_CYCLE_STAT ( TEXT("Foliage Post Load" ,
STAT_FoliagePostLoad  ,
STATGROUP_Foliage   
)

◆ DECLARE_CYCLE_STAT() [5/9]

DECLARE_CYCLE_STAT ( TEXT("HISMC_AddInstance")  ,
STAT_HISMCAddInstance  ,
STATGROUP_Foliage   
)

◆ DECLARE_CYCLE_STAT() [6/9]

DECLARE_CYCLE_STAT ( TEXT("HISMC_AddInstances")  ,
STAT_HISMCAddInstances  ,
STATGROUP_Foliage   
)

◆ DECLARE_CYCLE_STAT() [7/9]

DECLARE_CYCLE_STAT ( TEXT("HISMC_GetDynamicMeshElement")  ,
STAT_HISMCGetDynamicMeshElement  ,
STATGROUP_Foliage   
)

◆ DECLARE_CYCLE_STAT() [8/9]

DECLARE_CYCLE_STAT ( TEXT("HISMC_RemoveInstance")  ,
STAT_HISMCRemoveInstance  ,
STATGROUP_Foliage   
)

◆ DECLARE_CYCLE_STAT() [9/9]

DECLARE_CYCLE_STAT ( TEXT("Traversal Time" ,
STAT_FoliageTraversalTime  ,
STATGROUP_Foliage   
)

◆ DECLARE_DWORD_COUNTER_STAT() [1/6]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Instances")  ,
STAT_FoliageInstances  ,
STATGROUP_Foliage   
)

◆ DECLARE_DWORD_COUNTER_STAT() [2/6]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Mesh Batches" ,
STAT_FoliageMeshBatches  ,
STATGROUP_Foliage   
)

◆ DECLARE_DWORD_COUNTER_STAT() [3/6]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Occlusion Culled Instances" ,
STAT_OcclusionCulledFoliageInstances  ,
STATGROUP_Foliage   
)

◆ DECLARE_DWORD_COUNTER_STAT() [4/6]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Runs")  ,
STAT_FoliageRuns  ,
STATGROUP_Foliage   
)

◆ DECLARE_DWORD_COUNTER_STAT() [5/6]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Traversals")  ,
STAT_FoliageTraversals  ,
STATGROUP_Foliage   
)

◆ DECLARE_DWORD_COUNTER_STAT() [6/6]

DECLARE_DWORD_COUNTER_STAT ( TEXT("Triangles")  ,
STAT_FoliageTriangles  ,
STATGROUP_Foliage   
)

◆ DECLARE_MEMORY_STAT()

DECLARE_MEMORY_STAT ( TEXT("Instance Buffers" ,
STAT_FoliageInstanceBuffers  ,
STATGROUP_Foliage   
)

◆ ToggleFreezeFoliageCulling()

void ToggleFreezeFoliageCulling ( )

Variable Documentation

◆ CVarFoliageLODDistanceScale

TAutoConsoleVariable< float > CVarFoliageLODDistanceScale(TEXT("foliage.LODDistanceScale"), 1.0f, TEXT("Scale factor for the distance used in computing LOD for foliage."), FConsoleVariableDelegate::CreateLambda([](IConsoleVariable *InVariable) { FGlobalComponentRecreateRenderStateContext Context; }), ECVF_Scalability) ( TEXT("foliage.LODDistanceScale")  ,
1.  0f,
TEXT("Scale factor for the distance used in computing LOD for foliage." ,
FConsoleVariableDelegate::CreateLambda([](IConsoleVariable *InVariable) { FGlobalComponentRecreateRenderStateContext Context; })  ,
ECVF_Scalability   
)

◆ CVarFoliageMaxEndCullDistance

TAutoConsoleVariable< int32 > CVarFoliageMaxEndCullDistance(TEXT("foliage.MaxEndCullDistance"), 0, TEXT("Max distance for end culling (0 disabled).")) ( TEXT("foliage.MaxEndCullDistance")  ,
,
TEXT("Max distance for end culling (0 disabled).")   
)

◆ CVarFoliageMinimumScreenSize

TAutoConsoleVariable< float > CVarFoliageMinimumScreenSize(TEXT("foliage.MinimumScreenSize"), 0.000005f, TEXT("This controls the screen size at which we cull foliage instances entirely."), ECVF_Scalability) ( TEXT("foliage.MinimumScreenSize")  ,
0.  000005f,
TEXT("This controls the screen size at which we cull foliage instances entirely." ,
ECVF_Scalability   
)

◆ CVarRandomLODRange

TAutoConsoleVariable< float > CVarRandomLODRange(TEXT("foliage.RandomLODRange"), 0.0f, TEXT("Random distance added to each instance distance to compute LOD.")) ( TEXT("foliage.RandomLODRange")  ,
0.  0f,
TEXT("Random distance added to each instance distance to compute LOD."  
)

◆ VECTOR_HALF_HALF_HALF_ZERO

const VectorRegister VECTOR_HALF_HALF_HALF_ZERO = DECLARE_VECTOR_REGISTER(0.5f, 0.5f, 0.5f, 0.0f)