13 class FPBDCollisionConstraint;
17 class FPBDCollisionSolverJacobi;
67 const int32 ManifoldPointIndex,
93 const int32 ManifoldPointIndex,
112 const int32 ManifoldPointIndex,
163 const int32 ManifoldPointIndex,
209 const int32 ManifoldPointIndex,
230 const int32 ManifoldPointIndex,
245 const int32 ManifoldPointIndex,
283 const int32 ManifoldPointIndex,
317 ManifoldPoints[ManifoldPointIndex].NetPushOutTangentU = NetPushOutTangentU;
318 ManifoldPoints[ManifoldPointIndex].NetPushOutTangentV = NetPushOutTangentV;
319 ManifoldPoints[ManifoldPointIndex].StaticFrictionRatio = FrictionMultiplier;
410 bApplyFriction[ManifoldPointIndex] =
true;
426 if (bApplyFriction[ManifoldPointIndex])
428 FSolverReal ContactDeltaTangentU, ContactDeltaTangentV;
480 const int32 ManifoldPointIndex,
495 const int32 ManifoldPointIndex,
676 State.SolverBodies[0].Reset();
677 State.SolverBodies[1].Reset();
683 State.ManifoldPoints.Reset();
688 return State.ManifoldPoints.AddManifoldPoint();
693 return State.StaticFriction;
698 return State.DynamicFriction;
703 return State.VelocityFriction;
726 return State.ManifoldPoints.NumManifoldPoints();
731 return State.ManifoldPoints.GetNetPushOut(ManifoldPointIndex);
736 return State.ManifoldPoints.GetNetImpulse(ManifoldPointIndex);
741 return State.ManifoldPoints.GetStaticFrictionRatio(ManifoldPointIndex);
748 const int32 ManifoldPointIndex,
775 const int32 ManifoldPointIndex,
786 State.ManifoldPoints.SetWorldContact(
806 State.ManifoldPoints.InitContact(
808 State.SolverBodies[0],
809 State.SolverBodies[1]);
853 State.ManifoldPoints.SolvePositionNoFriction(
870 State.ManifoldPoints.SolvePositionWithFriction(
873 State.StaticFriction,
874 State.DynamicFriction,
894 State.ManifoldPoints.SolveVelocity(
919 SolverBodies[0].Init();
920 SolverBodies[1].Init();
923 VelocityFriction = 0;
925 ManifoldPoints.Reset();
942 FPBDCollisionSolverJacobiManifoldPoints ManifoldPoints;
#define FORCEINLINE_DEBUGGABLE
Definition CoreMiscDefines.h:74
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UE_SMALL_NUMBER
Definition UnrealMathUtility.h:130
#define UE_KINDA_SMALL_NUMBER
Definition UnrealMathUtility.h:131
Definition SolverBody.h:543
bool IsDynamic() const
Whether the body is dynamic (i.e., has a finite mass) after scaling is applied.
Definition SolverBody.h:622
void ApplyPositionDelta(const FSolverVec3 &DP)
Definition SolverBody.h:649
const FSolverVec3 & DP() const
Definition SolverBody.h:641
FSolverBody & SolverBody()
The decorated SolverBody.
Definition SolverBody.h:582
FSolverReal InvM() const
The net scaled inverse mass.
Definition SolverBody.h:607
void ApplyVelocityDelta(const FSolverVec3 &DV, const FSolverVec3 &DW)
Definition SolverBody.h:653
FSolverMatrix33 InvI() const
The net scaled inverse inertia.
Definition SolverBody.h:612
const FSolverVec3 & DQ() const
Definition SolverBody.h:642
void ApplyRotationDelta(const FSolverVec3 &DR)
Definition SolverBody.h:650
const FSolverVec3 & V() const
Definition SolverBody.h:638
const FSolverVec3 & W() const
Definition SolverBody.h:639
Definition SolverBody.h:99
Definition PBDCollisionSolverJacobi.h:959
static void SolveVelocity(const TArrayView< FPBDCollisionSolverJacobi > &CollisionSolvers, const FSolverReal Dt, const bool bApplyDynamicFriction)
Definition PBDCollisionSolverJacobi.cpp:112
static void SolvePositionNoFriction(const TArrayView< FPBDCollisionSolverJacobi > &CollisionSolvers, const FSolverReal Dt, const FSolverReal MaxPushOut)
Definition PBDCollisionSolverJacobi.cpp:94
static void SolvePositionWithFriction(const TArrayView< FPBDCollisionSolverJacobi > &CollisionSolvers, const FSolverReal Dt, const FSolverReal MaxPushOut)
Definition PBDCollisionSolverJacobi.cpp:104
static void CheckISPC()
Definition PBDCollisionSolverJacobi.cpp:120
A set of 4 manifold points in a FPBDCollisionSolver.
Definition PBDCollisionSolverJacobi.h:47
FORCEINLINE_DEBUGGABLE void CalculateContactVelocityErrorNormal(const int32 ManifoldPointIndex, const FConstraintSolverBody &Body0, const FConstraintSolverBody &Body1, FSolverReal &OutContactVelocityDeltaNormal) const
Calculate the velocity error at the current transforms.
Definition PBDCollisionSolverJacobi.h:479
FORCEINLINE_DEBUGGABLE void SolvePositionNoFriction(const FSolverReal Stiffness, const FSolverReal MaxPushOut, FConstraintSolverBody &Body0, FConstraintSolverBody &Body1)
Definition PBDCollisionSolverJacobi.h:324
FORCEINLINE_DEBUGGABLE void SolveVelocity(const FSolverReal Stiffness, const FSolverReal Dt, const bool bApplyDynamicFriction, FConstraintSolverBody &Body0, FConstraintSolverBody &Body1)
Definition PBDCollisionSolverJacobi.h:517
static const int32 MaxManifoldPoints
Definition PBDCollisionSolverJacobi.h:49
FORCEINLINE_DEBUGGABLE bool SolvePositionWithFriction(const FSolverReal Stiffness, const FSolverReal Dt, const FSolverReal StaticFriction, const FSolverReal DynamicFriction, const FSolverReal MaxPushOut, FConstraintSolverBody &Body0, FConstraintSolverBody &Body1)
Definition PBDCollisionSolverJacobi.h:366
FORCEINLINE_DEBUGGABLE void CalculatePositionCorrectionNormal(const int32 ManifoldPointIndex, const FSolverReal Stiffness, FSolverReal ContactDeltaNormal, FConstraintSolverBody &Body0, FConstraintSolverBody &Body1, FSolverVec3 &InOutDX0, FSolverVec3 &InOutDR0, FSolverVec3 &InOutDX1, FSolverVec3 &InOutDR1)
Definition PBDCollisionSolverJacobi.h:244
FORCEINLINE_DEBUGGABLE void InitContact(const int32 ManifoldPointIndex, const FConstraintSolverBody &Body0, const FConstraintSolverBody &Body1)
Initialize the geometric data for the contact.
Definition PBDCollisionSolverJacobi.h:92
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.
Definition PBDCollisionSolverJacobi.h:162
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 p...
Definition PBDCollisionSolverJacobi.h:579
void Reset()
Definition PBDCollisionSolverJacobi.h:51
FORCEINLINE_DEBUGGABLE FSolverVec3 GetNetPushOut(const int32 ManifoldPointIndex) const
Definition PBDCollisionSolverJacobi.h:185
FORCEINLINE_DEBUGGABLE void ApplyFrictionCone(const int32 ManifoldPointIndex, const FSolverReal StaticFriction, const FSolverReal DynamicFriction, const FSolverReal MaxFrictionPushOut, FSolverReal &InOutPushOutTangentU, FSolverReal &InOutPushOutTangentV)
Definition PBDCollisionSolverJacobi.h:282
void UpdateMass(const int32 ManifoldPointIndex, const FConstraintSolverBody &Body0, const FConstraintSolverBody &Body1)
Update the cached mass properties based on the current body transforms.
Definition PBDCollisionSolverJacobi.h:111
FORCEINLINE_DEBUGGABLE int32 AddManifoldPoint()
Definition PBDCollisionSolverJacobi.h:61
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)
Definition PBDCollisionSolverJacobi.h:66
FORCEINLINE_DEBUGGABLE int32 NumManifoldPoints() const
Definition PBDCollisionSolverJacobi.h:56
TCArray< FManifoldPoint, MaxManifoldPoints > ManifoldPoints
Definition PBDCollisionSolverJacobi.h:631
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
Definition PBDCollisionSolverJacobi.h:494
FORCEINLINE_DEBUGGABLE void CalculateContactPositionErrorTangential(const int32 ManifoldPointIndex, const FConstraintSolverBody &Body0, const FConstraintSolverBody &Body1, FSolverReal &OutContactDeltaTangentU, FSolverReal &OutContactDeltaTangentV) const
Definition PBDCollisionSolverJacobi.h:229
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.
Definition PBDCollisionSolverJacobi.h:208
FORCEINLINE_DEBUGGABLE FSolverReal GetStaticFrictionRatio(const int32 ManifoldPointIndex) const
Definition PBDCollisionSolverJacobi.h:199
FORCEINLINE_DEBUGGABLE FSolverVec3 GetNetImpulse(const int32 ManifoldPointIndex) const
Definition PBDCollisionSolverJacobi.h:192
Definition PBDCollisionSolverJacobi.h:651
FORCEINLINE_DEBUGGABLE const FConstraintSolverBody & SolverBody0() const
Definition PBDCollisionSolverJacobi.h:817
FORCEINLINE_DEBUGGABLE FConstraintSolverBody & SolverBody1()
Get the second (decorated) solver body The decorator add a possible mass scale.
Definition PBDCollisionSolverJacobi.h:823
FORCEINLINE_DEBUGGABLE FSolverReal GetStaticFrictionRatio(const int32 ManifoldPointIndex) const
Definition PBDCollisionSolverJacobi.h:739
FORCEINLINE_DEBUGGABLE FConstraintSolverBody & SolverBody0()
Get the first (decorated) solver body The decorator add a possible mass scale.
Definition PBDCollisionSolverJacobi.h:816
FORCEINLINE_DEBUGGABLE void ResetManifold()
Definition PBDCollisionSolverJacobi.h:681
FORCEINLINE_DEBUGGABLE FSolverVec3 GetNetImpulse(const int32 ManifoldPointIndex) const
Definition PBDCollisionSolverJacobi.h:734
FORCEINLINE_DEBUGGABLE int32 NumManifoldPoints() const
Definition PBDCollisionSolverJacobi.h:724
FORCEINLINE_DEBUGGABLE FSolverVec3 GetNetPushOut(const int32 ManifoldPointIndex) const
Definition PBDCollisionSolverJacobi.h:729
FORCEINLINE_DEBUGGABLE const FConstraintSolverBody & SolverBody1() const
Definition PBDCollisionSolverJacobi.h:824
void EnablePositionShockPropagation()
Set up the mass scaling for shock propagation, using the position-phase mass scale.
Definition PBDCollisionSolverJacobi.cpp:33
FORCEINLINE_DEBUGGABLE bool SolveVelocity(const FSolverReal Dt, const bool bApplyDynamicFriction)
Calculate and apply the velocity correction for this iteration.
Definition PBDCollisionSolverJacobi.h:887
static FPBDCollisionSolverJacobi MakeUninitialized()
Definition PBDCollisionSolverJacobi.h:665
static const int32 MaxPointsPerConstraint
Definition PBDCollisionSolverJacobi.h:654
FORCEINLINE_DEBUGGABLE void SetStiffness(const FSolverReal InStiffness)
Definition PBDCollisionSolverJacobi.h:713
void DisableShockPropagation()
Disable mass scaling.
Definition PBDCollisionSolverJacobi.cpp:43
FORCEINLINE_DEBUGGABLE void SetFriction(const FSolverReal InStaticFriction, const FSolverReal InDynamicFriction, const FSolverReal InVelocityFriction)
Definition PBDCollisionSolverJacobi.h:706
FPBDCollisionSolverJacobi()
Definition PBDCollisionSolverJacobi.h:671
FORCEINLINE_DEBUGGABLE void SetSolverBodies(FSolverBody &SolverBody0, FSolverBody &SolverBody1)
Definition PBDCollisionSolverJacobi.h:718
static const int32 MaxConstrainedBodies
Definition PBDCollisionSolverJacobi.h:653
FORCEINLINE_DEBUGGABLE bool SolvePositionNoFriction(const FSolverReal Dt, const FSolverReal MaxPushOut)
Calculate and apply the position correction for this iteration.
Definition PBDCollisionSolverJacobi.h:845
FORCEINLINE_DEBUGGABLE void FinalizeManifoldPoint(const int32 ManifoldPointIndex)
Definition PBDCollisionSolverJacobi.h:804
static FPBDCollisionSolverJacobi MakeInitialized()
Definition PBDCollisionSolverJacobi.h:657
FORCEINLINE_DEBUGGABLE void SetManifoldPoint(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)
Definition PBDCollisionSolverJacobi.h:747
FORCEINLINE_DEBUGGABLE void Reset()
Definition PBDCollisionSolverJacobi.h:674
void EnableVelocityShockPropagation()
Set up the mass scaling for shock propagation, using the velocity-phase mass scale.
Definition PBDCollisionSolverJacobi.cpp:38
FORCEINLINE_DEBUGGABLE FSolverReal DynamicFriction() const
Definition PBDCollisionSolverJacobi.h:696
FORCEINLINE_DEBUGGABLE bool SolvePositionWithFriction(const FSolverReal Dt, const FSolverReal MaxPushOut)
Definition PBDCollisionSolverJacobi.h:862
FORCEINLINE_DEBUGGABLE int32 AddManifoldPoint()
Definition PBDCollisionSolverJacobi.h:686
FORCEINLINE_DEBUGGABLE FSolverReal StaticFriction() const
Definition PBDCollisionSolverJacobi.h:691
FORCEINLINE_DEBUGGABLE void InitManifoldPoint(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)
Definition PBDCollisionSolverJacobi.h:774
FORCEINLINE_DEBUGGABLE FSolverReal VelocityFriction() const
Definition PBDCollisionSolverJacobi.h:701
Definition PBDCollisionSolverJacobi.h:39
Definition PBDCollisionSolverJacobi.h:32
A c-style array of objects with non-shipping bounds checking.
Definition UncheckedArray.h:47
Definition ArrayView.h:139
bool bChaos_PBDCollisionSolver_Velocity_FrictionEnabled
Definition PBDCollisionSolver.cpp:47
FRealSingle Chaos_PBDCollisionSolver_JacobiStiffness
Definition PBDCollisionContainerSolver.cpp:40
float Chaos_PBDCollisionSolver_Position_StaticFrictionStiffness
Definition PBDCollisionSolver.cpp:34
FRealSingle Chaos_PBDCollisionSolver_JacobiRotationTolerance
Definition PBDCollisionContainerSolver.cpp:50
FRealSingle Chaos_PBDCollisionSolver_JacobiPositionTolerance
Definition PBDCollisionContainerSolver.cpp:45
Definition SkeletalMeshComponent.h:307
TVec3< FSolverReal > FSolverVec3
Definition SolverBody.h:44
FRealSingle FSolverReal
Definition SolverBody.h:38
Definition OverriddenPropertySet.cpp:45
FAutoConsoleVariableRef CVars[]
Definition MassProcessingPhaseManager.cpp:29
Definition UnrealMathFPU.h:113
Definition PBDCollisionSolverJacobi.h:586
FSolverVec3 ContactTangentUAngular1
Definition PBDCollisionSolverJacobi.h:609
FSolverVec3 ContactTangentVAngular0
Definition PBDCollisionSolverJacobi.h:607
FSolverReal NetImpulseNormal
Definition PBDCollisionSolverJacobi.h:621
FSolverReal ContactMassTangentV
Definition PBDCollisionSolverJacobi.h:615
FSolverReal NetPushOutTangentV
Definition PBDCollisionSolverJacobi.h:620
FSolverReal ContactMassTangentU
Definition PBDCollisionSolverJacobi.h:614
FSolverVec3 ContactNormal
Definition PBDCollisionSolverJacobi.h:592
FSolverReal ContactDeltaTangentU
Definition PBDCollisionSolverJacobi.h:598
FSolverVec3 ContactNormalAngular0
Definition PBDCollisionSolverJacobi.h:605
FSolverReal NetPushOutNormal
Definition PBDCollisionSolverJacobi.h:618
FSolverReal ContactTargetVelocityNormal
Definition PBDCollisionSolverJacobi.h:602
FSolverVec3 ContactTangentUAngular0
Definition PBDCollisionSolverJacobi.h:606
FSolverReal NetPushOutTangentU
Definition PBDCollisionSolverJacobi.h:619
FSolverReal NetImpulseTangentU
Definition PBDCollisionSolverJacobi.h:622
FSolverReal ContactDeltaTangentV
Definition PBDCollisionSolverJacobi.h:599
FSolverReal NetImpulseTangentV
Definition PBDCollisionSolverJacobi.h:623
FSolverVec3 ContactTangentV
Definition PBDCollisionSolverJacobi.h:594
FSolverReal StaticFrictionRatio
Definition PBDCollisionSolverJacobi.h:628
FSolverVec3 ContactNormalAngular1
Definition PBDCollisionSolverJacobi.h:608
FSolverVec3 ContactTangentVAngular1
Definition PBDCollisionSolverJacobi.h:610
FSolverVec3 RelativeContactPosition1
Definition PBDCollisionSolverJacobi.h:589
FSolverVec3 RelativeContactPosition0
Definition PBDCollisionSolverJacobi.h:588
FSolverVec3 ContactTangentU
Definition PBDCollisionSolverJacobi.h:593
FSolverReal ContactDeltaNormal
Definition PBDCollisionSolverJacobi.h:597
FSolverReal ContactMassNormal
Definition PBDCollisionSolverJacobi.h:613
static constexpr UE_FORCEINLINE_HINT T Square(const T A)
Definition UnrealMathUtility.h:578