Rigid body game physics 3
25 Nov 2019part 1 part 2 part 3 part 4 part 5 part 6
Update: See Getting started with the Jolt Physics Engine
The following article is based on Hubert Eichner’s article on inequality constraints.
Inequality Constraints for Resting Contacts
Contact points (resting contacts) are represented as inequality constraints. In contrast to a joint, a resting contact can only create repellent forces and no attracting forces. Similar to a joint constraint, the resting contact is represented using a function C(y(t)). Here C is one-dimensional and it is basically the distance of the two objects at the contact point. The inequality constraint of the resting contact is with the matrix J having one row and twelve columns. Instead of anchor points, one uses vectors ri and rj from the center of each object to the contact point. Using the contact normal n the inequality constraint becomes: The rotational component can be simplified as shown below: Thus the linear components of J are And the angular components of J are The correction term depends on the distance d. I.e. if the distance is negative, a correction is required so that the objects do not penetrate each other any more.
Sequential Impulses (updated)
The impulses generated by contact constraints and joint constraints are accumulated in a loop. The (cumulative) λ obtained for contact constraint furthermore is clipped to be greater or equal to zero. Note that it has to be the cumulative value which is clipped. The algorithm for solving the joint and contact constraints becomes:
- for each iteration
- for each joint
- compute Jacobian J and correction vector b
- predict speed u
- compute λ
- compute the impulse P
- add P to accumulated impulses of the two objects
- for each resting contact
- subtract old impulses P from previous iteration from accumulated impulses of the two objects
- compute Jacobian J and correction vector b
- predict speed u
- compute new λ and clip it to be greater or equal to zero
- compute the impulse P
- add P to accumulated impulses of the two objects
- for each joint
- use impulses and external forces to perform Runge Kutta integration step
The sequential impulse iterations have to be performed four times when using the Runge-Kutta method. The value λ is stored as Pn for limiting friction impulses lateron.