p.CollisionParticlesMax

p.CollisionParticlesMax

#Overview

name: p.CollisionParticlesMax

This variable is created as a Console Variable (cvar).

It is referenced in 3 C++ source files.

#Summary

#Usage in the C++ source code

The purpose of p.CollisionParticlesMax is to set the maximum number of particles after simplicial pruning in the collision detection system of Unreal Engine’s Chaos physics engine. This setting is crucial for managing the performance and accuracy trade-off in collision detection for geometry collections.

This setting variable is primarily used in the Chaos physics engine, which is part of Unreal Engine’s experimental physics system. Specifically, it’s utilized in the GeometryCollection subsystem for collision structure management.

The value of this variable is set using an FAutoConsoleVariableRef, which means it can be adjusted at runtime through console commands. The default value is set to 2000 particles.

The associated variable CollisionParticlesMax directly interacts with p.CollisionParticlesMax. They share the same value and are used interchangeably in the code.

Developers must be aware that this variable directly impacts the performance and accuracy of collision detection. A higher value will result in more accurate collisions but at the cost of increased computational overhead. Conversely, a lower value will improve performance but may reduce collision accuracy.

Best practices when using this variable include:

  1. Balancing performance and accuracy based on the specific needs of your project.
  2. Testing different values to find the optimal setting for your scenes.
  3. Considering adjusting this value dynamically based on the complexity of the current scene or the distance of objects from the camera.

Regarding the associated variable CollisionParticlesMax:

The purpose of CollisionParticlesMax is identical to p.CollisionParticlesMax, serving as the in-code representation of the console variable.

It’s used directly in the FCollisionStructureManager::NewSimplicial function to determine the maximum number of collision particles to use. The actual value used (LocalCollisionParticlesMax) is calculated as the minimum of CollisionParticlesMax and an input parameter CollisionParticlesMaxInput, allowing for further runtime control.

Developers should be aware that changes to CollisionParticlesMax will directly affect the behavior of the collision system. It’s important to profile and test thoroughly when adjusting this value to ensure optimal performance and accuracy for your specific use case.

#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:31

Scope: file

Source code excerpt:


int32 CollisionParticlesMax = 2000;
FAutoConsoleVariableRef CVarCollisionParticlesMax(TEXT("p.CollisionParticlesMax"), CollisionParticlesMax, TEXT("Maximum number of particles after simplicial pruning"));

FCollisionStructureManager::FSimplicial*
FCollisionStructureManager::NewSimplicial(
	const Chaos::FParticles& Vertices,
	const Chaos::FTriangleMesh& TriMesh,
	const Chaos::FImplicitObject* Implicit,

#Associated Variable and Callsites

This variable is associated with another variable named CollisionParticlesMax. They share the same value. See the following C++ source code.

#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/GeometryCollection/GeometryCollectionCollisionStructureManager.cpp:30

Scope: file

Source code excerpt:

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"));

FCollisionStructureManager::FSimplicial*
FCollisionStructureManager::NewSimplicial(
	const Chaos::FParticles& Vertices,
	const Chaos::FTriangleMesh& TriMesh,
	const Chaos::FImplicitObject* Implicit,

#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/GeometryCollection/GeometryCollectionCollisionStructureManager.cpp:50

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;