p.Chaos.PBDCollisionSolver.Position.SolveEnabled

p.Chaos.PBDCollisionSolver.Position.SolveEnabled

#Overview

name: p.Chaos.PBDCollisionSolver.Position.SolveEnabled

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

It is referenced in 8 C++ source files.

#Summary

#Usage in the C++ source code

The purpose of p.Chaos.PBDCollisionSolver.Position.SolveEnabled is to control whether the position-based dynamics (PBD) collision solver for position constraints is enabled in the Chaos physics engine of Unreal Engine 5.

This setting variable is primarily used in the Chaos physics engine, which is part of Unreal Engine’s experimental features. It’s specifically related to the collision solving system within Chaos.

The value of this variable is set through the Unreal Engine console variable system, as evident from the FAutoConsoleVariableRef usage. It can be modified at runtime through console commands or configuration files.

The associated variable bChaos_PBDCollisionSolver_Position_SolveEnabled directly interacts with p.Chaos.PBDCollisionSolver.Position.SolveEnabled. They share the same value and are used interchangeably in the code.

Developers must be aware that this variable controls a core part of the collision solving process. Disabling it (setting to false) will prevent the solver from applying position-based collision resolution, which could significantly affect the physics simulation’s behavior and accuracy.

Best practices when using this variable include:

  1. Only modify it if you fully understand the implications on physics simulation.
  2. Test thoroughly after changing its value, as it can have wide-ranging effects on gameplay and visual fidelity.
  3. Consider performance impacts, as enabling or disabling this feature may affect CPU usage.

Regarding the associated variable bChaos_PBDCollisionSolver_Position_SolveEnabled:

#References in C++ code

#Callsites

This variable is referenced in the following C++ source code:

#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/Collision/PBDCollisionSolver.cpp:33

Scope (from outer to inner):

file
namespace    Chaos
namespace    CVars

Source code excerpt:

		float Chaos_PBDCollisionSolver_Position_StaticFrictionStiffness = 0.5f;

		FAutoConsoleVariableRef CVarChaos_PBDCollisionSolver_Position_SolveEnabled(TEXT("p.Chaos.PBDCollisionSolver.Position.SolveEnabled"), bChaos_PBDCollisionSolver_Position_SolveEnabled, TEXT(""));
		FAutoConsoleVariableRef CVarChaos_PBDCollisionSolver_Position_MinInvMassScale(TEXT("p.Chaos.PBDCollisionSolver.Position.MinInvMassScale"), Chaos_PBDCollisionSolver_Position_MinInvMassScale, TEXT(""));
		FAutoConsoleVariableRef CVarChaos_PBDCollisionSolver_Position_StaticFrictionStiffness(TEXT("p.Chaos.PBDCollisionSolver.Position.StaticFriction.Stiffness"), Chaos_PBDCollisionSolver_Position_StaticFrictionStiffness, TEXT(""));

		//
		// Velocity Solver Settings
		//

#Associated Variable and Callsites

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

#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/Collision/PBDCollisionContainerSolver.cpp:22

Scope (from outer to inner):

file
namespace    Chaos
namespace    CVars

