p.CollisionFriction
p.CollisionFriction
#Overview
name: p.CollisionFriction
This variable is created as a Console Variable (cvar).
- type:
Var
- help:
Collision friction for all contacts if >= 0
It is referenced in 3
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of p.CollisionFriction is to override the collision friction value for all contacts in the physics simulation within Unreal Engine 5’s Chaos physics system. It is part of the collision handling mechanism in the physics engine.
This setting variable is primarily used by the Experimental Chaos module, which is part of Unreal Engine’s physics simulation system. Based on the callsites, it’s specifically utilized in the PBDCollisionConstraints (Position Based Dynamics Collision Constraints) component of the Chaos system.
The value of this variable is set through the Unreal Engine console variable system. It’s defined as an FAutoConsoleVariableRef, which means it can be adjusted at runtime through console commands or configuration files.
The p.CollisionFriction variable interacts directly with the CollisionFrictionOverride variable. When p.CollisionFriction is set to a value greater than or equal to 0, it overrides the default collision friction values for both dynamic and static friction in the physics simulation.
Developers must be aware that this variable affects all contacts in the physics simulation when set. It’s a global override, which means it will impact the entire physics simulation rather than specific objects or areas. This could potentially lead to unexpected behavior if not used carefully.
Best practices for using this variable include:
- Use it primarily for testing and debugging purposes.
- Be cautious when applying it in production environments, as it affects all collisions globally.
- Consider using object-specific friction settings for more granular control in most scenarios.
- Document its usage clearly if employed in a project, as it can significantly alter physics behavior.
Regarding the associated variable CollisionFrictionOverride:
The purpose of CollisionFrictionOverride is to store the value set by p.CollisionFriction and apply it within the physics simulation code.
This variable is used directly in the UpdateConstraintMaterialProperties function of the FPBDCollisionConstraints class. When CollisionFrictionOverride is greater than or equal to 0, it overrides both the MaterialDynamicFriction and MaterialStaticFriction properties.
The value of CollisionFrictionOverride is set by the p.CollisionFriction console variable.
It interacts with the MaterialDynamicFriction and MaterialStaticFriction variables, overriding their values when active.
Developers should be aware that this variable acts as an intermediary between the console variable system and the actual physics simulation code. Its value directly corresponds to the p.CollisionFriction setting.
Best practices for CollisionFrictionOverride include:
- Treat it as a read-only variable within the physics code, as its value is managed by the console variable system.
- Use it consistently with p.CollisionFriction, understanding that they represent the same setting.
- Consider its impact on both dynamic and static friction when debugging physics behavior.
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/PBDCollisionConstraints.cpp:46
Scope (from outer to inner):
file
namespace Chaos
Source code excerpt:
FRealSingle CollisionFrictionOverride = -1.0f;
FAutoConsoleVariableRef CVarCollisionFrictionOverride(TEXT("p.CollisionFriction"), CollisionFrictionOverride, TEXT("Collision friction for all contacts if >= 0"));
FRealSingle CollisionRestitutionOverride = -1.0f;
FAutoConsoleVariableRef CVarCollisionRestitutionOverride(TEXT("p.CollisionRestitution"), CollisionRestitutionOverride, TEXT("Collision restitution for all contacts if >= 0"));
FRealSingle CollisionAngularFrictionOverride = -1.0f;
FAutoConsoleVariableRef CVarCollisionAngularFrictionOverride(TEXT("p.CollisionAngularFriction"), CollisionAngularFrictionOverride, TEXT("Collision angular friction for all contacts if >= 0"));
#Associated Variable and Callsites
This variable is associated with another variable named CollisionFrictionOverride
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/PBDCollisionConstraints.cpp:45
Scope (from outer to inner):
file
namespace Chaos
Source code excerpt:
FAutoConsoleVariableRef CVarBPTreeOfGrids(TEXT("p.BPTreeOfGrids"), BPTreeOfGrids, TEXT("Whether to use a seperate tree of grids for bp"));
FRealSingle CollisionFrictionOverride = -1.0f;
FAutoConsoleVariableRef CVarCollisionFrictionOverride(TEXT("p.CollisionFriction"), CollisionFrictionOverride, TEXT("Collision friction for all contacts if >= 0"));
FRealSingle CollisionRestitutionOverride = -1.0f;
FAutoConsoleVariableRef CVarCollisionRestitutionOverride(TEXT("p.CollisionRestitution"), CollisionRestitutionOverride, TEXT("Collision restitution for all contacts if >= 0"));
FRealSingle CollisionAngularFrictionOverride = -1.0f;
FAutoConsoleVariableRef CVarCollisionAngularFrictionOverride(TEXT("p.CollisionAngularFriction"), CollisionAngularFrictionOverride, TEXT("Collision angular friction for all contacts if >= 0"));
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/PBDCollisionConstraints.cpp:506
Scope (from outer to inner):
file
namespace Chaos
function void FPBDCollisionConstraints::UpdateConstraintMaterialProperties
Source code excerpt:
// Overrides for testing
if (CollisionFrictionOverride >= 0)
{
MaterialDynamicFriction = CollisionFrictionOverride;
MaterialStaticFriction = CollisionFrictionOverride;
}
if (CollisionRestitutionOverride >= 0)
{
MaterialRestitution = CollisionRestitutionOverride;
}
if (CollisionRestitutionThresholdOverride >= 0.0f)