Contact Manifolds
Executive Summary
Contact
Contact Manifolds
Overlap Happens
Approximate Manifolds
Contact Points
Example Manifold
Contact Manifold Quality
Fuzziness
Extreme Fuzziness
Using the SAT
Example: 2D Box-Box SAT
Box-Box Clipping Setup
Box-Box Clipping
Feature Flip-Flop
Coherence
Feature-Based Contact Points
Contact Point IDs
GJK Contact Points
GJK Shallow Contact
GJK Contact Margins
GJK Contact Point
GJK Deep Contact
Deep Contact
GJK Manifolds
Building the Manifold
Manifold Persistence
Adding New Points
Manifold Reduction
Example Reduction
Further Reading
368.00K
Category: informaticsinformatics

Contact Manifolds

1. Contact Manifolds

Erin Catto
Blizzard Entertainment

2. Executive Summary

Constraint solvers need contact points to
prevent penetration.
We can use SAT to compute a contact
manifold in one shot.
We can use GJK to build up a contact
manifold point-by-point.

3. Contact

Contact occurs when two shapes touch.
We model contact to prevent penetration
and to simulate friction.
Modeling contact requires some
geometry and a lot of finesse.

4. Contact Manifolds

For convex polyhedra, a contact manifold
is ideally a single point, a line segment,
or a convex polygon.
For general convex 3D shapes, the
contact manifold is a convex 2D shape.
Did I mention overlap?

5. Overlap Happens

What we want.
What we get.

6. Approximate Manifolds

We use a collection of contact points to
approximate the contact manifold.
Our goal is fast, stable, and plausible
simulation.
In this sense, computing good manifolds
is an art.

7. Contact Points

Position
Normal
Penetration
Contact ID
n
p

8. Example Manifold

n
Two points and a common normal

9. Contact Manifold Quality

When objects penetrate significantly the
contact manifold is fuzzy.
Contact solvers like coherence.
Be consistent from step-to-step.

10. Fuzziness

n
n
n
manifold 1
manifold 2
manifold 3

11. Extreme Fuzziness

n
n
manifold 1
manifold 2

12. Using the SAT

Mainly useful for convex polyhedra
(boxes, triangles, etc).
Find the axis of minimum penetration.
For edge-edge contact, find the midpoint.
For face contact, use SutherlandHodgeman clipping.

13. Example: 2D Box-Box SAT

First find the separating
axis with the minimum
penetration.
In 2D the separating axis
is a face normal.
n

14. Box-Box Clipping Setup

Identify reference face
Identify incident face
incident
reference
n

15. Box-Box Clipping

clipping planes
Clip incident face
against reference
face side planes (but
not the reference
face).
Consider clip points
with positive
penetration.
n

16. Feature Flip-Flop

Which normal is the
min separating axis?
Apply weightings to
prefer one axis over
another.
Improved coherence.
n1
n2

17. Coherence

Apply old force/impulse solution at the
beginning of the step.
Fewer iterations and greater stability.
We need a way to match old and new
contacts.

18. Feature-Based Contact Points

Each contact point is the result of
clipping.
It is the junction of two different edges.
An edge may come from either box.
Store the two edge numbers with each
contact point – this is the Contact ID.

19. Contact Point IDs

e1
c1
e4
e2
box 1 edge 2
2
n
box 2 edge 3
e3
c1
c2
c2
1
box 2 edge 3
box 2 edge 4

20. GJK Contact Points

Three cases:
- No contact
- Shallow contact
- Deep contact

21. GJK Shallow Contact

The support points are scaled up by a
small margin to detect contact.
Compute the closest points (no margin).
This gives the position and normal.
The penetration is the margin minus the
true distance.

22. GJK Contact Margins

Core Shape
Core Shape
Margin

23. GJK Contact Point

normal
point

24. GJK Deep Contact

An awkward encounter …

25. Deep Contact

Use some other algorithm.
It will be slower than GJK, but it won’t last
long.
SAT, EPA, brute force.
Read Gino’s book to learn EPA.

26. GJK Manifolds

GJK only gives one contact point at a
time.
We hold on to and treasure each contact
point.
Build a manifold over several time steps.
This automatically provides coherence.

27. Building the Manifold

t=0
t=1
p1
t=2
p1
p2

28. Manifold Persistence

Track the points in each body.
If the points move too far apart, dismiss
them.
This is bad for sliding.
Use Contact IDs?

29. Adding New Points

Keep a minimal set of points per manifold
(e.g. 4 points).
Reject new points that are too close to
old points.

30. Manifold Reduction

This applies to one-shot and incremental
manifolds.
We want to keep the minimum number of
contact points for a stable simulation.
This improves performance drastically.

31. Example Reduction

A Table
Before
After

32. Further Reading

http://www.gphysics.com/downloads/
http://www.continuousphysics.com
Collision Detection in Interactive 3D
Environments by Gino van den Bergen
Fast Contact Reduction for Dynamics Simulation
by Adam Moravanszky and Pierre Terdiman in
Game Programming Gems 4.
English     Русский Rules