UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints Class Reference

A set of 4 manifold points in a FPBDCollisionSolver. More...

#include <PBDCollisionSolverJacobi.h>

Classes

struct  FManifoldPoint
 

Public Member Functions

void Reset ()
 
FORCEINLINE_DEBUGGABLE int32 NumManifoldPoints () const
 
FORCEINLINE_DEBUGGABLE int32 AddManifoldPoint ()
 
FORCEINLINE_DEBUGGABLE void SetWorldContact (const int32 ManifoldPointIndex, const FSolverVec3 &InRelativeContactPosition0, const FSolverVec3 &InRelativeContactPosition1, const FSolverVec3 &InWorldContactNormal, const FSolverVec3 &InWorldContactTangentU, const FSolverVec3 &InWorldContactTangentV, const FSolverReal InWorldContactDeltaNormal, const FSolverReal InWorldContactDeltaTangentU, const FSolverReal InWorldContactDeltaTangentV, const FSolverReal InWorldContactVelocityTargetNormal)
 
FORCEINLINE_DEBUGGABLE void InitContact (const int32 ManifoldPointIndex, const FConstraintSolverBody &Body0, const FConstraintSolverBody &Body1)
 Initialize the geometric data for the contact.
 
void UpdateMass (const int32 ManifoldPointIndex, const FConstraintSolverBody &Body0, const FConstraintSolverBody &Body1)
 Update the cached mass properties based on the current body transforms.
 
void UpdateMassNormal (const int32 ManifoldPointIndex, const FConstraintSolverBody &Body0, const FConstraintSolverBody &Body1)
 Update the contact mass for the normal correction This is used by shock propagation.
 
FORCEINLINE_DEBUGGABLE FSolverVec3 GetNetPushOut (const int32 ManifoldPointIndex) const
 
FORCEINLINE_DEBUGGABLE FSolverVec3 GetNetImpulse (const int32 ManifoldPointIndex) const
 
FORCEINLINE_DEBUGGABLE FSolverReal GetStaticFrictionRatio (const int32 ManifoldPointIndex) const
 
FORCEINLINE_DEBUGGABLE void CalculateContactPositionErrorNormal (const int32 ManifoldPointIndex, const FConstraintSolverBody &Body0, const FConstraintSolverBody &Body1, const FSolverReal MaxPushOut, FSolverReal &OutContactDeltaNormal) const
 Calculate the position error at the current transforms.
 
FORCEINLINE_DEBUGGABLE void CalculateContactPositionErrorTangential (const int32 ManifoldPointIndex, const FConstraintSolverBody &Body0, const FConstraintSolverBody &Body1, FSolverReal &OutContactDeltaTangentU, FSolverReal &OutContactDeltaTangentV) const
 
FORCEINLINE_DEBUGGABLE void CalculatePositionCorrectionNormal (const int32 ManifoldPointIndex, const FSolverReal Stiffness, FSolverReal ContactDeltaNormal, FConstraintSolverBody &Body0, FConstraintSolverBody &Body1, FSolverVec3 &InOutDX0, FSolverVec3 &InOutDR0, FSolverVec3 &InOutDX1, FSolverVec3 &InOutDR1)
 
FORCEINLINE_DEBUGGABLE void ApplyFrictionCone (const int32 ManifoldPointIndex, const FSolverReal StaticFriction, const FSolverReal DynamicFriction, const FSolverReal MaxFrictionPushOut, FSolverReal &InOutPushOutTangentU, FSolverReal &InOutPushOutTangentV)
 
FORCEINLINE_DEBUGGABLE void SolvePositionNoFriction (const FSolverReal Stiffness, const FSolverReal MaxPushOut, FConstraintSolverBody &Body0, FConstraintSolverBody &Body1)
 
FORCEINLINE_DEBUGGABLE bool SolvePositionWithFriction (const FSolverReal Stiffness, const FSolverReal Dt, const FSolverReal StaticFriction, const FSolverReal DynamicFriction, const FSolverReal MaxPushOut, FConstraintSolverBody &Body0, FConstraintSolverBody &Body1)
 
