Navigation
API > API/Runtime > API/Runtime/Chaos
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
| Name | FPBDCollisionSolverJacobi |
| Type | class |
| Header File | /Engine/Source/Runtime/Experimental/Chaos/Public/Chaos/Collision/PBDCollisionSolverJacobi.h |
| Include Path | #include "Chaos/Collision/PBDCollisionSolverJacobi.h" |
Syntax
class FPBDCollisionSolverJacobi
Constructors
| Name | Remarks | Include Path | Unreal Specifiers |
|---|---|---|---|
FPBDCollisionSolverJacobi() |
NOTE: Does not initialize any properties. See MakeInitialized. | Chaos/Collision/PBDCollisionSolverJacobi.h |
Structs
| Name | Remarks |
|---|---|
| FState |
Constants
| Name | Type | Remarks | Include Path |
|---|---|---|---|
| MaxConstrainedBodies | const int32 | Chaos/Collision/PBDCollisionSolverJacobi.h | |
| MaxPointsPerConstraint | const int32 | Chaos/Collision/PBDCollisionSolverJacobi.h |
Variables
Protected
| Name | Type | Remarks | Include Path | Unreal Specifiers |
|---|---|---|---|---|
| State | FState | Chaos/Collision/PBDCollisionSolverJacobi.h |
Functions
Public
| Name | Remarks | Include Path | Unreal Specifiers |
|---|---|---|---|
int32 AddManifoldPoint() |
Chaos/Collision/PBDCollisionSolverJacobi.h | ||
void DisableShockPropagation() |
Disable mass scaling. | Chaos/Collision/PBDCollisionSolverJacobi.h | |
FSolverReal DynamicFriction() |
Chaos/Collision/PBDCollisionSolverJacobi.h | ||
void EnablePositionShockPropagation() |
Set up the mass scaling for shock propagation, using the position-phase mass scale. | Chaos/Collision/PBDCollisionSolverJacobi.h | |
void EnableVelocityShockPropagation() |
Set up the mass scaling for shock propagation, using the velocity-phase mass scale. | Chaos/Collision/PBDCollisionSolverJacobi.h | |
void FinalizeManifoldPoint
(
const int32 ManifoldPointIndex |
Finish manifold point setup. NOTE: Can only be called after the InitManifoldPoint has been called | Chaos/Collision/PBDCollisionSolverJacobi.h | |
FSolverVec3 GetNetImpulse
(
const int32 ManifoldPointIndex |
Chaos/Collision/PBDCollisionSolverJacobi.h | ||
FSolverVec3 GetNetPushOut
(
const int32 ManifoldPointIndex |
Chaos/Collision/PBDCollisionSolverJacobi.h | ||
FSolverReal GetStaticFrictionRatio
(
const int32 ManifoldPointIndex |
Chaos/Collision/PBDCollisionSolverJacobi.h | ||
void InitManifoldPoint
(
const int32 ManifoldPointIndex, |
Chaos/Collision/PBDCollisionSolverJacobi.h | ||
int32 NumManifoldPoints() |
Chaos/Collision/PBDCollisionSolverJacobi.h | ||
void Reset() |
Reset the state of the collision solver | Chaos/Collision/PBDCollisionSolverJacobi.h | |
void ResetManifold() |
Chaos/Collision/PBDCollisionSolverJacobi.h | ||
void SetFriction
(
const FSolverReal InStaticFriction, |
Chaos/Collision/PBDCollisionSolverJacobi.h | ||
void SetManifoldPoint
(
const int32 ManifoldPointIndex, |
Set up a manifold point (also calls FinalizeManifoldPoint) | Chaos/Collision/PBDCollisionSolverJacobi.h | |
void SetSolverBodies
(
FSolverBody& SolverBody0, |
Chaos/Collision/PBDCollisionSolverJacobi.h | ||
void SetStiffness
(
const FSolverReal InStiffness |
Chaos/Collision/PBDCollisionSolverJacobi.h | ||
bool SolvePositionNoFriction
(
const FSolverReal Dt, |
Calculate and apply the position correction for this iteration. | Chaos/Collision/PBDCollisionSolverJacobi.h | |
bool SolvePositionWithFriction
(
const FSolverReal Dt, |
Chaos/Collision/PBDCollisionSolverJacobi.h | ||
| Get the first (decorated) solver body The decorator add a possible mass scale. | Chaos/Collision/PBDCollisionSolverJacobi.h | ||
const FConstraintSolverBody & SolverBody0 () |
Chaos/Collision/PBDCollisionSolverJacobi.h | ||
| Get the second (decorated) solver body The decorator add a possible mass scale. | Chaos/Collision/PBDCollisionSolverJacobi.h | ||
const FConstraintSolverBody & SolverBody1 () |
Chaos/Collision/PBDCollisionSolverJacobi.h | ||
bool SolveVelocity
(
const FSolverReal Dt, |
Calculate and apply the velocity correction for this iteration. | Chaos/Collision/PBDCollisionSolverJacobi.h | |
FSolverReal StaticFriction() |
Chaos/Collision/PBDCollisionSolverJacobi.h | ||
FSolverReal VelocityFriction() |
Chaos/Collision/PBDCollisionSolverJacobi.h |
Static
| Name | Remarks | Include Path | Unreal Specifiers |
|---|---|---|---|
static FPBDCollisionSolverJacobi MakeInitialized() |
Create a solver that is initialized to safe defaults. | Chaos/Collision/PBDCollisionSolverJacobi.h | |
static FPBDCollisionSolverJacobi MakeUninitialized() |
Create a solver with no initialization. | Chaos/Collision/PBDCollisionSolverJacobi.h |