37#include "AnimPhysicsSolver.generated.h"
79 InnerSphere UMETA(
ToolTip=
"Use the largest sphere that fits entirely within the body extents to collide with planes."),
80 OuterSphere UMETA(
ToolTip=
"Use the smallest sphere that wholely contains the body extents to collide with planes.")
501 static ENGINE_API void PhysicsUpdate(
float DeltaTime,
TArray<FAnimPhysRigidBody*>& Bodies,
TArray<FAnimPhysLinearLimit>& LinearLimits,
TArray<FAnimPhysAngularLimit>& AngularLimits,
TArray<FAnimPhysSpring>& Springs,
const FVector& GravityDirection,
const FVector& ExternalForce,
const FVector&
ExternalLinearAcc,
const FVector&
ExternalAngularAcc,
const FVector& ExternalAngularVelocity,
int32 NumPreIterations = 8,
int32 NumPostIterations = 2);
AnimPhysTwistAxis
Definition AnimPhysicsSolver.h:68
AnimPhysCollisionType
Definition AnimPhysicsSolver.h:76
#define DECLARE_CYCLE_STAT_EXTERN(CounterName, StatId, GroupId, API)
Definition Stats.h:679
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define FVector
Definition IOSSystemIncludes.h:8
UE::Math::TTransform< double > FTransform
Definition MathFwd.h:53
UE::Math::TVector2< double > FVector2D
Definition MathFwd.h:48
UE::Math::TPlane< double > FPlane
Definition MathFwd.h:52
#define MAX_flt
Definition NumericLimits.h:29
#define UENUM(...)
Definition ObjectMacros.h:749
Definition AnimPhysicsSolver.h:297
ENGINE_API void RemoveBias()
Definition AnimPhysicsSolver.cpp:232
float MaximumTorque
Definition AnimPhysicsSolver.h:313
FVector WorldSpaceAxis
Definition AnimPhysicsSolver.h:301
float TargetSpin
Definition AnimPhysicsSolver.h:307
ENGINE_API void UpdateCachedData()
Definition AnimPhysicsSolver.cpp:272
float Torque
Definition AnimPhysicsSolver.h:304
float MinimumTorque
Definition AnimPhysicsSolver.h:310
ENGINE_API FAnimPhysAngularLimit()
Definition AnimPhysicsSolver.cpp:216
float CachedSpinToTorque
Definition AnimPhysicsSolver.h:316
ENGINE_API void Iter(float DeltaTime)
Definition AnimPhysicsSolver.cpp:238
Definition AnimPhysicsSolver.h:286
FAnimPhysRigidBody * Bodies[2]
Definition AnimPhysicsSolver.h:288
Definition AnimPhysicsSolver.h:333
float TargetSpeedWithoutBias
Definition AnimPhysicsSolver.h:349
float MinimumForce
Definition AnimPhysicsSolver.h:352
float InverseInertiaImpulse
Definition AnimPhysicsSolver.h:361
ENGINE_API void Iter(float DetlaTime)
Definition AnimPhysicsSolver.cpp:304
ENGINE_API void UpdateCachedData()
Definition AnimPhysicsSolver.cpp:332
FVector SecondPosition
Definition AnimPhysicsSolver.h:340
ENGINE_API void RemoveBias()
Definition AnimPhysicsSolver.cpp:299
FVector FirstPosition
Definition AnimPhysicsSolver.h:337
ENGINE_API FAnimPhysLinearLimit()
Definition AnimPhysicsSolver.cpp:279
float TargetSpeed
Definition AnimPhysicsSolver.h:346
float Maximumforce
Definition AnimPhysicsSolver.h:355
FVector WorldSpacePosition0
Definition AnimPhysicsSolver.h:364
FVector WorldSpacePosition1
Definition AnimPhysicsSolver.h:367
FVector LimitNormal
Definition AnimPhysicsSolver.h:343
float SumImpulses
Definition AnimPhysicsSolver.h:358
Definition AnimPhysicsSolver.h:213
FQuat StartOrientation
Definition AnimPhysicsSolver.h:241
float AngularDamping
Definition AnimPhysicsSolver.h:251
ENGINE_API FVector Spin()
Definition AnimPhysicsSolver.cpp:200
float LinearDamping
Definition AnimPhysicsSolver.h:255
FVector CenterOfMass
Definition AnimPhysicsSolver.h:270
FVector GravityOverride
Definition AnimPhysicsSolver.h:264
FAnimPhysState PreviousState
Definition AnimPhysicsSolver.h:267
bool bLinearDampingOverriden
Definition AnimPhysicsSolver.h:254
bool bWindEnabled
Definition AnimPhysicsSolver.h:244
FVector StartPosition
Definition AnimPhysicsSolver.h:240
FMatrix InertiaTensor
Definition AnimPhysicsSolver.h:233
FMatrix InverseTensorWithoutMass
Definition AnimPhysicsSolver.h:228
TArray< FAnimPhysShape > Shapes
Definition AnimPhysicsSolver.h:279
bool bUseGravityOverride
Definition AnimPhysicsSolver.h:261
float Mass
Definition AnimPhysicsSolver.h:222
FAnimPhysWindData WindData
Definition AnimPhysicsSolver.h:247
float InverseMass
Definition AnimPhysicsSolver.h:225
FQuat NextOrientation
Definition AnimPhysicsSolver.h:237
AnimPhysCollisionType CollisionType
Definition AnimPhysicsSolver.h:273
float SphereCollisionRadius
Definition AnimPhysicsSolver.h:276
bool bAngularDampingOverriden
Definition AnimPhysicsSolver.h:250
FQuat PreviousOrientation
Definition AnimPhysicsSolver.h:239
FVector NextPosition
Definition AnimPhysicsSolver.h:236
FVector PreviousPosition
Definition AnimPhysicsSolver.h:238
float GravityScale
Definition AnimPhysicsSolver.h:258
FMatrix InverseWorldSpaceTensor
Definition AnimPhysicsSolver.h:231
Definition AnimPhysicsSolver.h:174
const FAnimPhysState & GetState() const
Definition AnimPhysicsSolver.h:188
FAnimPhysPose & GetPose()
Definition AnimPhysicsSolver.h:184
FVector AngularMomentum
Definition AnimPhysicsSolver.h:182
FAnimPhysPose Pose
Definition AnimPhysicsSolver.h:179
FAnimPhysState & GetState()
Definition AnimPhysicsSolver.h:187
ENGINE_API FAnimPhysState()
Definition AnimPhysicsSolver.cpp:143
const FAnimPhysPose & GetPose() const
Definition AnimPhysicsSolver.h:185
FVector LinearMomentum
Definition AnimPhysicsSolver.h:181
Definition AnimPhysicsSolver.h:425
static ENGINE_API void ConstrainAlongDirection(float DeltaTime, TArray< FAnimPhysLinearLimit > &LimitContainer, FAnimPhysRigidBody *FirstBody, const FVector &FirstPosition, FAnimPhysRigidBody *SecondBody, const FVector &SecondPosition, const FVector &AxisToConstrain, const FVector2D Limits, float MinimumForce=-MAX_flt, float MaximumForce=MAX_flt)
Definition AnimPhysicsSolver.cpp:522
static ENGINE_API void ConstrainPlanar(float DeltaTime, TArray< FAnimPhysLinearLimit > &LimitContainer, FAnimPhysRigidBody *Body, const FTransform &PlaneTransform)
Definition AnimPhysicsSolver.cpp:781
static ENGINE_API FMatrix CalculateInertia(const TArray< FVector > &InVertices, const TArray< FIntVector > &InTriangles, const FVector &InCenterOfMass)
Definition AnimPhysicsSolver.cpp:412
static constexpr float AngularAccelerationAlpha
Definition AnimPhysicsSolver.h:441
static ENGINE_API bool bEnableDetailedStats
Definition AnimPhysicsSolver.h:429
static ENGINE_API void ConstrainConeAngle(float DeltaTime, TArray< FAnimPhysAngularLimit > &LimitContainer, FAnimPhysRigidBody *FirstBody, const FVector &Normal0, FAnimPhysRigidBody *SecondBody, const FVector &Normal1, float LimitAngle, float InJointBias)
Definition AnimPhysicsSolver.cpp:762
static ENGINE_API void ConstrainPositionPrismatic(float DeltaTime, TArray< FAnimPhysLinearLimit > &LimitContainer, FAnimPhysRigidBody *FirstBody, const FVector &FirstPosition, FAnimPhysRigidBody *SecondBody, const FVector &SecondPosition, const FQuat &PrismRotation, const FVector &LimitsMin, const FVector &LimitsMax)
Definition AnimPhysicsSolver.cpp:555
static ENGINE_API void PhysicsUpdate(float DeltaTime, TArray< FAnimPhysRigidBody * > &Bodies, TArray< FAnimPhysLinearLimit > &LinearLimits, TArray< FAnimPhysAngularLimit > &AngularLimits, TArray< FAnimPhysSpring > &Springs, const FVector &GravityDirection, const FVector &ExternalForce, const FVector &ExternalLinearAcc, const FVector &ExternalAngularAcc, const FVector &ExternalAngularVelocity, int32 NumPreIterations=8, int32 NumPostIterations=2)
Definition AnimPhysicsSolver.cpp:924
static ENGINE_API void CreateSpring(TArray< FAnimPhysSpring > &SpringContainer, FAnimPhysRigidBody *Body0, FVector Position0, FAnimPhysRigidBody *Body1, FVector Position1)
Definition AnimPhysicsSolver.cpp:837
static ENGINE_API void ScaleRigidBodyMass(FAnimPhysRigidBody *InOutRigidBody, float Scale)
Definition AnimPhysicsSolver.cpp:483
static ENGINE_API void ApplyImpulse(FAnimPhysRigidBody *InOutRigidBody, const FVector &InWorldOrientedImpactPoint, const FVector &InImpulse)
Definition AnimPhysicsSolver.cpp:515
static ENGINE_API float CoriolisAlpha
Definition AnimPhysicsSolver.h:432
static ENGINE_API float CalculateVolume(const TArray< FVector > &InVertices, const TArray< FIntVector > &InTriangles)
Definition AnimPhysicsSolver.cpp:342
static ENGINE_API void ConstrainSphericalInner(float DeltaTime, TArray< FAnimPhysLinearLimit > &LimitContainer, FAnimPhysRigidBody *Body, const FTransform &SphereTransform, float SphereRadius)
Definition AnimPhysicsSolver.cpp:800
static ENGINE_API FVector CalculateCenterOfMass(const TArray< FVector > &InVertices, const TArray< FIntVector > &InTriangles)
Definition AnimPhysicsSolver.cpp:368
static ENGINE_API void ConstrainPositionNailed(float DeltaTime, TArray< FAnimPhysLinearLimit > &LimitContainer, FAnimPhysRigidBody *FirstBody, const FVector &FirstPosition, FAnimPhysRigidBody *SecondBody, const FVector &SecondPosition)
Definition AnimPhysicsSolver.cpp:544
static ENGINE_API float EulerAlpha
Definition AnimPhysicsSolver.h:438
static ENGINE_API void ConstrainSphericalOuter(float DeltaTime, TArray< FAnimPhysLinearLimit > &LimitContainer, FAnimPhysRigidBody *Body, const FTransform &SphereTransform, float SphereRadius)
Definition AnimPhysicsSolver.cpp:819
static ENGINE_API float CentrifugalAlpha
Definition AnimPhysicsSolver.h:435
static ENGINE_API void ConstrainAngularRange(float DeltaTime, TArray< FAnimPhysAngularLimit > &LimitContainer, FAnimPhysRigidBody *FirstBody, FAnimPhysRigidBody *SecondBody, const FQuat &JointFrame, AnimPhysTwistAxis TwistAxis, const FVector &JointLimitMin, const FVector &JointLimitMax, float InJointBias)
Definition AnimPhysicsSolver.cpp:753
Definition AnimPhysicsSolver.h:51
const float JointBiasFactor
Definition AnimPhysicsSolver.h:53
const float AngularDamping
Definition AnimPhysicsSolver.h:59
const float LinearDamping
Definition AnimPhysicsSolver.h:56
const float DefaultSpringConstantAngular
Definition AnimPhysicsSolver.h:62
const float DefaultSpringConstantLinear
Definition AnimPhysicsSolver.h:61
Definition AnimPhysicsSolver.h:115
FVector operator*(const FVector &InPoint) const
Definition AnimPhysicsSolver.h:152
FAnimPhysPose Inverse() const
Definition AnimPhysicsSolver.h:140
FVector Position
Definition AnimPhysicsSolver.h:116
FAnimPhysPose(const FVector &InPosition, const FQuat &InOrient, const float &InScale)
Definition AnimPhysicsSolver.h:126
FMatrix Matrix() const
Definition AnimPhysicsSolver.h:147
FPlane TransformPlane(const FPlane &InPlane)
Definition AnimPhysicsSolver.h:162
float Scale
Definition AnimPhysicsSolver.h:118
FAnimPhysPose operator*(const FAnimPhysPose &InPose) const
Definition AnimPhysicsSolver.h:157
FAnimPhysPose(const FVector &InPosition, const FQuat &InOrient)
Definition AnimPhysicsSolver.h:120
FAnimPhysPose()
Definition AnimPhysicsSolver.h:132
FQuat Orientation
Definition AnimPhysicsSolver.h:117
Definition AnimPhysicsSolver.h:84
float Volume
Definition AnimPhysicsSolver.h:105
ENGINE_API FAnimPhysShape()
Definition AnimPhysicsSolver.cpp:63
TArray< FIntVector > Triangles
Definition AnimPhysicsSolver.h:102
static ENGINE_API FAnimPhysShape MakeBox(const FVector &Extents)
Definition AnimPhysicsSolver.cpp:76
FVector CenterOfMass
Definition AnimPhysicsSolver.h:108
TArray< FVector > Vertices
Definition AnimPhysicsSolver.h:99
ENGINE_API void TransformVerts(FTransform &InTransform)
Definition AnimPhysicsSolver.cpp:132
Definition AnimPhysicsSolver.h:385
FAnimPhysRigidBody * Body1
Definition AnimPhysicsSolver.h:388
bool bApplyAngular
Definition AnimPhysicsSolver.h:413
FVector AngularTarget
Definition AnimPhysicsSolver.h:394
FAnimPhysRigidBody * Body0
Definition AnimPhysicsSolver.h:387
ENGINE_API void ApplyForces(float DeltaTime)
Definition AnimPhysicsSolver.cpp:1045
FVector Anchor1
Definition AnimPhysicsSolver.h:401
FVector Anchor0
Definition AnimPhysicsSolver.h:400
float SpringConstantLinear
Definition AnimPhysicsSolver.h:404
bool bApplyLinear
Definition AnimPhysicsSolver.h:410
float SpringConstantAngular
Definition AnimPhysicsSolver.h:407
FQuat TargetOrientationOffset
Definition AnimPhysicsSolver.h:391
AnimPhysTwistAxis AngularTargetAxis
Definition AnimPhysicsSolver.h:397
Definition AnimPhysicsSolver.h:195
FVector WindDirection
Definition AnimPhysicsSolver.h:203
float WindAdaption
Definition AnimPhysicsSolver.h:206
float WindSpeed
Definition AnimPhysicsSolver.h:200
float BodyWindScale
Definition AnimPhysicsSolver.h:197
TQuat< T > Inverse() const
Definition Quat.h:1264
static UE_FORCEINLINE_HINT double DotProduct(const TVector< double > &A, const TVector< double > &B)
Definition Vector.h:1559