FORCEINLINE_DEBUGGABLE void CalculateContactVelocityErrorNormal (const int32 ManifoldPointIndex, const FConstraintSolverBody &Body0, const FConstraintSolverBody &Body1, FSolverReal &OutContactVelocityDeltaNormal) const
 Calculate the velocity error at the current transforms.
 
FORCEINLINE_DEBUGGABLE void CalculateContactVelocityError (const int32 ManifoldPointIndex, const FConstraintSolverBody &Body0, const FConstraintSolverBody &Body1, const FSolverReal DynamicFriction, const FSolverReal Dt, FSolverReal &OutContactVelocityDeltaNormal, FSolverReal &OutContactVelocityDeltaTangent0, FSolverReal &OutContactVelocityDeltaTangent1) const
 
FORCEINLINE_DEBUGGABLE void SolveVelocity (const FSolverReal Stiffness, const FSolverReal Dt, const bool bApplyDynamicFriction, FConstraintSolverBody &Body0, FConstraintSolverBody &Body1)
 
FORCEINLINE_DEBUGGABLE bool ShouldSolveVelocity (const int32 ManifoldPointIndex) const
 Whether we need to solve velocity for this manifold point (only if we were penetrating or applied a pushout)
 

Public Attributes

TCArray< FManifoldPoint, MaxManifoldPointsManifoldPoints
 

Static Public Attributes

static const int32 MaxManifoldPoints = 4
 

Friends

class FPBDCollisionSolverJacobi
 

Detailed Description

A set of 4 manifold points in a FPBDCollisionSolver.

Member Function Documentation

◆ AddManifoldPoint()

FORCEINLINE_DEBUGGABLE int32 Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::AddManifoldPoint ( )
inline

◆ ApplyFrictionCone()

FORCEINLINE_DEBUGGABLE void Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::ApplyFrictionCone ( const int32  ManifoldPointIndex,
const FSolverReal  StaticFriction,
const FSolverReal  DynamicFriction,
const FSolverReal  MaxFrictionPushOut,
FSolverReal InOutPushOutTangentU,
FSolverReal InOutPushOutTangentV 
)
inline

◆ CalculateContactPositionErrorNormal()

FORCEINLINE_DEBUGGABLE void Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::CalculateContactPositionErrorNormal ( const int32  ManifoldPointIndex,
const FConstraintSolverBody Body0,
const FConstraintSolverBody Body1,
const FSolverReal  MaxPushOut,
FSolverReal OutContactDeltaNormal 
) const
inline

Calculate the position error at the current transforms.

Parameters
MaxPushOuta limit on the position error for this iteration to prevent initial-penetration explosion (a common PBD problem)

◆ CalculateContactPositionErrorTangential()

FORCEINLINE_DEBUGGABLE void Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::CalculateContactPositionErrorTangential ( const int32  ManifoldPointIndex,
const FConstraintSolverBody Body0,
const FConstraintSolverBody Body1,
FSolverReal OutContactDeltaTangentU,
FSolverReal OutContactDeltaTangentV 
) const
inline

◆ CalculateContactVelocityError()

FORCEINLINE_DEBUGGABLE void Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::CalculateContactVelocityError ( const int32  ManifoldPointIndex,
const FConstraintSolverBody Body0,
const FConstraintSolverBody Body1,
const FSolverReal  DynamicFriction,
const FSolverReal  Dt,
FSolverReal OutContactVelocityDeltaNormal,
FSolverReal OutContactVelocityDeltaTangent0,
FSolverReal OutContactVelocityDeltaTangent1 
) const
inline

◆ CalculateContactVelocityErrorNormal()

FORCEINLINE_DEBUGGABLE void Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::CalculateContactVelocityErrorNormal ( const int32  ManifoldPointIndex,
const FConstraintSolverBody Body0,
const FConstraintSolverBody Body1,
FSolverReal OutContactVelocityDeltaNormal 
) const
inline

Calculate the velocity error at the current transforms.

◆ CalculatePositionCorrectionNormal()

