p.CollisionParticlesUseImplicitCulling
p.CollisionParticlesUseImplicitCulling
#Overview
name: p.CollisionParticlesUseImplicitCulling
This variable is created as a Console Variable (cvar).
- type:
Var
- help:
Use the implicit to cull interior vertices.
It is referenced in 3
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of p.CollisionParticlesUseImplicitCulling is to control whether implicit culling is used for collision particles in the Chaos physics system of Unreal Engine 5. This setting is specifically related to the collision detection and physics simulation aspects of the engine.
This setting variable is primarily used in the Chaos experimental module, which is part of Unreal Engine’s physics system. Based on the callsites, it’s clear that this variable is utilized in the GeometryCollectionCollisionStructureManager, which is responsible for managing collision structures for geometry collections.
The value of this variable is set using an FAutoConsoleVariableRef, which means it can be changed at runtime through console commands. It’s initialized to false by default.
The associated variable bCollisionParticlesUseImplicitCulling interacts directly with p.CollisionParticlesUseImplicitCulling. They share the same value, and bCollisionParticlesUseImplicitCulling is the actual variable used in the code logic.
Developers must be aware that enabling this setting (setting it to true) will activate the use of implicit culling for interior vertices of collision particles. This can potentially improve performance by reducing the number of collision particles that need to be processed, but it may also affect the accuracy of collision detection in some cases.
Best practices when using this variable include:
- Testing thoroughly to ensure that enabling implicit culling doesn’t negatively impact the collision behavior in your specific use case.
- Considering the trade-off between performance improvement and potential loss of collision accuracy.
- Using this setting in conjunction with other collision-related settings like p.CollisionParticlesSpatialDivision and p.CollisionParticlesMin for optimal results.
Regarding the associated variable bCollisionParticlesUseImplicitCulling:
The purpose of bCollisionParticlesUseImplicitCulling is to serve as the actual boolean flag used in the code logic to determine whether implicit culling should be applied to collision particles.
This variable is used directly in the collision structure generation logic within the Chaos physics system. It’s checked when creating new simplicial structures for collision detection.
The value of this variable is set by the console variable p.CollisionParticlesUseImplicitCulling, allowing for runtime configuration.
It interacts closely with the Implicit object passed to the NewSimplicial function, as well as other collision-related variables like CollisionParticlesMax.
Developers should be aware that this variable is used as an integer in the code (checked against 0), so any non-zero value will enable the feature.
Best practices include ensuring that the implicit object is available when this feature is enabled, and considering the performance implications of enabling or disabling this feature in different scenarios.
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/GeometryCollection/GeometryCollectionCollisionStructureManager.cpp:22
Scope: file
Source code excerpt:
int32 bCollisionParticlesUseImplicitCulling = false;
FAutoConsoleVariableRef CVarCollisionParticlesUseImplicitCulling(TEXT("p.CollisionParticlesUseImplicitCulling"), bCollisionParticlesUseImplicitCulling, TEXT("Use the implicit to cull interior vertices."));
int32 CollisionParticlesSpatialDivision = 10;
FAutoConsoleVariableRef CVarCollisionParticlesSpatialDivision(TEXT("p.CollisionParticlesSpatialDivision"), CollisionParticlesSpatialDivision, TEXT("Spatial bucketing to cull collision particles."));
int32 CollisionParticlesMin = 10;
FAutoConsoleVariableRef CVarCollisionParticlesMin(TEXT("p.CollisionParticlesMin"), CollisionParticlesMin, TEXT("Minimum number of particles after simplicial pruning (assuming it started with more)"));
#Associated Variable and Callsites
This variable is associated with another variable named bCollisionParticlesUseImplicitCulling
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/GeometryCollection/GeometryCollectionCollisionStructureManager.cpp:21
Scope: file
Source code excerpt:
}
int32 bCollisionParticlesUseImplicitCulling = false;
FAutoConsoleVariableRef CVarCollisionParticlesUseImplicitCulling(TEXT("p.CollisionParticlesUseImplicitCulling"), bCollisionParticlesUseImplicitCulling, TEXT("Use the implicit to cull interior vertices."));
int32 CollisionParticlesSpatialDivision = 10;
FAutoConsoleVariableRef CVarCollisionParticlesSpatialDivision(TEXT("p.CollisionParticlesSpatialDivision"), CollisionParticlesSpatialDivision, TEXT("Spatial bucketing to cull collision particles."));
int32 CollisionParticlesMin = 10;
FAutoConsoleVariableRef CVarCollisionParticlesMin(TEXT("p.CollisionParticlesMin"), CollisionParticlesMin, TEXT("Minimum number of particles after simplicial pruning (assuming it started with more)"));
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/GeometryCollection/GeometryCollectionCollisionStructureManager.cpp:51
Scope (from outer to inner):
file
function FCollisionStructureManager::FSimplicial* FCollisionStructureManager::NewSimplicial
Source code excerpt:
bool bFullCopy = true;
int32 LocalCollisionParticlesMax = CollisionParticlesMaxInput > 0 ? FMath::Min(CollisionParticlesMaxInput, CollisionParticlesMax) : CollisionParticlesMax;
if (bCollisionParticlesUseImplicitCulling!=0 && Implicit && IndicesArray.Num()>LocalCollisionParticlesMax)
{
Extent = Implicit->HasBoundingBox() ? Implicit->BoundingBox().Extents().Size() : 1.f;
Chaos::FReal Threshold = Extent * 0.01f;
//