p.CollisionParticlesSpatialDivision
p.CollisionParticlesSpatialDivision
#Overview
name: p.CollisionParticlesSpatialDivision
This variable is created as a Console Variable (cvar).
- type:
Var
- help:
Spatial bucketing to cull collision particles.
It is referenced in 3
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of p.CollisionParticlesSpatialDivision is to control the spatial bucketing for culling collision particles in the Chaos physics system of Unreal Engine 5.
This setting variable is primarily used in the Chaos physics system, which is part of Unreal Engine’s experimental physics module. It’s specifically utilized in the geometry collection collision structure management.
The value of this variable is set as a console variable, allowing it to be adjusted at runtime. It’s initialized with a default value of 10 in the GeometryCollectionCollisionStructureManager.cpp file.
The p.CollisionParticlesSpatialDivision variable interacts with other collision-related variables such as p.CollisionParticlesMin, p.CollisionParticlesMax, and p.CollisionParticlesUseImplicitCulling. These variables work together to control the number and distribution of collision particles.
Developers must be aware that this variable directly affects the granularity of spatial bucketing used for culling collision particles. A higher value will result in finer spatial division, potentially improving collision detection accuracy but at the cost of increased computational overhead.
Best practices when using this variable include:
- Balancing between performance and accuracy: Higher values provide more precise collision detection but may impact performance.
- Testing different values to find the optimal setting for specific game scenarios.
- Considering the scale and complexity of the objects in the scene when adjusting this value.
Regarding the associated variable CollisionParticlesSpatialDivision:
The purpose of CollisionParticlesSpatialDivision is to serve as the actual storage for the value set by p.CollisionParticlesSpatialDivision. It’s an int32 variable that holds the spatial division value used in the collision particle culling process.
This variable is used directly in the Chaos physics system, specifically in the FCollisionStructureManager::NewSimplicial function. It’s used to calculate the SnapThreshold for cleaning collision particles.
The value of CollisionParticlesSpatialDivision is set by the console variable system when p.CollisionParticlesSpatialDivision is modified.
CollisionParticlesSpatialDivision interacts closely with the Chaos::CleanCollisionParticles function, affecting how particles are snapped and culled.
Developers should be aware that modifying p.CollisionParticlesSpatialDivision will directly affect this variable and, consequently, the collision particle cleaning process.
Best practices include monitoring this variable’s value when debugging collision issues and understanding its impact on the overall collision detection system in the Chaos physics engine.
#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:25
Scope: file
Source code excerpt:
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)"));
int32 CollisionParticlesMax = 2000;
FAutoConsoleVariableRef CVarCollisionParticlesMax(TEXT("p.CollisionParticlesMax"), CollisionParticlesMax, TEXT("Maximum number of particles after simplicial pruning"));
#Associated Variable and Callsites
This variable is associated with another variable named CollisionParticlesSpatialDivision
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/GeometryCollection/GeometryCollectionCollisionStructureManager.cpp:24
Scope: file
Source code excerpt:
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)"));
int32 CollisionParticlesMax = 2000;
FAutoConsoleVariableRef CVarCollisionParticlesMax(TEXT("p.CollisionParticlesMax"), CollisionParticlesMax, TEXT("Maximum number of particles after simplicial pruning"));
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/GeometryCollection/GeometryCollectionCollisionStructureManager.cpp:92
Scope (from outer to inner):
file
function FCollisionStructureManager::FSimplicial* FCollisionStructureManager::NewSimplicial
Source code excerpt:
//
Chaos::FReal SnapThreshold = Extent / Chaos::FReal(CollisionParticlesSpatialDivision);
OutsideVertices = Chaos::CleanCollisionParticles(OutsideVertices, SnapThreshold);
int32 NumParticles = (OutsideVertices.Num() > LocalCollisionParticlesMax) ? LocalCollisionParticlesMax : OutsideVertices.Num();
if (NumParticles)
{
int32 VertexCounter = 0;