|
| | FPBDCollisionSolverJacobi () |
| |
| FORCEINLINE_DEBUGGABLE void | Reset () |
| |
| FORCEINLINE_DEBUGGABLE void | ResetManifold () |
| |
| FORCEINLINE_DEBUGGABLE int32 | AddManifoldPoint () |
| |
| FORCEINLINE_DEBUGGABLE FSolverReal | StaticFriction () const |
| |
| FORCEINLINE_DEBUGGABLE FSolverReal | DynamicFriction () const |
| |
| FORCEINLINE_DEBUGGABLE FSolverReal | VelocityFriction () const |
| |
| FORCEINLINE_DEBUGGABLE void | SetFriction (const FSolverReal InStaticFriction, const FSolverReal InDynamicFriction, const FSolverReal InVelocityFriction) |
| |
| FORCEINLINE_DEBUGGABLE void | SetStiffness (const FSolverReal InStiffness) |
| |
| FORCEINLINE_DEBUGGABLE void | SetSolverBodies (FSolverBody &SolverBody0, FSolverBody &SolverBody1) |
| |
| FORCEINLINE_DEBUGGABLE int32 | NumManifoldPoints () const |
| |
| FORCEINLINE_DEBUGGABLE FSolverVec3 | GetNetPushOut (const int32 ManifoldPointIndex) const |
| |
| FORCEINLINE_DEBUGGABLE FSolverVec3 | GetNetImpulse (const int32 ManifoldPointIndex) const |
| |
| FORCEINLINE_DEBUGGABLE FSolverReal | GetStaticFrictionRatio (const int32 ManifoldPointIndex) const |
| |
| 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) |
| |
| 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) |
| |
| FORCEINLINE_DEBUGGABLE void | FinalizeManifoldPoint (const int32 ManifoldPointIndex) |
| |
| FORCEINLINE_DEBUGGABLE FConstraintSolverBody & | SolverBody0 () |
| | Get the first (decorated) solver body The decorator add a possible mass scale.
|
| |
| FORCEINLINE_DEBUGGABLE const FConstraintSolverBody & | SolverBody0 () const |
| |
| FORCEINLINE_DEBUGGABLE FConstraintSolverBody & | SolverBody1 () |
| | Get the second (decorated) solver body The decorator add a possible mass scale.
|
| |
| FORCEINLINE_DEBUGGABLE const FConstraintSolverBody & | SolverBody1 () const |
| |
| void | EnablePositionShockPropagation () |
| | Set up the mass scaling for shock propagation, using the position-phase mass scale.
|
| |
| void | EnableVelocityShockPropagation () |
| | Set up the mass scaling for shock propagation, using the velocity-phase mass scale.
|
| |
| void | DisableShockPropagation () |
| | Disable mass scaling.
|
| |
| FORCEINLINE_DEBUGGABLE bool | SolvePositionNoFriction (const FSolverReal Dt, const FSolverReal MaxPushOut) |
| | Calculate and apply the position correction for this iteration.
|
| |
| FORCEINLINE_DEBUGGABLE bool | SolvePositionWithFriction (const FSolverReal Dt, const FSolverReal MaxPushOut) |
| |
| FORCEINLINE_DEBUGGABLE bool | SolveVelocity (const FSolverReal Dt, const bool bApplyDynamicFriction) |
| | Calculate and apply the velocity correction for this iteration.
|
| |
A Jocobi solver for the contact manifold between two shapes. This solves each manifold point independently and sums and dampens the net impulses before applying to the bodies.
Pros (vs Gauss Seidel):
- If the contacts are symmetric, the impusles will be too. This fixed spurious rotations when a box with high restitution bounces exactly flat on the ground.
- We can run the points in the manifold in parallel
- Stacking is much more stable (but see below) Cons
- We overestimate the impulse and must apply a damping factor to prevent energy gain. It is not clear how we select the value of this damping - it is empirically tuned.
- The damping factor leads to spongey stacks/piles