Continuous Collision Detection of General Convex Objects

Download Report

Transcript Continuous Collision Detection of General Convex Objects

Physics for Games Programmers
Reframing the Problem
Squirrel Eiserloh
Technical Director
MumboJumbo Games
[email protected]
www.algds.org
Physics for Games Programmers
Reframing the Problem
a.k.a. “It’s All Relative”
Squirrel Eiserloh
Technical Director
MumboJumbo Games
[email protected]
www.algds.org
3
Overview
Tunneling
 Movement Bounds
 Swept Shapes
 Einstein Says...
 Minkowski Says...
 Rotation

Tunneling
(Sucks)
5
Tunneling



Question #1: Do
objects A and B
overlap?
Plenty of reference
material to help solve
this, but...
...this is often the
wrong question to ask
(begs tunneling).
6
Tunneling
7
Tunneling
8
Tunneling
9
Tunneling
10
Tunneling

(cont’d)
Tunneling is very, very bad – this is not a
“mundane detail”
Things falling through world
 Bullets passing through people or walls
 Players getting places they shouldn’t
 Players missing a trigger boundary

Tunneling is a false negative
 Okay, so tunneling really sucks. What can
we do about it?

Movement Bounds
12
Movement Bounds

Disc / Sphere
13
Movement Bounds

Disc / Sphere

AABB (Axis-Aligned
Bounding Box)
14
Movement Bounds

Disc / Sphere

AABB (Axis-Aligned
Bounding Box)

OBB (Oriented
Bounding Box)
15
Movement Bounds


Question #2: Could
A and B have collided
during the frame?
Better than Question
#1 (solves
tunneling!), but...
16
Movement Bounds



Question #2: Could
A and B have collided
during the frame?
Better than Question
#1 (solves
tunneling!), but...
...even if the answer
is “yes”, we still don’t
know for sure (false
positive).
17
Movement Bounds

Conclusion

Good: They prevent tunneling! (i.e. no false
negatives)

Bad: They don’t actually tell us whether A and
B collided (still have false positives).

Good: They can be used as a cheap, effective
early rejection test.
Swept Shapes
19
Swept Shapes

Swept disc / sphere
(n-sphere): capsule
20
Swept Shapes


Swept disc / sphere
(n-sphere): capsule
Swept AABB: convex
polytope (polygon in
2d, polyhedron in 3d)
21
Swept Shapes



Swept disc / sphere
(n-sphere): capsule
Swept AABB: convex
polytope (polygon in
2d, polyhedron in 3d)
Swept triangle /
tetrahedron (simplex):
convex polytope
22
Swept Shapes




Swept disc / sphere
(n-sphere): capsule
Swept AABB: convex
polytope (polygon in
2d, polyhedron in 3d)
Swept triangle /
tetrahedron (simplex):
convex polytope
Swept polytope:
convex polytope
23
Swept Shapes

Like movement
bounds, only with a
perfect fit!
(cont’d)
24
Swept Shapes


Like movement
bounds, only with a
perfect fit!
Still no false negatives
(tunneling).
(cont’d)
25
Swept Shapes



Like movement
bounds, only with a
perfect fit!
Still no false negatives
(tunneling).
Finally, no false
positives, either!
(cont’d)
26
Swept Shapes




Like movement
bounds, only with a
perfect fit!
Still no false negatives
(tunneling).
Finally, no false
positives, either!
No, wait, nevermind.
Still have ‘em. Rats.
(cont’d)
27
Swept Shapes




Like movement
bounds, only with a
perfect fit!
Still no false negatives
(tunneling).
Finally, no false
positives, either!
No, wait, nevermind.
Still have ‘em. Rats.
(cont’d)
28
Swept Shapes




Like movement
bounds, only with a
perfect fit!
Still no false negatives
(tunneling).
Finally, no false
positives, either!
No, wait, nevermind.
Still have ‘em. Rats.
(cont’d)
29
Swept Shapes

(cont’d)
Conclusion
Suck?
 Can be used as early rejection test, but...
 ...movement bounds are better for that.
 If you’re not too picky...
 ...they DO solve a large number of nasty
problems (especially tunneling)
 ...and can serve as a poor man’s continuous
collision detection for a basic engine.

30
31
Einstein Says...

Coordinate systems are relative
Relative Coordinate
Systems
33
Relative Coordinate Systems

World coordinates
34
Relative Coordinate Systems


World coordinates
A’s local coordinates
35
Relative Coordinate Systems



World coordinates
A’s local coordinates
B’s local coordinates
36
Relative Coordinate Systems




World coordinates
A’s local coordinates
B’s local coordinates
Many others (e.g.
origin at point of
impact)
37
Relative Coordinate Systems
(cont’d)

Ball vs. world...
38
Relative Coordinate Systems
(cont’d)


Ball vs. world...
in world coordinates
39
Relative Coordinate Systems
(cont’d)


Ball vs. world...
in world coordinates


x component
y component
40
Relative Coordinate Systems
(cont’d)


Ball vs. world...
in world coordinates



x component
y component
in impact coordinates
41
Relative Coordinate Systems
(cont’d)