Source code excerpt:

	namespace CVars
	{
		extern bool bChaos_PBDCollisionSolver_Position_SolveEnabled;
		extern bool bChaos_PBDCollisionSolver_Velocity_SolveEnabled;
		extern float Chaos_PBDCollisionSolver_Position_MinInvMassScale;
		extern float Chaos_PBDCollisionSolver_Velocity_MinInvMassScale;

		// If one body is more than MassRatio1 times the mass of the other, adjust the solver stiffness when the lighter body is underneath.
		// Solver stiffness will be equal to 1 when the mass ratio is MassRatio1.

#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/Collision/PBDCollisionContainerSolver.cpp:711

Scope (from outer to inner):

file
namespace    Chaos
function     void FPBDCollisionContainerSolver::SolvePositionImpl

Source code excerpt:

	{
		SCOPE_CYCLE_COUNTER(STAT_Collisions_Apply);
		if (!CVars::bChaos_PBDCollisionSolver_Position_SolveEnabled)
		{
			return;
		}

		if (EndIndex <= BeginIndex)
		{

#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/Collision/PBDCollisionContainerSolverJacobi.cpp:22

Scope (from outer to inner):

file
namespace    Chaos
namespace    CVars

Source code excerpt:

	namespace CVars
	{
		extern bool bChaos_PBDCollisionSolver_Position_SolveEnabled;
		extern bool bChaos_PBDCollisionSolver_Velocity_SolveEnabled;

		extern FRealSingle Chaos_PBDCollisionSolver_AutoStiffness_MassRatio1;
		extern FRealSingle Chaos_PBDCollisionSolver_AutoStiffness_MassRatio2;

		extern FRealSingle Chaos_PBDCollisionSolver_JacobiStiffness;

#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/Collision/PBDCollisionContainerSolverJacobi.cpp:470

Scope (from outer to inner):

file
namespace    Chaos
namespace    Private
function     bool FPBDCollisionContainerSolverJacobi::SolvePositionImpl

Source code excerpt:

		{
			SCOPE_CYCLE_COUNTER(STAT_Collisions_Apply);
			if (!CVars::bChaos_PBDCollisionSolver_Position_SolveEnabled)
			{
				return false;
			}

			if (EndIndex <= BeginIndex)
			{

#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/Collision/PBDCollisionContainerSolverSimd.cpp:23

Scope (from outer to inner):

file
namespace    Chaos
namespace    CVars

Source code excerpt:

	namespace CVars
	{
		extern bool bChaos_PBDCollisionSolver_Position_SolveEnabled;
		extern bool bChaos_PBDCollisionSolver_Velocity_SolveEnabled;
	}

	namespace Private
	{

#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/Collision/PBDCollisionContainerSolverSimd.cpp:544

Scope (from outer to inner):

file
namespace    Chaos
namespace    Private
function     void FPBDCollisionContainerSolverSimd::ApplyPositionConstraints

Source code excerpt:

		{
			SCOPE_CYCLE_COUNTER(STAT_Collisions_Apply);
			if (!CVars::bChaos_PBDCollisionSolver_Position_SolveEnabled)
			{
				return;
			}

			const FPBDCollisionSolverSettings& SolverSettings = ConstraintContainer.GetSolverSettings();
			const FSolverReal Dt = FSolverReal(InDt);

#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/Collision/PBDCollisionSolver.cpp:29

Scope (from outer to inner):

file
namespace    Chaos
namespace    CVars

Source code excerpt:

		//

		bool bChaos_PBDCollisionSolver_Position_SolveEnabled = true;
		float Chaos_PBDCollisionSolver_Position_MinInvMassScale = 0.77f;
		float Chaos_PBDCollisionSolver_Position_StaticFrictionStiffness = 0.5f;

		FAutoConsoleVariableRef CVarChaos_PBDCollisionSolver_Position_SolveEnabled(TEXT("p.Chaos.PBDCollisionSolver.Position.SolveEnabled"), bChaos_PBDCollisionSolver_Position_SolveEnabled, TEXT(""));
		FAutoConsoleVariableRef CVarChaos_PBDCollisionSolver_Position_MinInvMassScale(TEXT("p.Chaos.PBDCollisionSolver.Position.MinInvMassScale"), Chaos_PBDCollisionSolver_Position_MinInvMassScale, TEXT(""));
		FAutoConsoleVariableRef CVarChaos_PBDCollisionSolver_Position_StaticFrictionStiffness(TEXT("p.Chaos.PBDCollisionSolver.Position.StaticFriction.Stiffness"), Chaos_PBDCollisionSolver_Position_StaticFrictionStiffness, TEXT(""));

		//
		// Velocity Solver Settings
		//