15 class FPBDJointSolver;
31 static const int32 MaxConstrainedBodies = 2;
37 check((BodyIndex >= 0) && (BodyIndex < 2));
40 return SolverBodies[BodyIndex];
45 check((BodyIndex >= 0) && (BodyIndex < 2));
48 return SolverBodies[BodyIndex];
53 return SolverBodies[0];
58 return SolverBodies[0];
63 return SolverBodies[1];
68 return SolverBodies[1];
71 inline const FVec3&
X(
int BodyIndex)
const
73 return Body(BodyIndex).X();
78 return Body(BodyIndex).R();
81 inline const FVec3 P(
int BodyIndex)
const
85 return Body(BodyIndex).CorrectedP();
92 return Body(BodyIndex).CorrectedQ();
97 return Body(BodyIndex).V();
102 return Body(BodyIndex).W();
107 return InvMs[BodyIndex];
112 return InvIs[BodyIndex];
117 return (InvM(BodyIndex) > 0);
122 return NetLinearImpulse;
127 return NetAngularImpulse;
132 return LinearViolationSq;
137 return AngularViolation;
146 SolverBodies[0] = *SolverBody0;
147 SolverBodies[1] = *SolverBody1;
167 const FReal InvMassScale0,
168 const FReal InvMassScale1);
171 void ApplyConstraints(
178 void ApplyVelocityConstraints(
186 void ApplyProjections(
190 const bool bLastIteration);
192 void SetShockPropagationScales(
219 return !
IsBroken() && (IsDynamic(0) || IsDynamic(1));
225 void InitDerivedState();
228 void UpdateDerivedState(
const int32 BodyIndex);
229 void UpdateDerivedState();
234 void ApplyPositionConstraints(
239 void ApplyRotationConstraints(
244 void ApplyPositionDrives(
249 void ApplyRotationDrives(
254 void ApplyLinearVelocityConstraints(
259 void ApplyAngularVelocityConstraints(
264 void ApplyPositionDelta(
265 const int32 BodyIndex,
268 void ApplyPositionDelta(
272 void ApplyRotationDelta(
273 const int32 BodyIndex,
276 void ApplyRotationDelta(
281 const int32 BodyIndex,
285 void ApplyVelocityDelta(
286 const int32 BodyIndex,
290 void ApplyVelocityDelta(
296 void ApplyAngularVelocityDelta(
300 void ApplyPositionConstraint(
301 const FReal JointStiffness,
307 void ApplyPositionConstraintSoft(
309 const FReal JointStiffness,
311 const bool bAccelerationMode,
318 void ApplyRotationConstraint(
319 const FReal JointStiffness,
324 void ApplyRotationConstraintKD(
327 const FReal JointStiffness,
332 void ApplyRotationConstraintDD(
333 const FReal JointStiffness,
338 void ApplyRotationConstraintSoft(
340 const FReal JointStiffness,
342 const bool bAccelerationMode,
349 void ApplyRotationConstraintSoftKD(
353 const FReal JointStiffness,
355 const bool bAccelerationMode,
362 void ApplyRotationConstraintSoftDD(
364 const FReal JointStiffness,
366 const bool bAccelerationMode,
373 void ApplyLockedRotationConstraints(
380 void ApplyTwistConstraint(
386 void ApplyConeConstraint(
393 void ApplySingleLockedSwingConstraint(
401 void ApplyDualConeSwingConstraint(
409 void ApplySwingConstraint(
416 void ApplySwingTwistDrives(
424 void ApplySLerpDrive(
429 void ApplyPointPositionConstraintKD(
436 void ApplyPointPositionConstraintDD(
441 void ApplySphericalPositionConstraint(
446 void ApplyCylindricalPositionConstraint(
448 const int32 AxisIndex,
454 void ApplyPlanarPositionConstraint(
456 const int32 AxisIndex,
461 void ApplyPositionDrive(
463 const int32 AxisIndex,
470 void ApplyPositionProjection(
477 void ApplyRotationProjection(
484 void ApplyPointProjection(
492 void ApplySphereProjection(
500 void ApplyTranslateProjection(
508 void ApplyConeProjection(
517 void ApplySwingProjection(
527 void ApplySingleLockedSwingProjection(
537 void ApplyDoubleLockedSwingProjection(
546 void ApplyDualConeSwingProjection(
556 void ApplyTwistProjection(
565 void ApplyVelocityProjection(
573 void ApplyLinearVelocityConstraint(
579 void ApplyPointVelocityConstraint(
584 void ApplySphericalVelocityConstraint(
589 void ApplyCylindricalVelocityConstraint(
591 const int32 AxisIndex,
597 void ApplyPlanarVelocityConstraint(
599 const int32 AxisIndex,
604 void ApplyTwistVelocityConstraint(
610 void ApplyConeVelocityConstraint(
617 void ApplySingleLockedSwingVelocityConstraint(
625 void ApplyDualConeSwingVelocityConstraint(
633 void ApplySwingVelocityConstraint(
640 void ApplyAngularVelocityConstraint(
645 void ApplyLockedRotationVelocityConstraints(
652 void CalculateLinearConstraintPadding(
656 const FReal Restitution,
657 const int32 AxisIndex,
661 void CalculateAngularConstraintPadding(
665 const FReal Restitution,
671 void CalculateConstraintAxisLinearVelocities(
675 void CalculateSphericalConstraintAxisLinearVelocities(
680 void CalculateCylindricalConstraintAxisLinearVelocities(
681 const int32 AxisIndex,
687 void CalculatePlanarConstraintAxisLinearVelocities(
688 const int32 AxisIndex,
694 void CalculateConstraintAxisAngularVelocities(
700 void CalculateTwistConstraintAxisAngularVelocities(
704 void CalculateConeConstraintAxisAngularVelocities(
708 void CalculateDualConeSwingConstraintAxisAngularVelocities(
713 void CalculateSwingConstraintAxisAngularVelocities(
726 FVec3 ConnectorXs[MaxConstrainedBodies];
730 FVec3 InitConnectorXs[MaxConstrainedBodies];
731 FRotation3 InitConnectorRs[MaxConstrainedBodies];
734 FReal InvMScales[MaxConstrainedBodies];
735 FReal ConditionedInvMs[MaxConstrainedBodies];
736 FVec3 ConditionedInvILs[MaxConstrainedBodies];
737 FReal InvMs[MaxConstrainedBodies];
741 FVec3 NetLinearImpulse;
742 FVec3 NetAngularImpulse;
744 FReal LinearViolationSq;
745 FReal AngularViolation;
749 FVec3 LinearHardLambda;
752 FVec3 AngularHardLambda;
755 FReal LinearSoftLambda;
756 FReal TwistSoftLambda;
757 FReal SwingSoftLambda;
758 FVec3 LinearDriveLambdas;
759 FVec3 RotationDriveLambdas;
763 FReal SolverStiffness;
766 FReal PositionTolerance;
767 FReal AngleTolerance;
770 FVec3 LastPs[MaxConstrainedBodies];
772 FVec3 InitConstraintAxisLinearVelocities;
773 FVec3 InitConstraintAxisAngularVelocities;
#define check(expr)
Definition AssertionMacros.h:314
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void Init()
Definition LockFreeList.h:4
Definition SolverBody.h:543
Definition PBDJointConstraintTypes.h:114
Definition PBDJointConstraintTypes.h:219
Definition PBDJointSolverGaussSeidel.h:29
FConstraintSolverBody & Body(int32 BodyIndex)
Definition PBDJointSolverGaussSeidel.h:35
FVec3 W(int BodyIndex) const
Definition PBDJointSolverGaussSeidel.h:100
FReal GetLinearViolationSq() const
Definition PBDJointSolverGaussSeidel.h:130
FMatrix33 InvI(int32 BodyIndex) const
Definition PBDJointSolverGaussSeidel.h:110
const FRotation3 & R(int BodyIndex) const
Definition PBDJointSolverGaussSeidel.h:76
const FVec3 & GetNetLinearImpulse() const
Definition PBDJointSolverGaussSeidel.h:120
bool IsBroken() const
Definition PBDJointSolverGaussSeidel.h:202
const FConstraintSolverBody & Body(int32 BodyIndex) const
Definition PBDJointSolverGaussSeidel.h:43
void SetIsBroken(const bool bInIsBroken)
Definition PBDJointSolverGaussSeidel.h:197
void SetSolverBodies(FSolverBody *SolverBody0, FSolverBody *SolverBody1)
Definition PBDJointSolverGaussSeidel.h:144
FReal GetAngularViolation() const
Definition PBDJointSolverGaussSeidel.h:135
const FVec3 P(int BodyIndex) const
Definition PBDJointSolverGaussSeidel.h:81
FConstraintSolverBody & Body0()
Definition PBDJointSolverGaussSeidel.h:51
const FVec3 & X(int BodyIndex) const
Definition PBDJointSolverGaussSeidel.h:71
FReal InvM(int32 BodyIndex) const
Definition PBDJointSolverGaussSeidel.h:105
bool IsViolating() const
Definition PBDJointSolverGaussSeidel.h:212
FPBDJointSolver()
Definition PBDJointSolverGaussSeidel.h:140
bool RequiresSolve() const
Definition PBDJointSolverGaussSeidel.h:217
const FConstraintSolverBody & Body0() const
Definition PBDJointSolverGaussSeidel.h:56
void SetIsViolating(const bool bInIsViolating)
Definition PBDJointSolverGaussSeidel.h:207
FVec3 V(int BodyIndex) const
Definition PBDJointSolverGaussSeidel.h:95
const FRotation3 Q(int BodyIndex) const
Definition PBDJointSolverGaussSeidel.h:88
const FVec3 & GetNetAngularImpulse() const
Definition PBDJointSolverGaussSeidel.h:125
FConstraintSolverBody & Body1()
Definition PBDJointSolverGaussSeidel.h:61
const FConstraintSolverBody & Body1() const
Definition PBDJointSolverGaussSeidel.h:66
bool IsDynamic(int32 BodyIndex) const
Definition PBDJointSolverGaussSeidel.h:115
Definition SolverBody.h:99
Definition SkeletalMeshComponent.h:307
FRealDouble FReal
Definition Real.h:22
EJointAngularConstraintIndex
Definition PBDJointConstraintTypes.h:48
@ Update
Definition PendingSpatialData.h:19
TVector< FReal, 3 > FVec3
Definition Core.h:17
EJointMotionType
Definition PBDJointConstraintTypes.h:23