Ball vs. world...
in world coordinates



x component
y component
in impact coordinates


parallel component
perpendicular
component
42
Relative Coordinate Systems
(cont’d)


Ball vs. world...
in world coordinates



in impact coordinates



x component
y component
parallel component
perpendicular
component
Change in motion
happens along the
perpendicular axis
43
Relative Coordinate Systems
(cont’d)

Ball vs. ball...
44
Relative Coordinate Systems
(cont’d)


Ball vs. ball...
in world coordinates
45
Relative Coordinate Systems
(cont’d)


Ball vs. ball...
in world coordinates


x component
y component
46
Relative Coordinate Systems
(cont’d)


Ball vs. ball...
in world coordinates



x component
y component
in impact coordinates
47
Relative Coordinate Systems
(cont’d)


Ball vs. ball...
in world coordinates



in impact coordinates



x component
y component
parallel component
perpendicular
component
Energy is exchanged
along the
perpendicular axis
48
Relative Coordinate Systems
(cont’d)
Also, math is often nicer at the origin.
x2 - 2xh + h2 + y2 - 2yk + k2 = r2
x2 + y2 = r2
49
Einstein Says...
Coordinate systems are relative
 Motion is relative

Relative Motion
51
Relative Motion

"Frames of Reference"

World frame
52
Relative Motion

"Frames of Reference"

World frame
A's frame

53
Relative Motion

"Frames of Reference"

World frame
A's frame
B's frame


54
Relative Motion

"Frames of Reference"

World frame
A's frame
B's frame
Inertial frame



55
Relative Motion
(cont’d)

A Rule of Relativistic Collision Detection:

It is always possible to reduce a collision
check between two moving objects to a
collision check between a moving object
and a stationary object (by reframing)
56
(Does Not Suck)
Relative Collision
Bodies
58
Relative Collision Bodies

Collision check
equivalencies (disc)
59
Relative Collision Bodies


Collision check
equivalencies (disc)
...AABB
60
Relative Collision Bodies



Collision check
equivalencies (disc)
...AABB
Can even reduce one
body to a singularity
61
Relative Collision Bodies




Collision check
equivalencies (disc)
...AABB
Can even reduce one
body to a singularity
“Tracing” or “Rubbing”
collision bodies
together
62
Relative Collision Bodies





Collision check
equivalencies (disc)
...AABB
Can even reduce one
body to a singularity
“Tracing” or “Rubbing”
collision bodies
together
Spirograph-out the
reduced body’s origin
63
Relative Collision Bodies





Collision check
equivalencies (disc)
...AABB
Can even reduce one
body to a singularity
“Tracing” or “Rubbing”
collision bodies
together
Spirograph-out the
reduced body’s origin
64
Relative Collision Bodies





Collision check
equivalencies (disc)
...AABB
Can even reduce one
body to a singularity
“Tracing” or “Rubbing”
collision bodies
together
Spirograph-out the
reduced body’s origin
65
Relative Collision Bodies





Collision check
equivalencies (disc)
...AABB
Can even reduce one
body to a singularity
“Tracing” or “Rubbing”
collision bodies
together
Spirograph-out the
reduced body’s origin
66
Relative Collision Bodies





Collision check
equivalencies (disc)
...AABB
Can even reduce one
body to a singularity
“Tracing” or “Rubbing”
collision bodies
together
Spirograph-out the
reduced body’s origin
67
Relative Collision Bodies





Collision check
equivalencies (disc)
...AABB
Can even reduce one
body to a singularity
“Tracing” or “Rubbing”
collision bodies
together
Spirograph-out the
reduced body’s origin
68
Relative Collision Bodies





Collision check
equivalencies (disc)
...AABB
Can even reduce one
body to a singularity
“Tracing” or “Rubbing”
collision bodies
together
Spirograph-out the
reduced body’s origin
69
Relative Collision Bodies





Collision check
equivalencies (disc)
...AABB
Can even reduce one
body to a singularity
“Tracing” or “Rubbing”
collision bodies
together
Spirograph-out the
reduced body’s origin
70
Relative Collision Bodies

Disc + disc
(cont’d)
71
Relative Collision Bodies


Disc + disc
AABB + AABB
(cont’d)
72
Relative Collision Bodies



Disc + disc
AABB + AABB
Triangle + AABB
(cont’d)
73
Relative Collision Bodies




Disc + disc
AABB + AABB
Triangle + AABB
AABB + triangle
(cont’d)
74
Relative Collision Bodies





Disc + disc
AABB + AABB
Triangle + AABB
AABB + triangle
Polytope + polytope
(cont’d)
75
Relative Collision Bodies






Disc + disc
AABB + AABB
Triangle + AABB
AABB + triangle
Polytope + polytope
Polytope + disc
(cont’d)
76
Relative Collision Bodies
(cont’d)
Things start to get messy when combining
bodies explicitly / manually.
 (Especially in 3d.)
 General solution?

Minkowski Arithmetic
78
Minkowski Sums

The Minkowski Sum
(A+B) of A and B is
the result of adding
every point in A to
every point in B.
79
Minkowski Differences