FORCEINLINE_DEBUGGABLE void Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::CalculatePositionCorrectionNormal ( const int32  ManifoldPointIndex,
const FSolverReal  Stiffness,
FSolverReal  ContactDeltaNormal,
FConstraintSolverBody Body0,
FConstraintSolverBody Body1,
FSolverVec3 InOutDX0,
FSolverVec3 InOutDR0,
FSolverVec3 InOutDX1,
FSolverVec3 InOutDR1 
)
inline

◆ GetNetImpulse()

FORCEINLINE_DEBUGGABLE FSolverVec3 Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::GetNetImpulse ( const int32  ManifoldPointIndex) const
inline

◆ GetNetPushOut()

FORCEINLINE_DEBUGGABLE FSolverVec3 Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::GetNetPushOut ( const int32  ManifoldPointIndex) const
inline

◆ GetStaticFrictionRatio()

FORCEINLINE_DEBUGGABLE FSolverReal Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::GetStaticFrictionRatio ( const int32  ManifoldPointIndex) const
inline

◆ InitContact()

FORCEINLINE_DEBUGGABLE void Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::InitContact ( const int32  ManifoldPointIndex,
const FConstraintSolverBody Body0,
const FConstraintSolverBody Body1 
)
inline

Initialize the geometric data for the contact.

◆ NumManifoldPoints()

FORCEINLINE_DEBUGGABLE int32 Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::NumManifoldPoints ( ) const
inline

◆ Reset()

void Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::Reset ( )
inline

◆ SetWorldContact()

FORCEINLINE_DEBUGGABLE void Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::SetWorldContact ( const int32  ManifoldPointIndex,
const FSolverVec3 InRelativeContactPosition0,
const FSolverVec3 InRelativeContactPosition1,
const FSolverVec3 InWorldContactNormal,
const FSolverVec3 InWorldContactTangentU,
const FSolverVec3 InWorldContactTangentV,
const FSolverReal  InWorldContactDeltaNormal,
const FSolverReal  InWorldContactDeltaTangentU,
const FSolverReal  InWorldContactDeltaTangentV,
const FSolverReal  InWorldContactVelocityTargetNormal 
)
inline

◆ ShouldSolveVelocity()

FORCEINLINE_DEBUGGABLE bool Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::ShouldSolveVelocity ( const int32  ManifoldPointIndex) const
inline

Whether we need to solve velocity for this manifold point (only if we were penetrating or applied a pushout)

◆ SolvePositionNoFriction()

FORCEINLINE_DEBUGGABLE void Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::SolvePositionNoFriction ( const FSolverReal  Stiffness,
const FSolverReal  MaxPushOut,
FConstraintSolverBody Body0,
FConstraintSolverBody Body1 
)
inline

◆ SolvePositionWithFriction()

FORCEINLINE_DEBUGGABLE bool Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::SolvePositionWithFriction ( const FSolverReal  Stiffness,
const FSolverReal  Dt,
const FSolverReal  StaticFriction,
const FSolverReal  DynamicFriction,
const FSolverReal  MaxPushOut,
FConstraintSolverBody Body0,
FConstraintSolverBody Body1 
)
inline

◆ SolveVelocity()

FORCEINLINE_DEBUGGABLE void Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::SolveVelocity ( const FSolverReal  Stiffness,
const FSolverReal  Dt,
const bool  bApplyDynamicFriction,
FConstraintSolverBody Body0,
FConstraintSolverBody Body1 
)
inline

◆ UpdateMass()

void Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::UpdateMass ( const int32  ManifoldPointIndex,
const FConstraintSolverBody Body0,
const FConstraintSolverBody Body1 
)
inline

Update the cached mass properties based on the current body transforms.

◆ UpdateMassNormal()

void Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::UpdateMassNormal ( const int32  ManifoldPointIndex,
const FConstraintSolverBody Body0,
const FConstraintSolverBody Body1 
)
inline

Update the contact mass for the normal correction This is used by shock propagation.

Friends And Related Symbol Documentation

◆ FPBDCollisionSolverJacobi

Member Data Documentation

◆ ManifoldPoints

TCArray<FManifoldPoint, MaxManifoldPoints> Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::ManifoldPoints

◆ MaxManifoldPoints

const int32 Chaos::Private::FPBDCollisionSolverJacobiManifoldPoints::MaxManifoldPoints = 4
static

The documentation for this class was generated from the following file: