UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Chaos::FPBDCollisionConstraint Class Referencefinal

A contact constraint. More...

#include <PBDCollisionConstraint.h>

+ Inheritance diagram for Chaos::FPBDCollisionConstraint:

Public Types

using FConstraintContainerHandle = TIntrusiveConstraintHandle< FPBDCollisionConstraint >
 
- Public Types inherited from Chaos::FPBDCollisionConstraintHandle
using Base = TIntrusiveConstraintHandle< FPBDCollisionConstraint >
 
using FImplicitPair = TPair< const FImplicitObject *, const FImplicitObject * >
 
using FGeometryPair = TPair< const TGeometryParticleHandle< FReal, 3 > *, const TGeometryParticleHandle< FReal, 3 > * >
 
using FHandleKey = TPair< FImplicitPair, FGeometryPair >
 
- Public Types inherited from Chaos::TIntrusiveConstraintHandle< FPBDCollisionConstraint >
using FConstraint = FPBDCollisionConstraint
 
- Public Types inherited from Chaos::FConstraintHandle
using FGeometryParticleHandle = TGeometryParticleHandle< FReal, 3 >
 

Public Member Functions

CHAOS_API void RestoreFrom (const FPBDCollisionConstraint &Source)
 
 FPBDCollisionConstraint ()
 
virtual CHAOS_API ~FPBDCollisionConstraint ()
 
bool GetCCDEnabled () const
 
void SetCCDEnabled (const bool bCCDEnabled)
 
bool GetCCDSweepEnabled () const
 
void SetCCDSweepEnabled (const bool bCCDSweepEnabled)
 
FReal GetCCDEnablePenetration () const
 If CCD is enabled, contacts deeper than this will be handled by CCD.
 
FReal GetCCDTargetPenetration () const
 If CCD is enabled and processed the contact, CCD resolution leaves up to this much penetration.
 
FGeometryParticleHandleGetParticle0 () const
 
FGeometryParticleHandleGetParticle1 () const
 
FGeometryParticleHandleGetParticle (const int32 ParticleIndex) const
 
const FImplicitObjectGetImplicit0 () const
 
const FImplicitObjectGetImplicit1 () const
 
const FImplicitObjectGetImplicit (const int32 ParticleIndex) const
 
const FShapeInstanceGetShape0 () const
 
const FShapeInstanceGetShape1 () const
 
const FShapeInstanceGetShape (const int32 ParticleIndex) const
 
const FBVHParticlesGetCollisionParticles0 () const
 
const FBVHParticlesGetCollisionParticles1 () const
 
const FBVHParticlesGetCollisionParticles (const int32 ParticleIndex) const
 
const FReal GetCollisionMargin0 () const
 
const FReal GetCollisionMargin1 () const
 
const bool IsQuadratic0 () const
 
const bool IsQuadratic1 () const
 
const bool HasQuadraticShape () const
 
const FReal GetCollisionRadius0 () const
 
const FReal GetCollisionRadius1 () const
 
CHAOS_API void Activate ()
 
void Activate (const FReal Dt)
 
CHAOS_API void UpdateParticleTransform (FGeometryParticleHandle *InParticle)
 
void ResetPhi (FReal InPhi)
 
FReal GetPhi () const
 
void BeginTick ()
 
bool IsCurrent () const
 
void SetDisabled (bool bInDisabled)
 
bool GetDisabled () const
 
bool GetIsOneWayInteraction () const
 
void SetIsProbe (bool bInProbe)
 
bool GetIsProbe () const
 
void SetIsInitialContact (const bool bInIsInitialContact)
 
bool IsInitialContact () const
 
FRealSingle GetMinInitialPhi () const
 
bool UsePerContactInitialPhi () const
 
virtual bool SupportsSleeping () const override final
 
virtual bool SupportsPartialIslandSleeping () const override final
 
virtual CHAOS_API bool IsSleeping () const override final
 
virtual CHAOS_API void SetIsSleeping (const bool bInIsSleeping) override final
 
virtual CHAOS_API FVec3f GetNetLinearImpulse () const override final
 
CHAOS_API FVec3 CalculateWorldContactNormal () const
 
CHAOS_API FVec3 CalculateWorldContactLocation () const
 
void ClearMaterialProperties ()
 
void UpdateMaterialProperties ()
 
void SetModifierApplied ()
 
const FPBDCollisionConstraintMaterialGetCollisionMaterial () const
 
void SetInvMassScale0 (const FReal InInvMassScale)
 
FReal GetInvMassScale0 () const
 
void SetInvMassScale1 (const FReal InInvMassScale)
 
FReal GetInvMassScale1 () const
 
void SetInvInertiaScale0 (const FReal InInvInertiaScale)
 
FReal GetInvInertiaScale0 () const
 
void SetInvInertiaScale1 (const FReal InInvInertiaScale)
 
FReal GetInvInertiaScale1 () const
 
void SetStiffness (FReal InStiffness)
 
FReal GetStiffness () const
 
void SetRestitution (const FReal InRestitution)
 
FReal GetRestitution () const
 
void SetRestitutionThreshold (const FReal InRestitutionThreshold)
 
FReal GetRestitutionThreshold () const
 
void SetStaticFriction (const FReal InStaticFriction)
 
FReal GetStaticFriction () const
 
void SetDynamicFriction (const FReal InDynamicFriction)
 
FReal GetDynamicFriction () const
 
void SetMinFrictionPushOut (const FReal InMinFrictionPushOut)
 
FReal GetMinFrictionPushOut () const
 
bool IsSoftContact () const
 
void SetSoftSeparation (const FReal InSoftSeparation)
 
FRealSingle GetSoftSeparation () const
 
EContactShapesType GetShapesType () const
 
CHAOS_API FString ToString () const
 
FReal GetCullDistance () const
 
FRealSingle GetCullDistancef () const
 
void SetCullDistance (FReal InCullDistance)
 
FVec3f GetRelativeMovement () const
 
void SetRelativeMovement (const FVec3f &InDelta)
 
bool GetUseManifold () const
 
bool GetUseIncrementalManifold () const
 
bool GetUseIncrementalCollisionDetection () const
 
FRealSingle GetInitialOverlapDepenetrationVelocity () const
 
void ResetModifications ()
 
CHAOS_API void ResetManifold ()
 Clear the current and previous manifolds.
 
TArrayView< FManifoldPointGetManifoldPoints ()
 
TArrayView< const FManifoldPointGetManifoldPoints () const
 
int32 NumManifoldPoints () const
 
FManifoldPointGetManifoldPoint (const int32 PointIndex)
 
const FManifoldPointGetManifoldPoint (const int32 PointIndex) const
 
const FManifoldPointGetClosestManifoldPoint () const
 
bool IsManifoldPointActive (const int32 PointIndex) const
 
const FManifoldPointResultGetManifoldPointResult (const int32 PointIndex) const
 
int32 NumEnabledManifoldPoints () const
 
void DisableManifoldPoint (const int32 DisabledManifoldPointIndex)
 
CHAOS_API void AddIncrementalManifoldContact (const FContactPoint &ContactPoint)
 
void AddOneshotManifoldContact (const FContactPointf &ContactPoint)
 
void SetOneShotManifoldContacts (const TArrayView< const FContactPoint > &ContactPoints)
 Replace the current manifold points with the input. The input array should contain no more than MaxManifoldPoints contacts (any extra will be ignored). We assume that all input contacts have been initialized and will not return false from IsSet(). Ignores contacts deeper than the CullDistance for this constraint.
 
CHAOS_API void CorrectManifoldPoints ()
 
CHAOS_API void UpdateManifoldContacts ()
 
const FRigidTransform3GetShapeRelativeTransform0 () const
 
const FRigidTransform3GetShapeRelativeTransform1 () const
 
const FRigidTransform3GetShapeRelativeTransform (const int32 ParticleIndex) const
 
const FRigidTransform3GetShapeWorldTransform0 () const
 
const FRigidTransform3GetShapeWorldTransform1 () const
 
const FRigidTransform3GetShapeWorldTransform (const int32 ParticleIndex) const
 
void SetShapeWorldTransforms (const FRigidTransform3 &InShapeWorldTransform0, const FRigidTransform3 &InShapeWorldTransform1)
 
void SetLastShapeWorldTransforms (const FRigidTransform3 &InShapeWorldTransform0, const FRigidTransform3 &InShapeWorldTransform1)
 
bool GetCanRestoreManifold () const
 
CHAOS_API bool TryRestoreManifold ()
 
CHAOS_API void ResetActiveManifoldContacts ()
 
CHAOS_API bool TryAddManifoldContact (const FContactPoint &ContactPoint)
 
CHAOS_API bool TryInsertManifoldContact (const FContactPoint &ContactPoint)
 
FGJKSimplexDataGetGJKWarmStartData ()
 
const FSolverBodyGetSolverBody0 () const
 
const FSolverBodyGetSolverBody1 () const
 
void SetSolverBodies (const FSolverBody *InSolverBody0, const FSolverBody *InSolverBody1)
 
bool WasManifoldRestored () const
 Whether this constraint was fully restored from a previous tick, and the manifold should be reused as-is.
 
CHAOS_API ECollisionConstraintDirection GetConstraintDirection (const FReal Dt) const
 
void ResetSavedManifoldPoints ()
 Clear the saved manifold points. This effectively resets friction anchors.
 
int32 NumSavedManifoldPoints () const
 
const FSavedManifoldPointGetSavedManifoldPoint (const int32 PointIndex) const
 
FReal GetCCDTimeOfImpact () const
 Time of impact from CCD sweep test if CCD is activate.Otherwise undefined.
 
void SetCCDTimeOfImpact (const FReal TOI)
 Set the CCD TOI from the collision detection sweep.
 
void ResetCCDTimeOfImpact ()
 
void SetCCDResults (const FVec3 &InNetImpulse)
 Store the results of CCD contact resolution, if active.
 
FORCEINLINE void ResetSolverResults ()
 
FORCEINLINE void SetSolverResults (const int32 ManifoldPointIndex, const FVec3f &NetPushOut, const FVec3f &NetImpulse, const FRealSingle StaticFrictionRatio, const FRealSingle Dt)
 Store the data from the solver that is retained between ticks for the specified manifold point or used by dependent systems (plasticity, breaking, etc.)
 
Private::FCollisionParticlePairKey GetParticlePairKey () const
 
Private::FCollisionSortKey GetCollisionSortKey () const
 
void SetCollisionSortKey (const Private::FCollisionSortKey &InCollisionSortKey)
 
Private::FImplicitBoundsTestFlags GetBoundsTestFlags () const
 
const FPBDCollisionConstraintHandleGetConstraintHandle () const
 
FPBDCollisionConstraintHandleGetConstraintHandle ()
 
bool UpdateAndTryRestoreManifold ()
 
- Public Member Functions inherited from Chaos::FPBDCollisionConstraintHandle
 FPBDCollisionConstraintHandle ()
 
const FPBDCollisionConstraintGetContact () const
 
FPBDCollisionConstraintGetContact ()
 
const FPBDCollisionConstraintGetPointContact () const
 
FPBDCollisionConstraintGetPointContact ()
 
const FPBDCollisionConstraintGetSweptPointContact () const
 
FPBDCollisionConstraintGetSweptPointContact ()
 
bool GetCCDEnabled () const
 
virtual void SetEnabled (bool InEnabled) override final
 
virtual bool IsEnabled () const override final
 
virtual bool IsProbe () const override final
 
FVec3 GetAccumulatedImpulse () const
 
virtual FParticlePair GetConstrainedParticles () const override final
 
const FPBDCollisionConstraintsConcreteContainer () const
 
FPBDCollisionConstraintsConcreteContainer ()
 
- Public Member Functions inherited from Chaos::TIntrusiveConstraintHandle< FPBDCollisionConstraint >
 TIntrusiveConstraintHandle ()
 
void SetContainer (FPBDConstraintContainer *InContainer)
 
FConstraintGetConstraint ()
 
const FConstraintGetConstraint () const
 
- Public Member Functions inherited from Chaos::FIntrusiveConstraintHandle
 FIntrusiveConstraintHandle ()
 
void SetContainer (FPBDConstraintContainer *InContainer)
 
- Public Member Functions inherited from Chaos::FConstraintHandle
 FConstraintHandle ()
 
 FConstraintHandle (FPBDConstraintContainer *InContainer)
 
virtual ~FConstraintHandle ()
 
virtual bool IsValid () const
 
FPBDConstraintContainerGetContainer ()
 
const FPBDConstraintContainerGetContainer () const
 
bool IsInConstraintGraph () const
 
Private::FPBDIslandConstraintGetConstraintGraphEdge () const
 
void SetConstraintGraphEdge (Private::FPBDIslandConstraint *InEdge)
 
virtual bool WasAwakened () const
 
virtual void SetWasAwakened (const bool bInWasAwakened)
 
int32 GetContainerId () const
 
template<typename T >
T * As ()
 
template<typename T >
const T * As () const
 
template<typename T >
T * AsUnsafe ()
 
template<typename T >
const T * AsUnsafe () const
 
const FConstraintHandleTypeIDGetType () const
 
 UE_DEPRECATED (5.3, "Use GetConstraintGraphEdge") int32 GetConstraintGraphIndex() const
 
 UE_DEPRECATED (5.3, "Not supported") void SetConstraintGraphIndex(const int32 InIndex) const
 

Static Public Member Functions

static CHAOS_API void Make (FGeometryParticleHandle *Particle0, const FImplicitObject *Implicit0, const FPerShapeData *Shape0, const FBVHParticles *Simplicial0, const FRigidTransform3 &ImplicitLocalTransform0, FGeometryParticleHandle *Particle1, const FImplicitObject *Implicit1, const FPerShapeData *Shape1, const FBVHParticles *Simplicial1, const FRigidTransform3 &ImplicitLocalTransform1, const FReal InCullDistance, const bool bInUseManifold, const EContactShapesType ShapesType, FPBDCollisionConstraint &OutConstraint)
 Create a contact constraint Initializes a constraint stored inline in an object. Only intended to be called once right after construction. Does not reinitialize all data so not intended to reset a constraint for reuse with different particles etc.
 
static CHAOS_API FPBDCollisionConstraint MakeTriangle (const FImplicitObject *Implicit0)
 For use by the tri mesh and heighfield collision detection as a temporary measure.
 
static CHAOS_API FPBDCollisionConstraint MakeCopy (const FPBDCollisionConstraint &Source)
 Return a constraint copied from the Source constraint, for use in the Resim Cache or other system.
 
- Static Public Member Functions inherited from Chaos::FPBDCollisionConstraintHandle
static CHAOS_API const FConstraintHandleTypeIDStaticType ()
 
- Static Public Member Functions inherited from Chaos::FIntrusiveConstraintHandle
static const FConstraintHandleTypeIDStaticType ()
 
- Static Public Member Functions inherited from Chaos::FConstraintHandle
static const FConstraintHandleTypeIDStaticType ()
 
static const FConstraintHandleTypeIDInvalidType ()
 

Public Attributes

FVec3f AccumulatedImpulse
 

Static Public Attributes

static constexpr FRealSingle MaxTOI = std::numeric_limits<FRealSingle>::max()
 

Protected Member Functions

 FPBDCollisionConstraint (FGeometryParticleHandle *Particle0, const FImplicitObject *Implicit0, const FPerShapeData *Shape0, const FBVHParticles *Simplicial0, FGeometryParticleHandle *Particle1, const FImplicitObject *Implicit1, const FPerShapeData *Shape1, const FBVHParticles *Simplicial1)
 
CHAOS_API void Setup (const ECollisionCCDType InCCDType, const EContactShapesType InShapesType, const FRigidTransform3 &InImplicitTransform0, const FRigidTransform3 &InImplicitTransform1, const FReal InCullDistance, const bool bInUseManifold)
 
const FPBDCollisionConstraintContainerCookieGetContainerCookie () const
 
FPBDCollisionConstraintContainerCookieGetContainerCookie ()
 
CHAOS_API bool AreMatchingContactPoints (const FContactPoint &A, const FContactPoint &B, FReal &OutScore) const
 
CHAOS_API int32 FindManifoldPoint (const FContactPoint &ContactPoint) const
 
int32 FindSimpleSavedManifoldPoint (const int32 ManifoldPointIndex) const
 
CHAOS_API int32 FindSavedManifoldPoint (const int32 ManifoldPointIndex, int32 *InOutAllowedSavedPointIndices, int32 &InOutNumAllowedSavedPoints) const
 
CHAOS_API void AssignSavedManifoldPoints ()
 
void InitManifoldPoint (const int32 ManifoldPointIndex, const FContactPointf &ContactPoint)
 
int32 AddManifoldPoint (const FContactPointf &ContactPoint)
 
CHAOS_API void UpdateManifoldPointPhi (const int32 ManifoldPointIndex)
 
CHAOS_API void InitMarginsAndTolerances (const EImplicitObjectType ImplicitType0, const EImplicitObjectType ImplicitType1, const FRealSingle Margin0, const FRealSingle Margin1)
 
CHAOS_API void InitCCDThreshold ()
 
CHAOS_API void UpdateMaterialPropertiesImpl ()
 
CHAOS_API void UpdateMassScales ()
 

Friends

class Private::FCollisionConstraintAllocator
 
class Private::FCollisionContextAllocator
 
class FContactPairModifier
 
class FGenericParticlePairMidPhase
 
class FParticlePairMidPhase
 
class FPBDCollisionConstraints
 
class FShapePairParticlePairMidPhase
 
class FSingleShapePairCollisionDetector
 
class FSphereApproximationParticlePairMidPhase
 
class ::FChaosVDDataWrapperUtils
 
CHAOS_API bool ContactConstraintSortPredicate (const FPBDCollisionConstraint &L, const FPBDCollisionConstraint &R)
 

Additional Inherited Members

- Protected Attributes inherited from Chaos::FConstraintHandle
FPBDConstraintContainerConstraintContainer
 
Private::FPBDIslandConstraintGraphEdge
 

Detailed Description

A contact constraint.

A contact constraint represents the non-penetration, friction, and restitution constraints for a single shape pair on a particle pair. I.e., a specific particle-pair may have multiple contact constraints between them if one or boht has multuple collision shapes that overlap the shape(s) of the other body.

Each contact constraint contains a Manifold, which is a set of contact points that approximate the contact patch between the two shapes.

Contact constraints are allocated on the heap (Asee FCollisionConstraintAllocator) and have permanent addresses. They use intrusive handles to reduce unnecessary indirection.

Member Typedef Documentation

◆ FConstraintContainerHandle

Constructor & Destructor Documentation

◆ FPBDCollisionConstraint() [1/2]

Chaos::FPBDCollisionConstraint::FPBDCollisionConstraint ( )

◆ ~FPBDCollisionConstraint()

Chaos::FPBDCollisionConstraint::~FPBDCollisionConstraint ( )
virtual

◆ FPBDCollisionConstraint() [2/2]

Chaos::FPBDCollisionConstraint::FPBDCollisionConstraint ( FGeometryParticleHandle Particle0,
const FImplicitObject Implicit0,
const FPerShapeData Shape0,
const FBVHParticles Simplicial0,
FGeometryParticleHandle Particle1,
const FImplicitObject Implicit1,
const FPerShapeData Shape1,
const FBVHParticles Simplicial1 
)
protected

Member Function Documentation

◆ Activate() [1/2]

void Chaos::FPBDCollisionConstraint::Activate ( )

Called each frame when the constraint is active after primary collision detection (but not per incremental collision detection call if enabled)

◆ Activate() [2/2]

void Chaos::FPBDCollisionConstraint::Activate ( const FReal  Dt)
inline

◆ AddIncrementalManifoldContact()

void Chaos::FPBDCollisionConstraint::AddIncrementalManifoldContact ( const FContactPoint ContactPoint)

◆ AddManifoldPoint()

int32 Chaos::FPBDCollisionConstraint::AddManifoldPoint ( const FContactPointf ContactPoint)
inlineprotected

◆ AddOneshotManifoldContact()

void Chaos::FPBDCollisionConstraint::AddOneshotManifoldContact ( const FContactPointf ContactPoint)
inline

◆ AreMatchingContactPoints()

bool Chaos::FPBDCollisionConstraint::AreMatchingContactPoints ( const FContactPoint A,
const FContactPoint B,
FReal OutScore 
) const
protected

◆ AssignSavedManifoldPoints()

void Chaos::FPBDCollisionConstraint::AssignSavedManifoldPoints ( )
protected

◆ BeginTick()

void Chaos::FPBDCollisionConstraint::BeginTick ( )
inline

◆ CalculateWorldContactLocation()

FVec3 Chaos::FPBDCollisionConstraint::CalculateWorldContactLocation ( ) const

◆ CalculateWorldContactNormal()

FVec3 Chaos::FPBDCollisionConstraint::CalculateWorldContactNormal ( ) const

◆ ClearMaterialProperties()

void Chaos::FPBDCollisionConstraint::ClearMaterialProperties ( )
inline

◆ CorrectManifoldPoints()

void Chaos::FPBDCollisionConstraint::CorrectManifoldPoints ( )

◆ DisableManifoldPoint()

void Chaos::FPBDCollisionConstraint::DisableManifoldPoint ( const int32  DisabledManifoldPointIndex)
inline

◆ FindManifoldPoint()

int32 Chaos::FPBDCollisionConstraint::FindManifoldPoint ( const FContactPoint ContactPoint) const
protected

◆ FindSavedManifoldPoint()

int32 Chaos::FPBDCollisionConstraint::FindSavedManifoldPoint ( const int32  ManifoldPointIndex,
int32 InOutAllowedSavedPointIndices,
int32 InOutNumAllowedSavedPoints 
) const
protected

◆ FindSimpleSavedManifoldPoint()

int32 Chaos::FPBDCollisionConstraint::FindSimpleSavedManifoldPoint ( const int32  ManifoldPointIndex) const
protected

◆ GetBoundsTestFlags()

Private::FImplicitBoundsTestFlags Chaos::FPBDCollisionConstraint::GetBoundsTestFlags ( ) const
inline

◆ GetCanRestoreManifold()

bool Chaos::FPBDCollisionConstraint::GetCanRestoreManifold ( ) const
inline

◆ GetCCDEnabled()

bool Chaos::FPBDCollisionConstraint::GetCCDEnabled ( ) const
inline

Whether CCD is enabled for this collision. This value depends only on the CCD requirements of the two particles. It does not change from tick to tick.

◆ GetCCDEnablePenetration()

FReal Chaos::FPBDCollisionConstraint::GetCCDEnablePenetration ( ) const
inline

If CCD is enabled, contacts deeper than this will be handled by CCD.

◆ GetCCDSweepEnabled()

bool Chaos::FPBDCollisionConstraint::GetCCDSweepEnabled ( ) const
inline

For CCD constraints, a transient flag (reset every frame) that is used to both enable/disable CCD sweeps for the frame, and to report whether the sweep was run and the results retained. It will be set to false if the bodies are moving less than the CCD threshold this tick.

If this is true in a collision callback then: 1) a CCD sweep was performed; 2) a CCD impact was detected; and 3) the collision is being treated as a CCD contact. The bodies will be moved back to first CCD contact.

NOTE: If a sweep is performed and a hit detected, but the resultant contact is shallow enough to be handled by the standard collision solver path, this flag is set to false and no rollback will be performed.

◆ GetCCDTargetPenetration()

FReal Chaos::FPBDCollisionConstraint::GetCCDTargetPenetration ( ) const
inline

If CCD is enabled and processed the contact, CCD resolution leaves up to this much penetration.

◆ GetCCDTimeOfImpact()

FReal Chaos::FPBDCollisionConstraint::GetCCDTimeOfImpact ( ) const
inline

Time of impact from CCD sweep test if CCD is activate.Otherwise undefined.

◆ GetClosestManifoldPoint()

const FManifoldPoint * Chaos::FPBDCollisionConstraint::GetClosestManifoldPoint ( ) const
inline

◆ GetCollisionMargin0()

const FReal Chaos::FPBDCollisionConstraint::GetCollisionMargin0 ( ) const
inline

◆ GetCollisionMargin1()

const FReal Chaos::FPBDCollisionConstraint::GetCollisionMargin1 ( ) const
inline

◆ GetCollisionMaterial()

const FPBDCollisionConstraintMaterial & Chaos::FPBDCollisionConstraint::GetCollisionMaterial ( ) const
inline

◆ GetCollisionParticles()

const FBVHParticles * Chaos::FPBDCollisionConstraint::GetCollisionParticles ( const int32  ParticleIndex) const
inline

◆ GetCollisionParticles0()

const FBVHParticles * Chaos::FPBDCollisionConstraint::GetCollisionParticles0 ( ) const
inline

◆ GetCollisionParticles1()

const FBVHParticles * Chaos::FPBDCollisionConstraint::GetCollisionParticles1 ( ) const
inline

◆ GetCollisionRadius0()

const FReal Chaos::FPBDCollisionConstraint::GetCollisionRadius0 ( ) const
inline

◆ GetCollisionRadius1()

const FReal Chaos::FPBDCollisionConstraint::GetCollisionRadius1 ( ) const
inline

◆ GetCollisionSortKey()

Private::FCollisionSortKey Chaos::FPBDCollisionConstraint::GetCollisionSortKey ( ) const
inline

A key that uniquely identifies a collision constraint and provides a good sort order for the solver

◆ GetConstraintDirection()

ECollisionConstraintDirection Chaos::FPBDCollisionConstraint::GetConstraintDirection ( const FReal  Dt) const

Determine the constraint direction based on Normal and Phi. This function assumes that the constraint is update-to-date.

◆ GetConstraintHandle() [1/2]

FPBDCollisionConstraintHandle * Chaos::FPBDCollisionConstraint::GetConstraintHandle ( )
inline

◆ GetConstraintHandle() [2/2]

const FPBDCollisionConstraintHandle * Chaos::FPBDCollisionConstraint::GetConstraintHandle ( ) const
inline

◆ GetContainerCookie() [1/2]

FPBDCollisionConstraintContainerCookie & Chaos::FPBDCollisionConstraint::GetContainerCookie ( )
inlineprotected

◆ GetContainerCookie() [2/2]

const FPBDCollisionConstraintContainerCookie & Chaos::FPBDCollisionConstraint::GetContainerCookie ( ) const
inlineprotected

◆ GetCullDistance()

FReal Chaos::FPBDCollisionConstraint::GetCullDistance ( ) const
inline

◆ GetCullDistancef()

FRealSingle Chaos::FPBDCollisionConstraint::GetCullDistancef ( ) const
inline

◆ GetDisabled()

bool Chaos::FPBDCollisionConstraint::GetDisabled ( ) const
inline

◆ GetDynamicFriction()

FReal Chaos::FPBDCollisionConstraint::GetDynamicFriction ( ) const
inline

◆ GetGJKWarmStartData()

FGJKSimplexData & Chaos::FPBDCollisionConstraint::GetGJKWarmStartData ( )
inline

◆ GetImplicit()

const FImplicitObject * Chaos::FPBDCollisionConstraint::GetImplicit ( const int32  ParticleIndex) const
inline

◆ GetImplicit0()

const FImplicitObject * Chaos::FPBDCollisionConstraint::GetImplicit0 ( ) const
inline

◆ GetImplicit1()

const FImplicitObject * Chaos::FPBDCollisionConstraint::GetImplicit1 ( ) const
inline

◆ GetInitialOverlapDepenetrationVelocity()

FRealSingle Chaos::FPBDCollisionConstraint::GetInitialOverlapDepenetrationVelocity ( ) const
inline

◆ GetInvInertiaScale0()

FReal Chaos::FPBDCollisionConstraint::GetInvInertiaScale0 ( ) const
inline

◆ GetInvInertiaScale1()

FReal Chaos::FPBDCollisionConstraint::GetInvInertiaScale1 ( ) const
inline

◆ GetInvMassScale0()

FReal Chaos::FPBDCollisionConstraint::GetInvMassScale0 ( ) const
inline

◆ GetInvMassScale1()

FReal Chaos::FPBDCollisionConstraint::GetInvMassScale1 ( ) const
inline

◆ GetIsOneWayInteraction()

bool Chaos::FPBDCollisionConstraint::GetIsOneWayInteraction ( ) const
inline

◆ GetIsProbe()

bool Chaos::FPBDCollisionConstraint::GetIsProbe ( ) const
inline

◆ GetManifoldPoint() [1/2]

FManifoldPoint & Chaos::FPBDCollisionConstraint::GetManifoldPoint ( const int32  PointIndex)
inline

◆ GetManifoldPoint() [2/2]

const FManifoldPoint & Chaos::FPBDCollisionConstraint::GetManifoldPoint ( const int32  PointIndex) const
inline

◆ GetManifoldPointResult()

const FManifoldPointResult & Chaos::FPBDCollisionConstraint::GetManifoldPointResult ( const int32  PointIndex) const
inline

◆ GetManifoldPoints() [1/2]

TArrayView< FManifoldPoint > Chaos::FPBDCollisionConstraint::GetManifoldPoints ( )
inline

◆ GetManifoldPoints() [2/2]

TArrayView< const FManifoldPoint > Chaos::FPBDCollisionConstraint::GetManifoldPoints ( ) const
inline

◆ GetMinFrictionPushOut()

FReal Chaos::FPBDCollisionConstraint::GetMinFrictionPushOut ( ) const
inline

◆ GetMinInitialPhi()

FRealSingle Chaos::FPBDCollisionConstraint::GetMinInitialPhi ( ) const
inline

◆ GetNetLinearImpulse()

Chaos::FVec3f Chaos::FPBDCollisionConstraint::GetNetLinearImpulse ( ) const
finaloverridevirtual

Reimplemented from Chaos::FConstraintHandle.

◆ GetParticle()

FGeometryParticleHandle * Chaos::FPBDCollisionConstraint::GetParticle ( const int32  ParticleIndex) const
inline

◆ GetParticle0()

FGeometryParticleHandle * Chaos::FPBDCollisionConstraint::GetParticle0 ( ) const
inline

◆ GetParticle1()

FGeometryParticleHandle * Chaos::FPBDCollisionConstraint::GetParticle1 ( ) const
inline

◆ GetParticlePairKey()

Private::FCollisionParticlePairKey Chaos::FPBDCollisionConstraint::GetParticlePairKey ( ) const
inline

A key used to uniquely identify the constraint (it is based on the two particle IDs)

◆ GetPhi()

FReal Chaos::FPBDCollisionConstraint::GetPhi ( ) const
inline

◆ GetRelativeMovement()

FVec3f Chaos::FPBDCollisionConstraint::GetRelativeMovement ( ) const
inline

◆ GetRestitution()

FReal Chaos::FPBDCollisionConstraint::GetRestitution ( ) const
inline

◆ GetRestitutionThreshold()

FReal Chaos::FPBDCollisionConstraint::GetRestitutionThreshold ( ) const
inline

◆ GetSavedManifoldPoint()

const FSavedManifoldPoint & Chaos::FPBDCollisionConstraint::GetSavedManifoldPoint ( const int32  PointIndex) const
inline

◆ GetShape()

const FShapeInstance * Chaos::FPBDCollisionConstraint::GetShape ( const int32  ParticleIndex) const
inline

◆ GetShape0()

const FShapeInstance * Chaos::FPBDCollisionConstraint::GetShape0 ( ) const
inline

◆ GetShape1()

const FShapeInstance * Chaos::FPBDCollisionConstraint::GetShape1 ( ) const
inline

◆ GetShapeRelativeTransform()

const FRigidTransform3 & Chaos::FPBDCollisionConstraint::GetShapeRelativeTransform ( const int32  ParticleIndex) const
inline

◆ GetShapeRelativeTransform0()

const FRigidTransform3 & Chaos::FPBDCollisionConstraint::GetShapeRelativeTransform0 ( ) const
inline

◆ GetShapeRelativeTransform1()

const FRigidTransform3 & Chaos::FPBDCollisionConstraint::GetShapeRelativeTransform1 ( ) const
inline

◆ GetShapesType()

EContactShapesType Chaos::FPBDCollisionConstraint::GetShapesType ( ) const
inline

◆ GetShapeWorldTransform()

const FRigidTransform3 & Chaos::FPBDCollisionConstraint::GetShapeWorldTransform ( const int32  ParticleIndex) const
inline

◆ GetShapeWorldTransform0()

const FRigidTransform3 & Chaos::FPBDCollisionConstraint::GetShapeWorldTransform0 ( ) const
inline

◆ GetShapeWorldTransform1()

const FRigidTransform3 & Chaos::FPBDCollisionConstraint::GetShapeWorldTransform1 ( ) const
inline

◆ GetSoftSeparation()

FRealSingle Chaos::FPBDCollisionConstraint::GetSoftSeparation ( ) const
inline

◆ GetSolverBody0()

const FSolverBody * Chaos::FPBDCollisionConstraint::GetSolverBody0 ( ) const
inline

◆ GetSolverBody1()

const FSolverBody * Chaos::FPBDCollisionConstraint::GetSolverBody1 ( ) const
inline

◆ GetStaticFriction()

FReal Chaos::FPBDCollisionConstraint::GetStaticFriction ( ) const
inline

◆ GetStiffness()

FReal Chaos::FPBDCollisionConstraint::GetStiffness ( ) const
inline

◆ GetUseIncrementalCollisionDetection()

bool Chaos::FPBDCollisionConstraint::GetUseIncrementalCollisionDetection ( ) const
inline

◆ GetUseIncrementalManifold()

bool Chaos::FPBDCollisionConstraint::GetUseIncrementalManifold ( ) const
inline

◆ GetUseManifold()

bool Chaos::FPBDCollisionConstraint::GetUseManifold ( ) const
inline

◆ HasQuadraticShape()

const bool Chaos::FPBDCollisionConstraint::HasQuadraticShape ( ) const
inline

◆ InitCCDThreshold()

void Chaos::FPBDCollisionConstraint::InitCCDThreshold ( )
protected

◆ InitManifoldPoint()

void Chaos::FPBDCollisionConstraint::InitManifoldPoint ( const int32  ManifoldPointIndex,
const FContactPointf ContactPoint 
)
inlineprotected

◆ InitMarginsAndTolerances()

void Chaos::FPBDCollisionConstraint::InitMarginsAndTolerances ( const EImplicitObjectType  ImplicitType0,
const EImplicitObjectType  ImplicitType1,
const FRealSingle  Margin0,
const FRealSingle  Margin1 
)
protected

◆ IsCurrent()

bool Chaos::FPBDCollisionConstraint::IsCurrent ( ) const
inline

◆ IsInitialContact()

bool Chaos::FPBDCollisionConstraint::IsInitialContact ( ) const
inline

◆ IsManifoldPointActive()

bool Chaos::FPBDCollisionConstraint::IsManifoldPointActive ( const int32  PointIndex) const
inline

◆ IsQuadratic0()

const bool Chaos::FPBDCollisionConstraint::IsQuadratic0 ( ) const
inline

◆ IsQuadratic1()

const bool Chaos::FPBDCollisionConstraint::IsQuadratic1 ( ) const
inline

◆ IsSleeping()

bool Chaos::FPBDCollisionConstraint::IsSleeping ( ) const
finaloverridevirtual

Reimplemented from Chaos::FConstraintHandle.

◆ IsSoftContact()

bool Chaos::FPBDCollisionConstraint::IsSoftContact ( ) const
inline

◆ Make()

void Chaos::FPBDCollisionConstraint::Make ( FGeometryParticleHandle Particle0,
const FImplicitObject Implicit0,
const FPerShapeData Shape0,
const FBVHParticles Simplicial0,
const FRigidTransform3 ImplicitLocalTransform0,
FGeometryParticleHandle Particle1,
const FImplicitObject Implicit1,
const FPerShapeData Shape1,
const FBVHParticles Simplicial1,
const FRigidTransform3 ImplicitLocalTransform1,
const FReal  InCullDistance,
const bool  bInUseManifold,
const EContactShapesType  ShapesType,
FPBDCollisionConstraint OutConstraint 
)
static

