p.Chaos.Solver.DebugDrawCCDInteractions
p.Chaos.Solver.DebugDrawCCDInteractions
#Overview
name: p.Chaos.Solver.DebugDrawCCDInteractions
This variable is created as a Console Variable (cvar).
- type:
Var
- help:
Draw CCD interactions.
It is referenced in 10
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of p.Chaos.Solver.DebugDrawCCDInteractions is to enable or disable the debug drawing of Continuous Collision Detection (CCD) interactions in the Chaos physics system of Unreal Engine 5.
This setting variable is primarily used by the Chaos physics solver, which is part of the Experimental Chaos module in Unreal Engine 5. It’s specifically related to the debugging and visualization of CCD interactions within the physics simulation.
The value of this variable is set through the Unreal Engine console variable system, as evident from the FAutoConsoleVariableRef declaration. It can be toggled on or off (1 or 0) during runtime or set in configuration files.
The associated variable ChaosSolverDrawCCDInteractions shares the same value and purpose. It’s used internally within the C++ code to check if CCD interaction debugging should be performed.
When using this variable, developers should be aware that:
- It’s primarily for debugging purposes and may impact performance when enabled.
- It’s part of the experimental Chaos physics system, so its behavior or implementation might change in future engine versions.
- It requires debug drawing to be enabled in the project settings for the visuals to appear.
Best practices for using this variable include:
- Only enable it when actively debugging CCD interactions to avoid unnecessary performance overhead.
- Use it in conjunction with other debug drawing options for a more comprehensive view of the physics simulation.
- Be cautious when using it in shipping builds, as debug drawing can impact performance.
The associated variable ChaosSolverDrawCCDInteractions is used throughout the Chaos physics code to conditionally execute debug drawing operations. It’s checked in various locations to determine whether to draw CCD-related debug information, such as shape positions, collision impulses, and interaction points. Developers should treat it the same way as the console variable, being aware that it directly controls the execution of debug drawing code within the physics simulation.
#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:154
Scope (from outer to inner):
file
namespace Chaos
namespace CVars
Source code excerpt:
FAutoConsoleVariableRef CVarChaosSolverDrawIslands(TEXT("p.Chaos.Solver.DebugDrawIslands"), ChaosSolverDrawIslands, TEXT("Draw solver islands (0 = never; 1 = end of frame)."));
FAutoConsoleVariableRef CVarChaosSolverDrawIslandSleepState(TEXT("p.Chaos.Solver.DebugDrawSleepState"), ChaosSolverDebugDrawIslandSleepState, TEXT("Draw island sleep state."));
FAutoConsoleVariableRef CVarChaosSolverDrawCCD(TEXT("p.Chaos.Solver.DebugDrawCCDInteractions"), ChaosSolverDrawCCDInteractions, TEXT("Draw CCD interactions."));
FAutoConsoleVariableRef CVarChaosSolverDrawCCDThresholds(TEXT("p.Chaos.Solver.DebugDrawCCDThresholds"), ChaosSolverDrawCCDThresholds, TEXT("Draw CCD swept thresholds."));
FAutoConsoleVariableRef CVarChaosSolverDrawShapesShapesStatic(TEXT("p.Chaos.Solver.DebugDraw.ShowStatics"), ChaosSolverDrawShapesShowStatic, TEXT("If DebugDrawShapes is enabled, whether to show static objects"));
FAutoConsoleVariableRef CVarChaosSolverDrawShapesShapesKinematic(TEXT("p.Chaos.Solver.DebugDraw.ShowKinematics"), ChaosSolverDrawShapesShowKinematic, TEXT("If DebugDrawShapes is enabled, whether to show kinematic objects"));
FAutoConsoleVariableRef CVarChaosSolverDrawShapesShapesDynamic(TEXT("p.Chaos.Solver.DebugDraw.ShowDynamics"), ChaosSolverDrawShapesShowDynamic, TEXT("If DebugDrawShapes is enabled, whether to show dynamic objects"));
FAutoConsoleVariableRef CVarChaosSolverDrawJoints(TEXT("p.Chaos.Solver.DebugDrawJoints"), ChaosSolverDrawJoints, TEXT("Draw joints"));
FAutoConsoleVariableRef CVarChaosSolverDrawCharacterGroundConstraints(TEXT("p.Chaos.Solver.DebugDrawCharacterGroundConstraints"), ChaosSolverDrawCharacterGroundConstraints, TEXT("Draw character ground constraints"));
#Associated Variable and Callsites
This variable is associated with another variable named ChaosSolverDrawCCDInteractions
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/CCDUtilities.cpp:61
Scope (from outer to inner):
file
namespace Chaos
namespace CVars
Source code excerpt:
FAutoConsoleVariableRef CVarChaosCollisionCCDCorrectionPhiToleranceScale(TEXT("p.Chaos.Collision.CCD.CorrectionPhiToleranceScale"), ChaosCollisionCCDCorrectionPhiToleranceScale, TEXT("How much penetration we allow during the correction phase (multiplier on shape size)"));
extern int32 ChaosSolverDrawCCDInteractions;
#if CHAOS_DEBUG_DRAW
extern DebugDraw::FChaosDebugDrawSettings ChaosSolverDebugDebugDrawSettings;
#endif
}
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/CCDUtilities.cpp:408
Scope (from outer to inner):
file
namespace Chaos
function void FCCDManager::ApplyIslandSweptConstraints2
Source code excerpt:
#if CHAOS_DEBUG_DRAW
// Debugdraw the shape at the current TOI
if (CVars::ChaosSolverDrawCCDInteractions)
{
const DebugDraw::FChaosDebugDrawSettings& DebugDrawSettings = CVars::ChaosSolverDebugDebugDrawSettings;
for (int32 ManifoldPointIndex = 0; ManifoldPointIndex < CCDConstraint->SweptConstraint->NumManifoldPoints(); ++ManifoldPointIndex)
{
const FManifoldPoint& ManifoldPoint = CCDConstraint->SweptConstraint->GetManifoldPoint(ManifoldPointIndex);
if (ManifoldPoint.Flags.bDisabled)
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/CCDUtilities.cpp:481
Scope (from outer to inner):
file
namespace Chaos
function void FCCDManager::ApplyIslandSweptConstraints2
Source code excerpt:
#if CHAOS_DEBUG_DRAW
// Debugdraw the shapes at the final position
if (CVars::ChaosSolverDrawCCDInteractions)
{
for (int32 ParticleIndex = ParticleStart; ParticleIndex < ParticleStart + ParticleNum; ParticleIndex++)
{
const FGeometryParticleHandle* Particle = GroupedCCDParticles[ParticleIndex]->Particle;
DebugDraw::DrawParticleShapes(FRigidTransform3::Identity, Particle, FColor::Green, &CVars::ChaosSolverDebugDebugDrawSettings);
}
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/CCDUtilities.cpp:860
Scope (from outer to inner):
file
namespace Chaos
function void FCCDManager::ApplyImpulse
Source code excerpt:
#if CHAOS_DEBUG_DRAW
if (CVars::ChaosSolverDrawCCDInteractions)
{
DebugDraw::DrawCCDCollisionImpulse(FRigidTransform3::Identity, *CCDConstraint, ManifoldPointIndex, Impulse, &CVars::ChaosSolverDebugDebugDrawSettings);
}
#endif
}
}
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/Collision/ParticlePairMidPhase.cpp:39
Scope (from outer to inner):
file
namespace Chaos
namespace CVars
Source code excerpt:
namespace CVars
{
extern int32 ChaosSolverDrawCCDInteractions;
extern DebugDraw::FChaosDebugDrawSettings ChaosSolverDebugDebugDrawSettings;
}
namespace DebugDraw
{
extern float ChaosDebugDrawCCDDuration;
}
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/Collision/ParticlePairMidPhase.cpp:601
Scope (from outer to inner):
file
namespace Chaos
function int32 FSingleShapePairCollisionDetector::GenerateCollisionCCDImpl
Source code excerpt:
#if CHAOS_DEBUG_DRAW
if (CVars::ChaosSolverDrawCCDInteractions)
{
if (FConstGenericParticleHandle(Constraint->GetParticle0())->CCDEnabled())
{
DebugDraw::DrawShape(CCDShapeWorldTransform0, Constraint->GetImplicit0(), Shape0, FColor::Black, DebugDraw::ChaosDebugDrawCCDDuration, &CVars::ChaosSolverDebugDebugDrawSettings);
DebugDraw::DrawShape(ShapeWorldTransform0, Constraint->GetImplicit0(), Shape0, FColor::White, DebugDraw::ChaosDebugDrawCCDDuration, &CVars::ChaosSolverDebugDebugDrawSettings);
}
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/Chaos/Collision/ParticlePairMidPhase.cpp:1957
Scope (from outer to inner):
file
namespace Chaos
function bool FGenericParticlePairMidPhase::UpdateCollisionCCD
Source code excerpt:
#if CHAOS_DEBUG_DRAW
if (CVars::ChaosSolverDrawCCDInteractions)
{
if (FConstGenericParticleHandle(Constraint->GetParticle0())->CCDEnabled())
{
DebugDraw::DrawShape(CCDShapeWorldTransform0, Constraint->GetImplicit0(), Constraint->GetShape0(), FColor::Black, DebugDraw::ChaosDebugDrawCCDDuration, &CVars::ChaosSolverDebugDebugDrawSettings);
DebugDraw::DrawShape(ShapeWorldTransform0, Constraint->GetImplicit0(), Constraint->GetShape0(), FColor::White, DebugDraw::ChaosDebugDrawCCDDuration, &CVars::ChaosSolverDebugDebugDrawSettings);
}
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/PBDRigidsSolver.cpp:127
Scope (from outer to inner):
file
namespace Chaos
namespace CVars
Source code excerpt:
int32 ChaosSolverDrawIslands = 0;
int32 ChaosSolverDebugDrawIslandSleepState = 0;
int32 ChaosSolverDrawCCDInteractions = 0;
int32 ChaosSolverDrawCCDThresholds = 0;
int32 ChaosSolverDrawShapesShowStatic = 1;
int32 ChaosSolverDrawShapesShowKinematic = 1;
int32 ChaosSolverDrawShapesShowDynamic = 1;
int32 ChaosSolverDrawJoints = 0;
int32 ChaosSolverDrawCharacterGroundConstraints = 0;
#Loc: <Workspace>/Engine/Source/Runtime/Experimental/Chaos/Private/PBDRigidsSolver.cpp:154
Scope (from outer to inner):
file
namespace Chaos
namespace CVars
Source code excerpt:
FAutoConsoleVariableRef CVarChaosSolverDrawIslands(TEXT("p.Chaos.Solver.DebugDrawIslands"), ChaosSolverDrawIslands, TEXT("Draw solver islands (0 = never; 1 = end of frame)."));
FAutoConsoleVariableRef CVarChaosSolverDrawIslandSleepState(TEXT("p.Chaos.Solver.DebugDrawSleepState"), ChaosSolverDebugDrawIslandSleepState, TEXT("Draw island sleep state."));
FAutoConsoleVariableRef CVarChaosSolverDrawCCD(TEXT("p.Chaos.Solver.DebugDrawCCDInteractions"), ChaosSolverDrawCCDInteractions, TEXT("Draw CCD interactions."));
FAutoConsoleVariableRef CVarChaosSolverDrawCCDThresholds(TEXT("p.Chaos.Solver.DebugDrawCCDThresholds"), ChaosSolverDrawCCDThresholds, TEXT("Draw CCD swept thresholds."));
FAutoConsoleVariableRef CVarChaosSolverDrawShapesShapesStatic(TEXT("p.Chaos.Solver.DebugDraw.ShowStatics"), ChaosSolverDrawShapesShowStatic, TEXT("If DebugDrawShapes is enabled, whether to show static objects"));
FAutoConsoleVariableRef CVarChaosSolverDrawShapesShapesKinematic(TEXT("p.Chaos.Solver.DebugDraw.ShowKinematics"), ChaosSolverDrawShapesShowKinematic, TEXT("If DebugDrawShapes is enabled, whether to show kinematic objects"));
FAutoConsoleVariableRef CVarChaosSolverDrawShapesShapesDynamic(TEXT("p.Chaos.Solver.DebugDraw.ShowDynamics"), ChaosSolverDrawShapesShowDynamic, TEXT("If DebugDrawShapes is enabled, whether to show dynamic objects"));
FAutoConsoleVariableRef CVarChaosSolverDrawJoints(TEXT("p.Chaos.Solver.DebugDrawJoints"), ChaosSolverDrawJoints, TEXT("Draw joints"));
FAutoConsoleVariableRef CVarChaosSolverDrawCharacterGroundConstraints(TEXT("p.Chaos.Solver.DebugDrawCharacterGroundConstraints"), ChaosSolverDrawCharacterGroundConstraints, TEXT("Draw character ground constraints"));