p.ChaosCloth.DebugDrawBendingConstraint
p.ChaosCloth.DebugDrawBendingConstraint
#Overview
name: p.ChaosCloth.DebugDrawBendingConstraint
This variable is created as a Console Variable (cvar).
- type:
Var
- help:
Whether to debug draw the Chaos Cloth bending constraint
It is referenced in 6
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of p.ChaosCloth.DebugDrawBendingConstraint is to enable or disable the debug drawing of the bending constraint in the Chaos Cloth simulation system. This setting is primarily used for visualization and debugging purposes in the Unreal Engine’s Chaos Cloth physics system.
- The Chaos Cloth plugin and the Chaos Cloth Asset Engine module rely on this setting variable.
- The value of this variable is set as a console variable (CVar) with an initial value of false, meaning it’s disabled by default.
- This variable interacts with other debug drawing variables for Chaos Cloth, such as DebugDrawAnimDrive, DebugDrawEdgeConstraint, and DebugDrawLongRangeConstraint.
- Developers should be aware that this is a debug feature and should only be enabled when necessary for visualization or debugging purposes, as it may impact performance.
- Best practices include using this variable in conjunction with other debug drawing options to get a comprehensive view of the cloth simulation, and disabling it in production builds.
The associated variable DebugDrawBendingConstraint is a TAutoConsoleVariable
- This variable is defined in the ClothingSimulationCVar namespace.
- It’s checked in the FClothingSimulation::Simulate function to determine whether to call the DebugDrawBendingConstraint() method.
- The DebugDrawBendingConstraint() method is part of the FClothingSimulation class and uses the Visualization object to actually perform the drawing.
- In the editor, this variable is exposed as a visualization option for the Chaos Cloth simulation.
When working with this variable, developers should remember that it’s intended for debug purposes and should be used judiciously, as debug drawing can impact performance. It’s particularly useful when troubleshooting issues related to the bending behavior of the simulated cloth.
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Plugins/ChaosCloth/Source/ChaosCloth/Private/ChaosCloth/ChaosClothingSimulation.cpp:81
Scope (from outer to inner):
file
namespace ClothingSimulationCVar
Source code excerpt:
TAutoConsoleVariable<bool> DebugDrawAnimDrive (TEXT("p.ChaosCloth.DebugDrawAnimDrive" ), false, TEXT("Whether to debug draw the Chaos Cloth anim drive"), ECVF_Cheat);
TAutoConsoleVariable<bool> DebugDrawEdgeConstraint (TEXT("p.ChaosCloth.DebugDrawEdgeConstraint" ), false, TEXT("Whether to debug draw the Chaos Cloth edge constraint"), ECVF_Cheat);
TAutoConsoleVariable<bool> DebugDrawBendingConstraint (TEXT("p.ChaosCloth.DebugDrawBendingConstraint" ), false, TEXT("Whether to debug draw the Chaos Cloth bending constraint"), ECVF_Cheat);
TAutoConsoleVariable<bool> DebugDrawLongRangeConstraint (TEXT("p.ChaosCloth.DebugDrawLongRangeConstraint" ), false, TEXT("Whether to debug draw the Chaos Cloth long range constraint (aka tether constraint)"), ECVF_Cheat);
TAutoConsoleVariable<bool> DebugDrawWindForces (TEXT("p.ChaosCloth.DebugDrawWindForces" ), false, TEXT("Whether to debug draw the Chaos Cloth wind forces"), ECVF_Cheat);
TAutoConsoleVariable<bool> DebugDrawSelfCollision (TEXT("p.ChaosCloth.DebugDrawSelfCollision" ), false, TEXT("Whether to debug draw the Chaos Cloth self collision information"), ECVF_Cheat);
TAutoConsoleVariable<bool> DebugDrawSelfIntersection (TEXT("p.ChaosCloth.DebugDrawSelfIntersection" ), false, TEXT("Whether to debug draw the Chaos Cloth self intersection information"), ECVF_Cheat);
}
#endif // #if CHAOS_DEBUG_DRAW
#Loc: <Workspace>/Engine/Plugins/ChaosClothAsset/Source/ChaosClothAssetEngine/Private/ChaosClothAsset/ClothSimulationProxy.cpp:306
Scope (from outer to inner):
file
namespace UE::Chaos::ClothAsset
function void FClothSimulationProxy::Tick
Source code excerpt:
static const TConsoleVariableData<bool>* const DebugDrawAnimDriveCVar = IConsoleManager::Get().FindTConsoleVariableDataBool(TEXT("p.ChaosCloth.DebugDrawAnimDrive"));
static const TConsoleVariableData<bool>* const DebugDrawEdgeConstraintCVar = IConsoleManager::Get().FindTConsoleVariableDataBool(TEXT("p.ChaosCloth.DebugDrawEdgeConstraint"));
static const TConsoleVariableData<bool>* const DebugDrawBendingConstraintCVar = IConsoleManager::Get().FindTConsoleVariableDataBool(TEXT("p.ChaosCloth.DebugDrawBendingConstraint"));
static const TConsoleVariableData<bool>* const DebugDrawLongRangeConstraintCVar = IConsoleManager::Get().FindTConsoleVariableDataBool(TEXT("p.ChaosCloth.DebugDrawLongRangeConstraint"));
static const TConsoleVariableData<bool>* const DebugDrawWindForcesCVar = IConsoleManager::Get().FindTConsoleVariableDataBool(TEXT("p.ChaosCloth.DebugDrawWindForces"));
static const TConsoleVariableData<bool>* const DebugDrawSelfCollisionCVar = IConsoleManager::Get().FindTConsoleVariableDataBool(TEXT("p.ChaosCloth.DebugDrawSelfCollision"));
static const TConsoleVariableData<bool>* const DebugDrawSelfIntersectionCVar = IConsoleManager::Get().FindTConsoleVariableDataBool(TEXT("p.ChaosCloth.DebugDrawSelfIntersection"));
if (DebugDrawLocalSpaceCVar && DebugDrawLocalSpaceCVar->GetValueOnAnyThread()) { Visualization->DrawLocalSpace(); }
#Associated Variable and Callsites
This variable is associated with another variable named DebugDrawBendingConstraint
. They share the same value. See the following C++ source code.
#Loc: <Workspace>/Engine/Plugins/ChaosCloth/Source/ChaosCloth/Private/ChaosCloth/ChaosClothingSimulation.cpp:81
Scope (from outer to inner):
file
namespace ClothingSimulationCVar
Source code excerpt:
TAutoConsoleVariable<bool> DebugDrawAnimDrive (TEXT("p.ChaosCloth.DebugDrawAnimDrive" ), false, TEXT("Whether to debug draw the Chaos Cloth anim drive"), ECVF_Cheat);
TAutoConsoleVariable<bool> DebugDrawEdgeConstraint (TEXT("p.ChaosCloth.DebugDrawEdgeConstraint" ), false, TEXT("Whether to debug draw the Chaos Cloth edge constraint"), ECVF_Cheat);
TAutoConsoleVariable<bool> DebugDrawBendingConstraint (TEXT("p.ChaosCloth.DebugDrawBendingConstraint" ), false, TEXT("Whether to debug draw the Chaos Cloth bending constraint"), ECVF_Cheat);
TAutoConsoleVariable<bool> DebugDrawLongRangeConstraint (TEXT("p.ChaosCloth.DebugDrawLongRangeConstraint" ), false, TEXT("Whether to debug draw the Chaos Cloth long range constraint (aka tether constraint)"), ECVF_Cheat);
TAutoConsoleVariable<bool> DebugDrawWindForces (TEXT("p.ChaosCloth.DebugDrawWindForces" ), false, TEXT("Whether to debug draw the Chaos Cloth wind forces"), ECVF_Cheat);
TAutoConsoleVariable<bool> DebugDrawSelfCollision (TEXT("p.ChaosCloth.DebugDrawSelfCollision" ), false, TEXT("Whether to debug draw the Chaos Cloth self collision information"), ECVF_Cheat);
TAutoConsoleVariable<bool> DebugDrawSelfIntersection (TEXT("p.ChaosCloth.DebugDrawSelfIntersection" ), false, TEXT("Whether to debug draw the Chaos Cloth self intersection information"), ECVF_Cheat);
}
#endif // #if CHAOS_DEBUG_DRAW
#Loc: <Workspace>/Engine/Plugins/ChaosCloth/Source/ChaosCloth/Private/ChaosCloth/ChaosClothingSimulation.cpp:590
Scope (from outer to inner):
file
function void FClothingSimulation::Simulate
Source code excerpt:
if (ClothingSimulationCVar::DebugDrawAnimDrive .GetValueOnAnyThread()) { DebugDrawAnimDrive (); }
if (ClothingSimulationCVar::DebugDrawEdgeConstraint .GetValueOnAnyThread()) { DebugDrawEdgeConstraint (); }
if (ClothingSimulationCVar::DebugDrawBendingConstraint .GetValueOnAnyThread()) { DebugDrawBendingConstraint (); }
if (ClothingSimulationCVar::DebugDrawLongRangeConstraint .GetValueOnAnyThread()) { DebugDrawLongRangeConstraint (); }
if (ClothingSimulationCVar::DebugDrawWindForces .GetValueOnAnyThread()) { DebugDrawWindAndPressureForces(); }
if (ClothingSimulationCVar::DebugDrawSelfCollision .GetValueOnAnyThread()) { DebugDrawSelfCollision (); }
if (ClothingSimulationCVar::DebugDrawSelfIntersection .GetValueOnAnyThread()) { DebugDrawSelfIntersection (); }
#endif // #if CHAOS_DEBUG_DRAW
}
#Loc: <Workspace>/Engine/Plugins/ChaosCloth/Source/ChaosCloth/Public/ChaosCloth/ChaosClothingSimulation.h:105
Scope (from outer to inner):
file
namespace Chaos
class class FClothingSimulation : public FClothingSimulationCommon
function void DebugDrawBendingConstraint
Source code excerpt:
void DebugDrawAnimDrive(FPrimitiveDrawInterface* PDI = nullptr) const { Visualization.DrawAnimDrive(PDI); }
void DebugDrawEdgeConstraint(FPrimitiveDrawInterface* PDI = nullptr) const { Visualization.DrawEdgeConstraint(PDI); }
void DebugDrawBendingConstraint(FPrimitiveDrawInterface* PDI = nullptr) const { Visualization.DrawBendingConstraint(PDI); }
void DebugDrawLongRangeConstraint(FPrimitiveDrawInterface* PDI = nullptr) const { Visualization.DrawLongRangeConstraint(PDI); }
void DebugDrawWindAndPressureForces(FPrimitiveDrawInterface* PDI = nullptr) const { Visualization.DrawWindAndPressureForces(PDI); }
UE_DEPRECATED(5.1, "DebugDrawWindForces has been renamed DebugDrawWindAndPressureForces.")
void DebugDrawWindForces(FPrimitiveDrawInterface* PDI = nullptr) const { Visualization.DrawWindAndPressureForces(PDI); }
void DebugDrawLocalSpace(FPrimitiveDrawInterface* PDI = nullptr) const { Visualization.DrawLocalSpace(PDI); }
void DebugDrawSelfCollision(FPrimitiveDrawInterface* PDI = nullptr) const { Visualization.DrawSelfCollision(PDI); }
#Loc: <Workspace>/Engine/Plugins/ChaosCloth/Source/ChaosClothEditor/Private/ChaosClothEditor/ChaosSimulationEditorExtender.cpp:77
Scope (from outer to inner):
file
namespace Chaos
Source code excerpt:
FVisualizationOption(&Chaos::FClothingSimulation::DebugDrawAnimDrive , TEXT("p.ChaosClothEditor.DebugDrawAnimDrive" ), LOCTEXT("ChaosVisName_AnimDrive" , "Anim Drive" ), LOCTEXT("ChaosVisName_AnimDrive_Tooltip" , "Draws the current skinned reference mesh for the simulation which anim drive will attempt to reach if enabled")),
FVisualizationOption(&Chaos::FClothingSimulation::DebugDrawEdgeConstraint , TEXT("p.ChaosClothEditor.DebugDrawEdgeConstraint" ), LOCTEXT("ChaosVisName_EdgeConstraint" , "Edge Constraint" ), LOCTEXT("ChaosVisName_EdgeConstraint_Tooltip" , "Draws the edge spring constraints")),
FVisualizationOption(&Chaos::FClothingSimulation::DebugDrawBendingConstraint , TEXT("p.ChaosClothEditor.DebugDrawBendingConstraint" ), LOCTEXT("ChaosVisName_BendingConstraint" , "Bending Constraint" ), LOCTEXT("ChaosVisName_BendingConstraint_Tooltip" , "Draws the bending spring constraints")),
FVisualizationOption(&Chaos::FClothingSimulation::DebugDrawLongRangeConstraint , TEXT("p.ChaosClothEditor.DebugDrawLongRangeConstraint" ), LOCTEXT("ChaosVisName_LongRangeConstraint" , "Long Range Constraint" ), LOCTEXT("ChaosVisName_LongRangeConstraint_Tooltip" , "Draws the long range attachment constraint distances")),
FVisualizationOption(&Chaos::FClothingSimulation::DebugDrawWindAndPressureForces, TEXT("p.ChaosClothEditor.DebugDrawWindAndPressureForces"), LOCTEXT("ChaosVisName_WindAndPressureForces", "Wind Aerodynamic And Pressure Forces"), LOCTEXT("ChaosVisName_WindAndPressure_Tooltip", "Draws the Wind drag and lift and pressure forces")),
FVisualizationOption(&Chaos::FClothingSimulation::DebugDrawLocalSpace , TEXT("p.ChaosClothEditor.DebugDrawLocalSpace" ), LOCTEXT("ChaosVisName_LocalSpace" , "Local Space Reference Bone" ), LOCTEXT("ChaosVisName_LocalSpace_Tooltip" , "Draws the local space reference bone")),
FVisualizationOption(&Chaos::FClothingSimulation::DebugDrawSelfCollision , TEXT("p.ChaosClothEditor.DebugDrawSelfCollision" ), LOCTEXT("ChaosVisName_SelfCollision" , "Self Collision" ), LOCTEXT("ChaosVisName_SelfCollision_Tooltip" , "Draws the self collision thickness/debugging information")),
FVisualizationOption(&Chaos::FClothingSimulation::DebugDrawSelfIntersection , TEXT("p.ChaosClothEditor.DebugDrawSelfIntersection" ), LOCTEXT("ChaosVisName_SelfIntersection" , "Self Intersection" ), LOCTEXT("ChaosVisName_SelfIntersection_Tooltip" , "Draws the self intersection contour/region information")),
};