Create a contact constraint Initializes a constraint stored inline in an object. Only intended to be called once right after construction. Does not reinitialize all data so not intended to reset a constraint for reuse with different particles etc.

◆ MakeCopy()

FPBDCollisionConstraint Chaos::FPBDCollisionConstraint::MakeCopy ( const FPBDCollisionConstraint Source)
static

Return a constraint copied from the Source constraint, for use in the Resim Cache or other system.

Note
Unlike the other factory method, this version returns a constraint by value for emplacing into an array (ther others are by pointer)

◆ MakeTriangle()

FPBDCollisionConstraint Chaos::FPBDCollisionConstraint::MakeTriangle ( const FImplicitObject Implicit0)
static

For use by the tri mesh and heighfield collision detection as a temporary measure.

See also
FHeightField::ContactManifoldImp, FTriangleMeshImplicitObject::ContactManifoldImp

◆ NumEnabledManifoldPoints()

int32 Chaos::FPBDCollisionConstraint::NumEnabledManifoldPoints ( ) const
inline

◆ NumManifoldPoints()

int32 Chaos::FPBDCollisionConstraint::NumManifoldPoints ( ) const
inline

◆ NumSavedManifoldPoints()

int32 Chaos::FPBDCollisionConstraint::NumSavedManifoldPoints ( ) const
inline

◆ ResetActiveManifoldContacts()

void Chaos::FPBDCollisionConstraint::ResetActiveManifoldContacts ( )

◆ ResetCCDTimeOfImpact()

void Chaos::FPBDCollisionConstraint::ResetCCDTimeOfImpact ( )
inline

Initialize the CCD TOI to the highest possible value

◆ ResetManifold()

void Chaos::FPBDCollisionConstraint::ResetManifold ( )

Clear the current and previous manifolds.

◆ ResetModifications()

void Chaos::FPBDCollisionConstraint::ResetModifications ( )
inline

Reset the material properties to those from the shape materials. Called each frame to reset contact modifications to the material.

◆ ResetPhi()

void Chaos::FPBDCollisionConstraint::ResetPhi ( FReal  InPhi)
inline

◆ ResetSavedManifoldPoints()

void Chaos::FPBDCollisionConstraint::ResetSavedManifoldPoints ( )
inline

Clear the saved manifold points. This effectively resets friction anchors.

◆ ResetSolverResults()

FORCEINLINE void Chaos::FPBDCollisionConstraint::ResetSolverResults ( )
inline

◆ RestoreFrom()

void Chaos::FPBDCollisionConstraint::RestoreFrom ( const FPBDCollisionConstraint Source)

Restore the properties of a collision from the properties of another. Used by the rewind/resim system when restoring a collision constraint that was saved (and called MakeCopy). This takes care not to overwrite any data maintained for the use of other systems (the ContainerCookie, Graph data, etc)

◆ SetCCDEnabled()

void Chaos::FPBDCollisionConstraint::SetCCDEnabled ( const bool  bCCDEnabled)
inline

Enable or disable CCD for this constraint. Called once right after the constraint is created.

◆ SetCCDResults()

void Chaos::FPBDCollisionConstraint::SetCCDResults ( const FVec3 InNetImpulse)
inline

Store the results of CCD contact resolution, if active.

◆ SetCCDSweepEnabled()

void Chaos::FPBDCollisionConstraint::SetCCDSweepEnabled ( const bool  bCCDSweepEnabled)
inline

For CCD constraints, a transient flag (reset every frame) that is used to both enable/disable CCD sweeps for the frame, and to retport whether the sweep was run and the results retained. See GetCCDSweepEnabled().

◆ SetCCDTimeOfImpact()

void Chaos::FPBDCollisionConstraint::SetCCDTimeOfImpact ( const FReal  TOI)
inline

Set the CCD TOI from the collision detection sweep.

◆ SetCollisionSortKey()

void Chaos::FPBDCollisionConstraint::SetCollisionSortKey ( const Private::FCollisionSortKey InCollisionSortKey)
inline

◆ SetCullDistance()

void Chaos::FPBDCollisionConstraint::SetCullDistance ( FReal  InCullDistance)
inline

◆ SetDisabled()

void Chaos::FPBDCollisionConstraint::SetDisabled ( bool  bInDisabled)
inline

◆ SetDynamicFriction()

void Chaos::FPBDCollisionConstraint::SetDynamicFriction ( const FReal  InDynamicFriction)
inline

◆ SetInvInertiaScale0()

void Chaos::FPBDCollisionConstraint::SetInvInertiaScale0 ( const FReal  InInvInertiaScale)
inline

◆ SetInvInertiaScale1()

void Chaos::FPBDCollisionConstraint::SetInvInertiaScale1 ( const FReal  InInvInertiaScale)
inline

◆ SetInvMassScale0()

void Chaos::FPBDCollisionConstraint::SetInvMassScale0 ( const FReal  InInvMassScale)
inline

◆ SetInvMassScale1()

void Chaos::FPBDCollisionConstraint::SetInvMassScale1 ( const FReal  InInvMassScale)
inline

◆ SetIsInitialContact()

void Chaos::FPBDCollisionConstraint::SetIsInitialContact ( const bool  bInIsInitialContact)
inline

◆ SetIsProbe()

void Chaos::FPBDCollisionConstraint::SetIsProbe ( bool  bInProbe)
inline

◆ SetIsSleeping()

void Chaos::FPBDCollisionConstraint::SetIsSleeping ( const bool  bInIsSleeping)
finaloverridevirtual

Reimplemented from Chaos::FConstraintHandle.

◆ SetLastShapeWorldTransforms()

void Chaos::FPBDCollisionConstraint::SetLastShapeWorldTransforms ( const FRigidTransform3 InShapeWorldTransform0,
const FRigidTransform3 InShapeWorldTransform1 
)
inline

◆ SetMinFrictionPushOut()

