p.Chaos.Solver.Collision.PositionFrictionIterations

p.Chaos.Solver.Collision.PositionFrictionIterations

#Overview

name: p.Chaos.Solver.Collision.PositionFrictionIterations

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.Chaos.Solver.Collision.PositionFrictionIterations is to control the number of position iterations where friction is applied in the Chaos physics solver of Unreal Engine 5. This setting variable is specifically for the physics simulation system, particularly for collision handling and friction calculations.

This setting variable is primarily used by the Chaos physics solver, which is part of Unreal Engine’s experimental physics system. It’s located in the Chaos module, as evidenced by the file path “Engine/Source/Runtime/Experimental/Chaos/Private/PBDRigidsSolver.cpp”.

The value of this variable is set through a console variable (CVar) system. It’s initialized with a default value of -1 and can be changed at runtime using console commands or through configuration files.

This variable interacts closely with other collision-related variables, such as ChaosSolverCollisionVelocityFrictionIterations, ChaosSolverCollisionPositionShockPropagationIterations, and ChaosSolverCollisionVelocityShockPropagationIterations. These variables together control different aspects of the collision solving process in the Chaos physics system.

Developers must be aware that this variable only takes effect when its value is greater than or equal to 0. If set to -1 (the default), the engine will use the configuration set elsewhere in the system.

Best practices when using this variable include:

  1. Only modify it if you need to fine-tune the physics simulation for specific scenarios.
  2. Monitor performance impacts when adjusting this value, as increasing iterations may affect performance.
  3. Use in conjunction with other related variables for a comprehensive adjustment of the collision solving process.
  4. Reset to -1 if you want to revert to the default configuration.

Regarding the associated variable ChaosSolverCollisionPositionFrictionIterations:

This is the actual integer variable that stores the value set by the console variable. It’s used directly in the physics solver code to determine the number of position iterations for friction calculations.

The value of ChaosSolverCollisionPositionFrictionIterations is checked in the PrepareAdvanceBy function of the FPBDRigidsSolver class. If it’s greater than or equal to 0, it’s used to set the position friction iterations for the collision constraints in the physics evolution system.

Developers should note that modifying ChaosSolverCollisionPositionFrictionIterations directly in code won’t have the same effect as changing the console variable, as the console variable system provides a way to modify the value at runtime and potentially through configuration files.

#References in C++ code

#Callsites

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

#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/PBDRigidsSolver.cpp:304

Scope (from outer to inner):

file
namespace    Chaos
namespace    CVars

Source code excerpt:

		int32 ChaosSolverCollisionPositionShockPropagationIterations = -1;
		int32 ChaosSolverCollisionVelocityShockPropagationIterations = -1;
		FAutoConsoleVariableRef CVarChaosSolverCollisionPositionFrictionIterations(TEXT("p.Chaos.Solver.Collision.PositionFrictionIterations"), ChaosSolverCollisionPositionFrictionIterations, TEXT("Override number of position iterations where friction is applied (if >= 0)"));
		FAutoConsoleVariableRef CVarChaosSolverCollisionVelocityFrictionIterations(TEXT("p.Chaos.Solver.Collision.VelocityFrictionIterations"), ChaosSolverCollisionVelocityFrictionIterations, TEXT("Override number of velocity iterations where friction is applied (if >= 0)"));
		FAutoConsoleVariableRef CVarChaosSolverCollisionPositionShockPropagationIterations(TEXT("p.Chaos.Solver.Collision.PositionShockPropagationIterations"), ChaosSolverCollisionPositionShockPropagationIterations, TEXT("Override number of position iterations where shock propagation is applied (if >= 0)"));
		FAutoConsoleVariableRef CVarChaosSolverCollisionVelocityShockPropagationIterations(TEXT("p.Chaos.Solver.Collision.VelocityShockPropagationIterations"), ChaosSolverCollisionVelocityShockPropagationIterations, TEXT("Override number of velocity iterations where shock propagation is applied (if >= 0)"));

		int32 ChaosSolverPositionIterations = -1;
		FAutoConsoleVariableRef CVarChaosSolverIterations(TEXT("p.Chaos.Solver.Iterations.Position"), ChaosSolverPositionIterations, TEXT("Override number of solver position iterations (-1 to use config)"));

#Associated Variable and Callsites

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

#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/PBDRigidsSolver.cpp:300

Scope (from outer to inner):

file
namespace    Chaos
namespace    CVars

Source code excerpt:

		// These override the engine config if >= 0

		int32 ChaosSolverCollisionPositionFrictionIterations = -1;
		int32 ChaosSolverCollisionVelocityFrictionIterations = -1;
		int32 ChaosSolverCollisionPositionShockPropagationIterations = -1;
		int32 ChaosSolverCollisionVelocityShockPropagationIterations = -1;
		FAutoConsoleVariableRef CVarChaosSolverCollisionPositionFrictionIterations(TEXT("p.Chaos.Solver.Collision.PositionFrictionIterations"), ChaosSolverCollisionPositionFrictionIterations, TEXT("Override number of position iterations where friction is applied (if >= 0)"));
		FAutoConsoleVariableRef CVarChaosSolverCollisionVelocityFrictionIterations(TEXT("p.Chaos.Solver.Collision.VelocityFrictionIterations"), ChaosSolverCollisionVelocityFrictionIterations, TEXT("Override number of velocity iterations where friction is applied (if >= 0)"));
		FAutoConsoleVariableRef CVarChaosSolverCollisionPositionShockPropagationIterations(TEXT("p.Chaos.Solver.Collision.PositionShockPropagationIterations"), ChaosSolverCollisionPositionShockPropagationIterations, TEXT("Override number of position iterations where shock propagation is applied (if >= 0)"));
		FAutoConsoleVariableRef CVarChaosSolverCollisionVelocityShockPropagationIterations(TEXT("p.Chaos.Solver.Collision.VelocityShockPropagationIterations"), ChaosSolverCollisionVelocityShockPropagationIterations, TEXT("Override number of velocity iterations where shock propagation is applied (if >= 0)"));

		int32 ChaosSolverPositionIterations = -1;
		FAutoConsoleVariableRef CVarChaosSolverIterations(TEXT("p.Chaos.Solver.Iterations.Position"), ChaosSolverPositionIterations, TEXT("Override number of solver position iterations (-1 to use config)"));

#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/PBDRigidsSolver.cpp:1317

Scope (from outer to inner):

file
namespace    Chaos
function     void FPBDRigidsSolver::PrepareAdvanceBy

Source code excerpt:

			}

			if (ChaosSolverCollisionPositionFrictionIterations >= 0)
			{
				MEvolution->GetCollisionConstraints().SetPositionFrictionIterations(ChaosSolverCollisionPositionFrictionIterations);
			}
			if (ChaosSolverCollisionVelocityFrictionIterations >= 0)
			{
				MEvolution->GetCollisionConstraints().SetVelocityFrictionIterations(ChaosSolverCollisionVelocityFrictionIterations);
			}
			{