p.Chaos.Solver.Collision.Priority
p.Chaos.Solver.Collision.Priority
#Overview
name: p.Chaos.Solver.Collision.Priority
This variable is created as a Console Variable (cvar).
- type:
Var
- help:
Set constraint priority. Larger values are evaluated later [def:0]
It is referenced in 4
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of p.Chaos.Solver.Collision.Priority is to set the priority for collision constraints in the Chaos physics solver within Unreal Engine 5. This setting variable is used to determine the order in which different types of constraints are evaluated during the physics simulation.
The Chaos physics solver, which is part of Unreal Engine’s experimental physics system, relies on this setting variable. It is primarily used in the PBDRigidsEvolutionGBF (Position Based Dynamics Rigid Evolution) module, which is responsible for simulating rigid body dynamics.
The value of this variable is set through a console variable (CVar) system, allowing it to be adjusted at runtime. It is initialized with a default value of 0 but can be changed through the console or configuration files.
This variable interacts with other similar priority variables for different constraint types, such as ChaosSolverJointPriority and ChaosSolverSuspensionPriority. These variables work together to determine the evaluation order of different constraint types in the physics solver.
Developers should be aware that higher priority values cause the constraints to be evaluated later in the solving process. This can have implications for the stability and accuracy of the physics simulation, especially when dealing with complex interactions between different types of constraints.
Best practices when using this variable include:
- Carefully consider the relative priorities of different constraint types to achieve the desired simulation behavior.
- Test different priority values to find the optimal balance for your specific use case.
- Be cautious when changing this value, as it can significantly impact the physics simulation results.
Regarding the associated variable ChaosSolverCollisionPriority:
This is the actual integer variable that stores the priority value. It is directly linked to the p.Chaos.Solver.Collision.Priority console variable. The purpose of this variable is the same as the console variable - to set the priority for collision constraints in the Chaos solver.
ChaosSolverCollisionPriority is used in the FPBDRigidsEvolutionGBF class constructor to add the CollisionConstraints to the constraint container with the specified priority. It’s also used when updating the collision solver type to re-add the collision constraints with the current priority.
Developers should treat ChaosSolverCollisionPriority as the internal representation of the collision constraint priority, while p.Chaos.Solver.Collision.Priority is the exposed console variable for adjusting this value.
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/PBDRigidsEvolutionGBF.cpp:71
Scope (from outer to inner):
file
namespace Chaos
namespace CVars
Source code excerpt:
int32 ChaosSolverCollisionPriority = 0;
FAutoConsoleVariableRef CVarChaosSolverCollisionPriority(TEXT("p.Chaos.Solver.Collision.Priority"), ChaosSolverCollisionPriority, TEXT("Set constraint priority. Larger values are evaluated later [def:0]"));
int32 ChaosSolverJointPriority = 0;
FAutoConsoleVariableRef CVarChaosSolverJointPriority(TEXT("p.Chaos.Solver.Joint.Priority"), ChaosSolverJointPriority, TEXT("Set constraint priority. Larger values are evaluated later [def:0]"));
int32 ChaosSolverSuspensionPriority = 0;
FAutoConsoleVariableRef CVarChaosSolverSuspensionPriority(TEXT("p.Chaos.Solver.Suspension.Priority"), ChaosSolverSuspensionPriority, TEXT("Set constraint priority. Larger values are evaluated later [def:0]"));
#Associated Variable and Callsites
This variable is associated with another variable named ChaosSolverCollisionPriority
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/PBDRigidsEvolutionGBF.cpp:70
Scope (from outer to inner):
file
namespace Chaos
namespace CVars
Source code excerpt:
FAutoConsoleVariableRef CVarChaosSolverCollisionSolverType(TEXT("p.Chaos.Solver.Collision.SolverType"), ChaosSolverCollisionSolverType, TEXT("-1: Use default (Gauss Seidel); 0: Gauss Seidel; 1: Gauss Seidel SOA 2: Partial Jacobi"));
int32 ChaosSolverCollisionPriority = 0;
FAutoConsoleVariableRef CVarChaosSolverCollisionPriority(TEXT("p.Chaos.Solver.Collision.Priority"), ChaosSolverCollisionPriority, TEXT("Set constraint priority. Larger values are evaluated later [def:0]"));
int32 ChaosSolverJointPriority = 0;
FAutoConsoleVariableRef CVarChaosSolverJointPriority(TEXT("p.Chaos.Solver.Joint.Priority"), ChaosSolverJointPriority, TEXT("Set constraint priority. Larger values are evaluated later [def:0]"));
int32 ChaosSolverSuspensionPriority = 0;
FAutoConsoleVariableRef CVarChaosSolverSuspensionPriority(TEXT("p.Chaos.Solver.Suspension.Priority"), ChaosSolverSuspensionPriority, TEXT("Set constraint priority. Larger values are evaluated later [def:0]"));
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/PBDRigidsEvolutionGBF.cpp:419
Scope (from outer to inner):
file
namespace Chaos
function void FPBDRigidsEvolutionGBF::UpdateCollisionSolverType
Source code excerpt:
IslandGroupManager.RemoveConstraintContainer(CollisionConstraints);
CollisionConstraints.SetSolverType(CollisionSolverType);
IslandGroupManager.AddConstraintContainer(CollisionConstraints, ChaosSolverCollisionPriority);
}
}
}
void FPBDRigidsEvolutionGBF::AdvanceOneTimeStepImpl(const FReal Dt, const FSubStepInfo& SubStepInfo)
{
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/PBDRigidsEvolutionGBF.cpp:1109
Scope (from outer to inner):
file
namespace Chaos
function FPBDRigidsEvolutionGBF::FPBDRigidsEvolutionGBF
Source code excerpt:
AddConstraintContainer(SuspensionConstraints, ChaosSolverSuspensionPriority);
AddConstraintContainer(CollisionConstraints, ChaosSolverCollisionPriority);
AddConstraintContainer(JointConstraints, ChaosSolverJointPriority);
AddConstraintContainer(CharacterGroundConstraints, ChaosSolverCharacterGroundConstraintPriority);
SetInternalParticleInitilizationFunction([](const FGeometryParticleHandle*, const FGeometryParticleHandle*) {});
}