27 const int32 ConstraintIndex,
36 const int32 ConstraintIndex,
42 const int32 ConstraintIndex,
53 const int32 ConstraintIndex,
58 const bool bUsePositionBasedDrives);
62 const int32 ConstraintIndex,
140 default:
check(
false);
return false;
151 default:
check(
false);
return false;
162 default:
check(
false);
return false;
184 default:
check(
false);
195 default:
check(
false);
206 default:
check(
false);
218 default:
check(
false);
241 check((BodyIndex >= 0) && (BodyIndex < 2));
244 return SolverBodies[BodyIndex];
249 check((BodyIndex >= 0) && (BodyIndex < 2));
252 return SolverBodies[BodyIndex];
257 return SolverBodies[0];
262 return SolverBodies[0];
267 return SolverBodies[1];
272 return SolverBodies[1];
275 inline const FVec3 X(
int BodyIndex)
const
277 return Body(BodyIndex).
X();
282 return Body(BodyIndex).
R();
285 inline const FVec3 P(
int BodyIndex)
const
299 inline const FVec3 V(
int BodyIndex)
const
301 return Body(BodyIndex).
V();
304 inline const FVec3 W(
int BodyIndex)
const
306 return Body(BodyIndex).
W();
311 return InvMs[BodyIndex];
316 return InvIs[BodyIndex];
321 return (
InvM(BodyIndex) > 0);
433 return FMath::Max(NumActiveConstraints, 0);
447 SolverBodies[0] = *SolverBody0;
448 SolverBodies[1] = *SolverBody1;
492 const bool bLastIteration);
500 const FReal LinearProjection,
501 const int32 ConstraintIndex);
504 const FReal LinearProjection);
512 const FReal AngularProjection,
514 const int32 ConstraintIndex);
531 const FReal TeleportDistance,
532 const int32 ConstraintIndex);
575 void InitDerivedState();
578 void UpdateDerivedState(
const int32 BodyIndex);
579 void UpdateDerivedState();
587 bool UpdateIsActive();
591 void ApplyPositionDelta(
592 const int32 BodyIndex,
595 void ApplyRotationDelta(
596 const int32 BodyIndex,
601 void InitPositionConstraints(
607 void InitPositionDatasMass(
609 const int32 ConstraintIndex,
612 void InitPositionConstraintDatas(
613 const int32 ConstraintIndex,
614 const FVec3& ConstraintAxis,
616 const FReal ConstraintRestitution,
623 void InitLockedPositionConstraint(
628 void InitLockedPositionConstraintSimd(
633 void InitSphericalPositionConstraint(
637 void InitCylindricalPositionConstraint(
640 const int32 AxisIndex);
642 void InitPlanarPositionConstraint(
645 const int32 AxisIndex);
649 void ApplyPositionConstraints(
652 void ApplyAxisPositionConstraint(
653 const int32 ConstraintIndex,
656 void ApplyPositionConstraintsSimd(
659 void SolvePositionConstraintDelta(
660 const int32 ConstraintIndex,
664 void SolvePositionConstraintHard(
665 const int32 ConstraintIndex,
668 void SolvePositionConstraintSoft(
669 const int32 ConstraintIndex,
676 void ApplyLinearVelocityConstraints();
678 void ApplyAxisVelocityConstraint(
679 const int32 ConstraintIndex);
681 void ApplyVelocityConstraintSimd();
683 void SolveLinearVelocityConstraint(
684 const int32 ConstraintIndex,
689 void InitRotationConstraints(
695 void InitRotationConstraintsSimd(
699 void CorrectAxisAngleConstraint(
701 const int32 ConstraintIndex,
702 FVec3& ConstraintAxis,
705 void InitRotationConstraintDatas(
707 const int32 ConstraintIndex,
708 const FVec3& ConstraintAxis,
710 const FReal ConstraintRestitution,
714 void InitRotationDatasMass(
716 const int32 ConstraintIndex,
719 void InitTwistConstraint(
723 void InitConeConstraint(
727 void InitPyramidSwingConstraint(
734 void InitSingleLockedSwingConstraint(
740 void InitDualConeSwingConstraint(
746 void InitSwingConstraint(
752 void InitLockedRotationConstraints(
761 void ApplyRotationConstraints(
764 void ApplyRotationConstraint(
765 const int32 ConstraintIndex,
768 void ApplyRotationSoftConstraintsSimd(
771 void SolveRotationConstraintDelta(
772 const int32 ConstraintIndex,
777 void SolveRotationConstraintHard(
778 const int32 ConstraintIndex,
781 void SolveRotationConstraintSoft(
782 const int32 ConstraintIndex,
789 void ApplyAngularVelocityConstraints();
791 void SolveAngularVelocityConstraint(
792 const int32 ConstraintIndex,
795 void ApplyAngularVelocityConstraint(
796 const int32 ConstraintIndex);
798 void ApplyAngularVelocityConstraintSimd();
802 void InitPositionDrives(
807 void InitAxisPositionDrive(
808 const int32 ConstraintIndex,
809 const FVec3& ConstraintAxis,
810 const FVec3& DeltaPosition,
811 const FVec3& DeltaVelocity,
816 void ApplyPositionDrives(
819 void ApplyAxisPositionDrive(
820 const int32 ConstraintIndex,
823 void ApplyPositionVelocityDrives(
826 void ApplyAxisPositionVelocityDrive(
827 const int32 ConstraintIndex,
832 void InitRotationDrives(
837 void InitRotationConstraintDrive(
838 const int32 ConstraintIndex,
839 const FVec3& ConstraintAxis,
843 void InitRotationConstraintDriveSimd(
848 void InitSwingTwistDrives(
863 void ApplyRotationDrives(
866 void ApplyAxisRotationDrive(
867 const int32 ConstraintIndex,
870 void ApplyRotationDrivesSimd(
873 void ApplyRotationVelocityDrives(
876 void ApplyAxisRotationVelocityDrive(
877 const int32 ConstraintIndex,
880 void SetInitConstraintVelocity(
900 FVec3 InitConstraintVelocity;
908 FReal SolverStiffness;
911 FReal PositionTolerance;
912 FReal AngleTolerance;
919 FVec3 InitConstraintAxisLinearVelocities;
920 FVec3 InitConstraintAxisAngularVelocities;
921 int32 NumActiveConstraints;
923 bool bUsePositionBasedDrives;
936 static constexpr int32 PointPositionConstraintIndex = 0;
937 static constexpr int32 SphericalPositionConstraintIndex = 0;
938 static constexpr int32 PlanarPositionConstraintIndex = 0;
944 void ComputeBodyState(
const int32 BodyIndex);
#define check(expr)
Definition AssertionMacros.h:314
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void Init()
Definition LockFreeList.h:4
FORCEINLINE VectorRegister4Float VectorMultiplyAdd(const VectorRegister4Float &Vec1, const VectorRegister4Float &Vec2, const VectorRegister4Float &Vec3)
Definition UnrealMathFPU.h:786
FORCEINLINE VectorRegister4Float VectorZeroFloat(void)
Definition UnrealMathFPU.h:331
FORCEINLINE void VectorStoreFloat3(const VectorRegister4Float &Vec, float *Dst)
Definition UnrealMathFPU.h:594
#define VectorReplicate(Vec, ElementIndex)
Definition UnrealMathFPU.h:627
Definition SolverBody.h:543
FRotation3 CorrectedQ() const
Definition SolverBody.h:646
FVec3 CorrectedP() const
Definition SolverBody.h:645
const FRotation3 & R() const
Definition SolverBody.h:631
const FVec3 & X() const
Definition SolverBody.h:630
const FSolverVec3 & V() const
Definition SolverBody.h:638
const FSolverVec3 & W() const
Definition SolverBody.h:639
Definition PBDJointCachedSolverGaussSeidel.h:233
FConstraintSolverBody & Body(int32 BodyIndex)
Definition PBDJointCachedSolverGaussSeidel.h:239
void ApplyVelocityConstraints(const FReal Dt, const FReal InSolverStiffness, const FPBDJointSolverSettings &SolverSettings, const FPBDJointSettings &JointSettings)
Definition PBDJointCachedSolverGaussSeidel.cpp:315
void ApplyPositionProjection(const FReal Dt, const FPBDJointSolverSettings &SolverSettings, const FPBDJointSettings &JointSettings)
Definition PBDJointCachedSolverGaussSeidel.cpp:2101
void ApplyPositionTeleportSimd(const FRealSingle TeleportDistance)
Definition PBDJointCachedSolverGaussSeidel.cpp:2307
void ApplyRotationProjection(const FReal Dt, const FPBDJointSolverSettings &SolverSettings, const FPBDJointSettings &JointSettings)
Definition PBDJointCachedSolverGaussSeidel.cpp:1931
const FVec3 V(int BodyIndex) const
Definition PBDJointCachedSolverGaussSeidel.h:299
const FRotation3 R(int BodyIndex) const
Definition PBDJointCachedSolverGaussSeidel.h:280
void ApplyPositionTeleport(const FReal Dt, const FPBDJointSolverSettings &SolverSettings, const FPBDJointSettings &JointSettings)
Definition PBDJointCachedSolverGaussSeidel.cpp:2250
const FConstraintSolverBody & Body0() const
Definition PBDJointCachedSolverGaussSeidel.h:260
void SetIsBroken(const bool bInIsBroken)
Definition PBDJointCachedSolverGaussSeidel.h:547
bool IsBroken() const
Definition PBDJointCachedSolverGaussSeidel.h:552
void ApplyAxisPositionTeleport(const FReal TeleportDistance, const int32 ConstraintIndex)
Definition PBDJointCachedSolverGaussSeidel.cpp:2272
void ApplyRotationTeleport(const FReal Dt, const FPBDJointSolverSettings &SolverSettings, const FPBDJointSettings &JointSettings)
Definition PBDJointCachedSolverGaussSeidel.cpp:2332
bool IsDynamic(int32 BodyIndex) const
Definition PBDJointCachedSolverGaussSeidel.h:319
FVec3 GetNetLinearImpulse() const
Definition PBDJointCachedSolverGaussSeidel.h:325
void SetIsViolating(const bool bInIsViolating)
Definition PBDJointCachedSolverGaussSeidel.h:557
const FVec3 X(int BodyIndex) const
Definition PBDJointCachedSolverGaussSeidel.h:275
FConstraintSolverBody & Body1()
Definition PBDJointCachedSolverGaussSeidel.h:265
bool RequiresSolve() const
Definition PBDJointCachedSolverGaussSeidel.h:567
void Deinit()
Definition PBDJointCachedSolverGaussSeidel.cpp:280
int32 GetNumActiveConstraints() const
Definition PBDJointCachedSolverGaussSeidel.h:430
const FRotation3 Q(int BodyIndex) const
Definition PBDJointCachedSolverGaussSeidel.h:292
void ApplyRotationProjectionSimd(const FRealSingle AngularProjection, const bool bLinearLocked)
Definition PBDJointCachedSolverGaussSeidel.cpp:2012
void SetSolverBodies(FSolverBody *SolverBody0, FSolverBody *SolverBody1)
Definition PBDJointCachedSolverGaussSeidel.h:445
void ApplyPositionProjectionSimd(const FReal LinearProjection)
Definition PBDJointCachedSolverGaussSeidel.cpp:2168
FReal GetAngularViolation() const
Definition PBDJointCachedSolverGaussSeidel.h:425
void ApplyAxisRotationProjection(const FReal AngularProjection, const bool bLinearLocked, const int32 ConstraintIndex)
Definition PBDJointCachedSolverGaussSeidel.cpp:1957
void ApplyTeleports(const FReal Dt, const FPBDJointSolverSettings &SolverSettings, const FPBDJointSettings &JointSettings)
Definition PBDJointCachedSolverGaussSeidel.cpp:2240
const FVec3 P(int BodyIndex) const
Definition PBDJointCachedSolverGaussSeidel.h:285
void ApplyAxisPositionProjection(const FReal LinearProjection, const int32 ConstraintIndex)
Definition PBDJointCachedSolverGaussSeidel.cpp:2125
const FConstraintSolverBody & Body(int32 BodyIndex) const
Definition PBDJointCachedSolverGaussSeidel.h:247
const FVec3 W(int BodyIndex) const
Definition PBDJointCachedSolverGaussSeidel.h:304
const FConstraintSolverBody & Body1() const
Definition PBDJointCachedSolverGaussSeidel.h:270
FReal InvM(int32 BodyIndex) const
Definition PBDJointCachedSolverGaussSeidel.h:309
void ApplyProjections(const FReal Dt, const FPBDJointSolverSettings &SolverSettings, const FPBDJointSettings &JointSettings, const bool bLastIteration)
Definition PBDJointCachedSolverGaussSeidel.cpp:1886
FMatrix33 InvI(int32 BodyIndex) const
Definition PBDJointCachedSolverGaussSeidel.h:314
static const int32 MaxConstrainedBodies
Definition PBDJointCachedSolverGaussSeidel.h:235
FConstraintSolverBody & Body0()
Definition PBDJointCachedSolverGaussSeidel.h:255
void InitProjection(const FReal Dt, const FPBDJointSolverSettings &SolverSettings, const FPBDJointSettings &JointSettings)
Definition PBDJointCachedSolverGaussSeidel.cpp:241
FReal GetLinearViolationSq() const
Definition PBDJointCachedSolverGaussSeidel.h:420
FVec3 GetNetAngularImpulse() const
Definition PBDJointCachedSolverGaussSeidel.h:373
void SetShockPropagationScales(const FReal InvMScale0, const FReal InvMScale1, const FReal Dt)
Definition PBDJointCachedSolverGaussSeidel.cpp:123
void ApplyConstraints(const FReal Dt, const FReal InSolverStiffness, const FPBDJointSolverSettings &SolverSettings, const FPBDJointSettings &JointSettings)
Definition PBDJointCachedSolverGaussSeidel.cpp:288
bool GetIsActive() const
Definition PBDJointCachedSolverGaussSeidel.h:436
bool IsViolating() const
Definition PBDJointCachedSolverGaussSeidel.h:562
FPBDJointCachedSolver()
Definition PBDJointCachedSolverGaussSeidel.h:441
Definition PBDJointConstraintTypes.h:114
Definition PBDJointConstraintTypes.h:219
Definition SolverBody.h:99
Definition SkeletalMeshComponent.h:307
FRealDouble FReal
Definition Real.h:22
EJointAngularConstraintIndex
Definition PBDJointConstraintTypes.h:48
@ Update
Definition PendingSpatialData.h:19
float FRealSingle
Definition Real.h:14
TVector< FReal, 3 > FVec3
Definition Core.h:17
EJointMotionType
Definition PBDJointConstraintTypes.h:23
U16 Index
Definition radfft.cpp:71
Definition PBDJointCachedSolverGaussSeidel.h:69
VectorRegister4Float ConstraintHardIM
Definition PBDJointCachedSolverGaussSeidel.h:83
VectorRegister4Float ConstraintSoftDamping
Definition PBDJointCachedSolverGaussSeidel.h:78
VectorRegister4Float ConstraintLimits
Definition PBDJointCachedSolverGaussSeidel.h:81
VectorRegister4Float ConstraintDRAxis[3][2]
Definition PBDJointCachedSolverGaussSeidel.h:84
VectorRegister4Float ConstraintSoftStiffness
Definition PBDJointCachedSolverGaussSeidel.h:77
FDataSimd()
Definition PBDJointCachedSolverGaussSeidel.h:70
VectorRegister4Float ConstraintArms[2]
Definition PBDJointCachedSolverGaussSeidel.h:79
VectorRegister4Float ConstraintAxis[3]
Definition PBDJointCachedSolverGaussSeidel.h:80
VectorRegister4Float ConstraintCX
Definition PBDJointCachedSolverGaussSeidel.h:85
VectorRegister4Float ConstraintSoftIM
Definition PBDJointCachedSolverGaussSeidel.h:82
VectorRegister4Float ConstraintHardStiffness
Definition PBDJointCachedSolverGaussSeidel.h:76
VectorRegister4Float ConstraintLambda
Definition PBDJointCachedSolverGaussSeidel.h:86
Definition PBDJointCachedSolverGaussSeidel.h:90
FVec3 ConstraintHardStiffness
Definition PBDJointCachedSolverGaussSeidel.h:91
FVec3 ConstraintAxis[3]
Definition PBDJointCachedSolverGaussSeidel.h:95
FVec3 ConstraintLambda
Definition PBDJointCachedSolverGaussSeidel.h:101
FVec3 ConstraintDRAxis[3][2]
Definition PBDJointCachedSolverGaussSeidel.h:99
FVec3 ConstraintArms[3][2]
Definition PBDJointCachedSolverGaussSeidel.h:94
FVec3 ConstraintSoftStiffness
Definition PBDJointCachedSolverGaussSeidel.h:92
FVec3 ConstraintHardIM
Definition PBDJointCachedSolverGaussSeidel.h:98
FVec3 ConstraintSoftDamping
Definition PBDJointCachedSolverGaussSeidel.h:93
FVec3 ConstraintLimits
Definition PBDJointCachedSolverGaussSeidel.h:96
FVec3 ConstraintCX
Definition PBDJointCachedSolverGaussSeidel.h:100
FVec3 ConstraintSoftIM
Definition PBDJointCachedSolverGaussSeidel.h:97
Definition PBDJointCachedSolverGaussSeidel.h:18
void SetMaxForce(const int32 ConstraintIndex, const FReal InMaxForce, const FReal Dt)
Definition PBDJointCachedSolverGaussSeidel.cpp:2996
uint8 bSoftLimit1
Definition PBDJointCachedSolverGaussSeidel.h:125
FVec3 SettingsSoftStiffness
Definition PBDJointCachedSolverGaussSeidel.h:112
void SetSoftLimit(int32 Index, bool bValue)
Definition PBDJointCachedSolverGaussSeidel.h:199
EJointMotionType GetMotionType(int32 Index) const
Definition PBDJointCachedSolverGaussSeidel.h:166
uint8 MotionType2
Definition PBDJointCachedSolverGaussSeidel.h:131
void UpdateMass(const int32 ConstraintIndex, const FVec3 &DatasIA0, const FVec3 &DatasIA1, const FReal DatasIM, const FReal Dt, const bool bUsePositionBasedDrives)
Definition PBDJointCachedSolverGaussSeidel.cpp:2972
void ApplyMaxLambda(const int32 ConstraintIndex, FReal &DeltaLambda, FReal &Lambda)
Definition PBDJointCachedSolverGaussSeidel.cpp:3016
FVec3 ConstraintLambdaVelocity
Definition PBDJointCachedSolverGaussSeidel.h:116
FAxisConstraintDatas(FAxisConstraintDatas &&)=delete
uint8 bLimitsCheck1
Definition PBDJointCachedSolverGaussSeidel.h:122
bool GetLimitsCheck(int32 Index) const
Definition PBDJointCachedSolverGaussSeidel.h:144
FAxisConstraintDatas()
Definition PBDJointCachedSolverGaussSeidel.h:19
void UpdateDatas(const int32 ConstraintIndex, const FVec3 &DatasAxis, const FReal DatasCX, const FReal DatasRestitution, const bool bCheckLimit=true, const FVec3 &DatasArm0=FVec3::Zero(), const FVec3 &DatasArm1=FVec3::Zero(), const FReal DatasVX=0.0)
Definition PBDJointCachedSolverGaussSeidel.cpp:2951
FDataSimd Simd
Definition PBDJointCachedSolverGaussSeidel.h:106
FData Data
Definition PBDJointCachedSolverGaussSeidel.h:107
void SetLimitsCheck(int32 Index, bool bValue)
Definition PBDJointCachedSolverGaussSeidel.h:188
uint8 bLimitsCheck0
Definition PBDJointCachedSolverGaussSeidel.h:121
FVec3 ConstraintMaxLambda
Definition PBDJointCachedSolverGaussSeidel.h:110
FVec3 ConstraintRestitution
Definition PBDJointCachedSolverGaussSeidel.h:115
uint8 MotionType0
Definition PBDJointCachedSolverGaussSeidel.h:129
void SetValidDatas(int32 Index, bool bValue)
Definition PBDJointCachedSolverGaussSeidel.h:177
void InitDatas(const int32 ConstraintIndex, const bool bHasSoftLimits, const FReal SoftStiffness, const FReal SoftDamping, const FReal HardStiffness, const bool bResetLambdas=true)
Definition PBDJointCachedSolverGaussSeidel.cpp:2925
uint8 bLimitsCheck2
Definition PBDJointCachedSolverGaussSeidel.h:123
uint8 bValidDatas0
Definition PBDJointCachedSolverGaussSeidel.h:118
uint8 bAccelerationMode
Definition PBDJointCachedSolverGaussSeidel.h:127
uint8 bValidDatas2
Definition PBDJointCachedSolverGaussSeidel.h:120
FVec3 SettingsSoftDamping
Definition PBDJointCachedSolverGaussSeidel.h:111
uint8 MotionType1
Definition PBDJointCachedSolverGaussSeidel.h:130
FAxisConstraintDatas & operator=(FAxisConstraintDatas &&)=delete
FVec3 ConstraintVX
Definition PBDJointCachedSolverGaussSeidel.h:113
uint8 bSoftLimit0
Definition PBDJointCachedSolverGaussSeidel.h:124
FAxisConstraintDatas(const FAxisConstraintDatas &)=delete
uint8 bValidDatas1
Definition PBDJointCachedSolverGaussSeidel.h:119
void SetMotionType(int32 Index, EJointMotionType Value)
Definition PBDJointCachedSolverGaussSeidel.h:210
FAxisConstraintDatas & operator=(const FAxisConstraintDatas &)=delete
uint8 bUseSimd
Definition PBDJointCachedSolverGaussSeidel.h:128
bool GetSoftLimit(int32 Index) const
Definition PBDJointCachedSolverGaussSeidel.h:155
uint8 bSoftLimit2
Definition PBDJointCachedSolverGaussSeidel.h:126
bool GetValidDatas(int32 Index) const
Definition PBDJointCachedSolverGaussSeidel.h:133
Definition UnrealMathFPU.h:20