The Minkowski
Difference (A-B) of A
and B is the result of
subtracting every
point in B from every
point in A (or A + -B)
80
Minkowski Differences

The Minkowski
Difference (A-B) of A
and B is the result of
subtracting every
point in B from every
point in A

Resulting shape is
different from A+B.
81
Minkowski Differences

Minkowski Differences
are not commutative:
A-B != B-A

Minkowski Difference
of convex objects is
convex (since A-B =
A+ -B)
(cont’d)
82
Minkowski Differences

Minkowski Differences
are not commutative:
A-B != B-A


Minkowski Difference
of convex objects is
convex (since A-B =
A+ -B)
Minkowski Difference
produces the same
shape as “Spirograph”
(cont’d)
83
Minkowski Differences

If the singularity is
outside the combined
body, A and B do not
overlap.
(cont’d)
84
Minkowski Differences


If the singularity is
outside the combined
body, A and B do not
overlap.
If the singularity is
inside the combined
body (A-B), then A
and B overlap.
(cont’d)
85
Minkowski Differences

In world space, A-B is
“near” the origin
(cont’d)
86
Minkowski Differences
Aoriginvs.
-Borigin
___
(A-B)origin
Borigin
vs.
-Borigin
___
0
(cont’d)
87
Minkowski Differences

Since the singularity
point is always at the
origin (B-B), we can
say...

If (A-B) does not
contain the origin, A
and B do not overlap.
(cont’d)
88
Minkowski Differences

If (A-B) contains the
origin, A and B
overlap.

In other words, we
reduce A vs. B to:

combined body (A-B)
vs.
point (B-B, or origin)
(cont’d)
89
Minkowski Differences

If A and B are in the
same coordinate
system, the
comparison between
A-B and the origin is
said to happen in
configuration space

...in which case A-B is
said to be a
configuration space
obstacle (CSO)
(cont’d)
90
Minkowski Differences
(cont’d)
Translations in A or B simply translate the CSO
91
Minkowski Differences
(cont’d)
Rotations in A or B mutate the CSO
92
(Does Not Suck)
Relative Everything
94
Relative Everything

Let’s combine:
Relative Coordinate Systems
 Relative Motion
 Relative Collision Bodies

95
Relative Everything

A vs. B in world frame
(cont’d)
96
Relative Everything


A vs. B in world frame
A is CSO, B is point
(cont’d)
97
Relative Everything



A vs. B in world frame
A is CSO, B is point
A is moving CSO, B is
still point
(cont’d)
98
Relative Everything




A vs. B in world frame
A is CSO, B is point
A is moving CSO, B is
still point
A is still CSO, B is
moving point

This is the one we
want!
(cont’d)
99
Relative Everything

Question #3: Did A
and B collide during
the frame?



Yes! We can now get
an exact answer.
No false negatives, no
false positives!
However, we still don’t
know WHEN they
collided...
(cont’d)
100
Relative Everything

Why does the exact
collision time matter?



Outcomes can be
different
Order of events (e.g.
multiple collisions) is
relevant
Collision response is
easier when you can
reconstruct the exact
moment of impact
(cont’d)
101
Relative Everything

Question #4: When,
during the frame, did
A and B collide?


The time at which the
ray intersects the CSO
is the time at which the
collision occurred.
Finally, the right
question - and we have
a complete answer!
(cont’d)
102
Relative Everything

The Minkowski
Difference (A-B) / CSO
can also be thought of
as “the set of all
translations [from the
origin] that would
cause a collision”.

A.K.A. the set of
“inadmissible
translations”.
(cont’d)
Quality vs. Quantity
or
“You Get What You Pay For”
104
Quality vs. Quantity
The more you ask, the more you pay.
 Question #1: Do A and B overlap?
 Question #2: Could A and B have
collided during the frame?
 Question #3: Did A and B collide during
the frame?
 Question #4: When, during the frame,
did A and B collide?

Rotations
(Suck)
106
Rotations


Continuous rotational
collision detection
sucks
Rotational tunneling
alone is problematic
107
Rotations



Continuous rotational
collision detection
sucks
Rotational tunneling
alone is problematic
Methods we’ve
discussed here often
don’t work on
rotations, or their
rotational analogue is
quite complex
108
Rotations

(cont’d)
However:
Rotational tunneling is usually not as jarring as
translational tunneling
 Rotational speed limits are actually feasible
 Can do linear approximations of swept
rotations
 Can use bounding shapes to contain pre- and
post-rotated positions
 This is something that many engines never
solve robustly

Summary
110
Summary
Have to worry about false negatives
(tunneling!) as well as false positives.
 Knowing when a collision event took place
can be very important (especially when
resolving it).
 Sometimes a problem (and math) looks
easier when we look at it from a different
viewpoint.
 Can combine bodies in cheaty ways to
simplify things even further.

111
Summary
(cont’d)
Einstein and Minkowski are cool.
 Rotations suck.
 Doing real-time collision detection doesn’t
have to be hard.
 Or expensive.
 Or confusing.

112
Questions?

Feel free to reach me by email at:
[email protected]