void Chaos::FPBDCollisionConstraint::SetMinFrictionPushOut ( const FReal  InMinFrictionPushOut)
inline

◆ SetModifierApplied()

void Chaos::FPBDCollisionConstraint::SetModifierApplied ( )
inline

◆ SetOneShotManifoldContacts()

void Chaos::FPBDCollisionConstraint::SetOneShotManifoldContacts ( const TArrayView< const FContactPoint > &  ContactPoints)
inline

Replace the current manifold points with the input. The input array should contain no more than MaxManifoldPoints contacts (any extra will be ignored). We assume that all input contacts have been initialized and will not return false from IsSet(). Ignores contacts deeper than the CullDistance for this constraint.

◆ SetRelativeMovement()

void Chaos::FPBDCollisionConstraint::SetRelativeMovement ( const FVec3f InDelta)
inline

◆ SetRestitution()

void Chaos::FPBDCollisionConstraint::SetRestitution ( const FReal  InRestitution)
inline

◆ SetRestitutionThreshold()

void Chaos::FPBDCollisionConstraint::SetRestitutionThreshold ( const FReal  InRestitutionThreshold)
inline

◆ SetShapeWorldTransforms()

void Chaos::FPBDCollisionConstraint::SetShapeWorldTransforms ( const FRigidTransform3 InShapeWorldTransform0,
const FRigidTransform3 InShapeWorldTransform1 
)
inline

◆ SetSoftSeparation()

void Chaos::FPBDCollisionConstraint::SetSoftSeparation ( const FReal  InSoftSeparation)
inline

◆ SetSolverBodies()

void Chaos::FPBDCollisionConstraint::SetSolverBodies ( const FSolverBody InSolverBody0,
const FSolverBody InSolverBody1 
)
inline

◆ SetSolverResults()

FORCEINLINE void Chaos::FPBDCollisionConstraint::SetSolverResults ( const int32  ManifoldPointIndex,
const FVec3f NetPushOut,
const FVec3f NetImpulse,
const FRealSingle  StaticFrictionRatio,
const FRealSingle  Dt 
)
inline

Store the data from the solver that is retained between ticks for the specified manifold point or used by dependent systems (plasticity, breaking, etc.)

◆ SetStaticFriction()

void Chaos::FPBDCollisionConstraint::SetStaticFriction ( const FReal  InStaticFriction)
inline

◆ SetStiffness()

void Chaos::FPBDCollisionConstraint::SetStiffness ( FReal  InStiffness)
inline

◆ Setup()

void Chaos::FPBDCollisionConstraint::Setup ( const ECollisionCCDType  InCCDType,
const EContactShapesType  InShapesType,
const FRigidTransform3 InImplicitTransform0,
const FRigidTransform3 InImplicitTransform1,
const FReal  InCullDistance,
const bool  bInUseManifold 
)
protected

◆ SupportsPartialIslandSleeping()

virtual bool Chaos::FPBDCollisionConstraint::SupportsPartialIslandSleeping ( ) const
inlinefinaloverridevirtual

Reimplemented from Chaos::FConstraintHandle.

◆ SupportsSleeping()

virtual bool Chaos::FPBDCollisionConstraint::SupportsSleeping ( ) const
inlinefinaloverridevirtual

Reimplemented from Chaos::FConstraintHandle.

◆ ToString()

FString Chaos::FPBDCollisionConstraint::ToString ( ) const

◆ TryAddManifoldContact()

bool Chaos::FPBDCollisionConstraint::TryAddManifoldContact ( const FContactPoint ContactPoint)

◆ TryInsertManifoldContact()

bool Chaos::FPBDCollisionConstraint::TryInsertManifoldContact ( const FContactPoint ContactPoint)

◆ TryRestoreManifold()

bool Chaos::FPBDCollisionConstraint::TryRestoreManifold ( )

◆ UpdateAndTryRestoreManifold()

bool Chaos::FPBDCollisionConstraint::UpdateAndTryRestoreManifold ( )
inline

◆ UpdateManifoldContacts()

void Chaos::FPBDCollisionConstraint::UpdateManifoldContacts ( )

◆ UpdateManifoldPointPhi()

void Chaos::FPBDCollisionConstraint::UpdateManifoldPointPhi ( const int32  ManifoldPointIndex)
protected

◆ UpdateMassScales()

void Chaos::FPBDCollisionConstraint::UpdateMassScales ( )
protected

◆ UpdateMaterialProperties()

void Chaos::FPBDCollisionConstraint::UpdateMaterialProperties ( )
inline

◆ UpdateMaterialPropertiesImpl()

void Chaos::FPBDCollisionConstraint::UpdateMaterialPropertiesImpl ( )
protected

◆ UpdateParticleTransform()

void Chaos::FPBDCollisionConstraint::UpdateParticleTransform ( FGeometryParticleHandle InParticle)

◆ UsePerContactInitialPhi()

bool Chaos::FPBDCollisionConstraint::UsePerContactInitialPhi ( ) const
inline

◆ WasManifoldRestored()

bool Chaos::FPBDCollisionConstraint::WasManifoldRestored ( ) const
inline

Whether this constraint was fully restored from a previous tick, and the manifold should be reused as-is.

Friends And Related Symbol Documentation

◆ ::FChaosVDDataWrapperUtils

◆ ContactConstraintSortPredicate

CHAOS_API bool ContactConstraintSortPredicate ( const FPBDCollisionConstraint L,
const FPBDCollisionConstraint R 
)
friend

◆ FContactPairModifier

◆ FGenericParticlePairMidPhase

◆ FParticlePairMidPhase

◆ FPBDCollisionConstraints

◆ FShapePairParticlePairMidPhase

◆ FSingleShapePairCollisionDetector

◆ FSphereApproximationParticlePairMidPhase

◆ Private::FCollisionConstraintAllocator

◆ Private::FCollisionContextAllocator

Member Data Documentation

◆ AccumulatedImpulse

FVec3f Chaos::FPBDCollisionConstraint::AccumulatedImpulse

◆ MaxTOI

constexpr FRealSingle Chaos::FPBDCollisionConstraint::MaxTOI = std::numeric_limits<FRealSingle>::max()
staticconstexpr

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