Continuous Collision Detection of General Convex Objects

Download Report

Transcript Continuous Collision Detection of General Convex Objects

Physics for Games Programmers Tutorial
Motion and Collision – It’s All Relative
Squirrel Eiserloh
[email protected]
Lead Programmer
Ritual Entertainment
www.ritual.com
www.algds.org
2
Takeaway

A comfortable, intuitive understanding of:
The Problems of Discrete Simulation
 Continuous Collision Detection
 Applying Relativity to Game Physics
 Configuration Space
 Collisions in Four Dimensions
 The Problems of Rotation
 Why this is all really important even if you’re
doing simple cheesy 2d games at home in your
underwear in your spare time

3
The Problem
Discrete physics simulation falls
embarrassingly short of reality.
 “Real” physics is prohibitively expensive...
 ...so we cheat.
 We need to cheat enough to be able to
run in real time.
 We need to not cheat so much that things
break in a jarring and unrecoverable way.
 Much of the challenge is knowing how and
when to cheat.

4
Overview
Simulation
 Tunneling
 Movement Bounds
 Swept Shapes
 Einstein Says...
 Minkowski Says...
 Rotation

5
Also, I promise...
No math
Simulation
(Sucks)
7
Problems with Simulation

Flipbook syndrome
8
Problems with Simulation


Flipbook syndrome
Things can happen inbetween snapshots
9
Problems with Simulation


Flipbook syndrome
Things mostly happen
in-between snapshots
10
Problems with Simulation



Flipbook syndrome
Things mostly happen
in-between snapshots
Curved trajectories
treated as piecewise
linear
11
Problems with Simulation




Flipbook syndrome
Things mostly happen
in-between snapshots
Curved trajectories
treated as piecewise
linear
Terms often assumed
to be constant
throughout the frame
12
Problems with Simulation





Flipbook syndrome
Things mostly happen
in-between snapshots
Curved trajectories
treated as piecewise
linear
Terms often assumed
to be constant
throughout the frame
Error accumulates
13
Problems with Simulation

Rotations are often
assumed to happen
instantaneously at
frame boundaries
(cont’d)
14
Problems with Simulation


Rotations are often
assumed to happen
instantaneously at
frame boundaries
Energy is not always
conserved


Energy loss can be
undesirable
Energy gain is evil

Simulations explode!
(cont’d)
15
Problems with Simulation


Rotations are often
assumed to happen
instantaneously at
frame boundaries
Energy is not always
conserved


Energy loss can be
undesirable
Energy gain is evil


Simulations explode!
Tunneling

(Also evil!)
(cont’d)
16
Overlapping Objects



Question #1: Do A
and B overlap?
Plenty of reference
material to help solve
this, but...
...this is often the
wrong question to ask
(begs tunneling).
Tunneling
(Sucks)
18
Tunneling

Small objects tunnel more easily
19
Tunneling

(cont’d)
Possible solutions

Minimum size requirement?

Inadequate; fast objects still tunnel
20
Tunneling

(cont’d)
Fast-moving objects tunnel more easily
21
Tunneling

(cont’d)
Possible solutions

Minimum size requirement?


Maximum speed limit?


Inadequate; fast objects still tunnel
Inadequate; since speed limit is a function of object
size, this would mean small & fast objects (bullets)
would not be allowed
Smaller time step?

Helpful, but inadequate; this is essentially the same
as a speed limit
22
Tunneling

Besides, even with
min. size requirements
and speed limits and a
small timestep, you
still have degenerate
cases that cause
tunneling
(cont’d)
23
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


Okay, so tunneling really sucks. What can
we do about it?
Movement Bounds
25
Movement Bounds

Disc / Sphere
26
Movement Bounds

Disc / Sphere

AABB (Axis-Aligned
Bounding Box)
27
Movement Bounds

Disc / Sphere

AABB (Axis-Aligned
Bounding Box)

OBB (Oriented
Bounding Box)
28
Movement Bounds


Question #2: Could
A and B have collided
during the frame?
Better than Question
#1 (solves
tunneling!), but...
29
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
positives).
30
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
32
Swept Shapes

Swept disc / sphere
(n-sphere): capsule
33
Swept Shapes


Swept disc / sphere
(n-sphere): capsule
Swept AABB: convex
polytope (polygon in
2d, polyhedron in 3d)
34
Swept Shapes



Swept disc / sphere
(n-sphere): capsule
Swept AABB: convex
polytope (polygon in
2d, polyhedron in 3d)
Swept triangle /
tetrahedron (simplex):
convex polytope
35
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
36
Swept Shapes

Like movement
bounds, only with a
perfect fit!
(cont’d)
37
Swept Shapes


Like movement
bounds, only with a
perfect fit!
Still no false negatives
(tunneling).
(cont’d)
38
Swept Shapes



Like movement
bounds, only with a
perfect fit!
Still no false negatives
(tunneling).
Finally, no false
positives, either!
(cont’d)
39
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)
40
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.

41
42
Einstein Says...

Coordinate systems are relative
Relative Coordinate
Systems
44
Relative Coordinate Systems

World coordinates
45
Relative Coordinate Systems


World coordinates
A’s local coordinates
46
Relative Coordinate Systems



World coordinates
A’s local coordinates
B’s local coordinates
47
Relative Coordinate Systems
Math is often nicer at the origin.
(x-h)2 + (y-k)2 = r2
x2 + y2 = r2
48
Einstein Says...
Coordinate systems are relative
 Motion is relative

Relative Motion
50
Relative Motion

"Frames of Reference"

World frame
51
Relative Motion

"Frames of Reference"

World frame
A's frame

52
Relative Motion

"Frames of Reference"

World frame
A's frame
B's frame


53
Relative Motion

"Frames of Reference"

World frame
A's frame
B's frame
Inertial frame



54
Relative Motion

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)
55
(Does Not Suck)
Relative Collision
Bodies
57
Relative Collision Bodies

Collision check
equivalencies (disc)
58
Relative Collision Bodies


Collision check
equivalencies (disc)
...AABB
59
Relative Collision Bodies



Collision check
equivalencies (disc)
...AABB
Can even reduce one
body to a singularity
60
Relative Collision Bodies




Collision check
equivalencies (disc)
...AABB
Can even reduce one
body to a singularity
“Tracing” or “Rubbing”
collision bodies
together
61
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
62
Relative Collision Bodies

Disc + disc
(cont’d)
63
Relative Collision Bodies


Disc + disc
AABB + AABB
(cont’d)
64
Relative Collision Bodies



Disc + disc
AABB + AABB
Triangle + AABB
(cont’d)
65
Relative Collision Bodies




Disc + disc
AABB + AABB
Triangle + AABB
AABB + triangle
(cont’d)
66
Relative Collision Bodies





Disc + disc
AABB + AABB
Triangle + AABB
AABB + triangle
Polytope + polytope
(cont’d)
67
Relative Collision Bodies






Disc + disc
AABB + AABB
Triangle + AABB
AABB + triangle
Polytope + polytope
Polytope + disc
(cont’d)
68
Relative Collision Bodies
(cont’d)
Things start to get messy when combining
bodies explicitly / manually.
 (Especially in 3d.)
 General solution?

Minkowski Arithmetic
70
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.
71
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.
Minkowski Sums are
commutative:
A+B = B+A

Minkowski Sum of
convex objects is
convex
72
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)
73
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.
74
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)
75
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)
76
Minkowski Differences

If the singularity is
outside the combined
body, A and B do not
overlap.
(cont’d)
77
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)
78
Minkowski Differences
Aoriginvs.
-Borigin
___
(A-B)origin
Borigin
vs.
-Borigin
___
0
(cont’d)
79
Minkowski Differences

In world space, A-B is
“near” the origin
(cont’d)
80
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)
81
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)
82
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)
83
Minkowski Differences
(cont’d)
Translations in A or B simply translate the CSO
84
Minkowski Differences
(cont’d)
Rotations in A or B mutate the CSO
85
Minkowski Sum vs. Difference
Lots of confusion over Minkowski “Sum”
vs. “Difference”.
 Sum is used to “fatten” an object by
“adding” another object (in local
coordinates) to it
 Difference is used to put the objects in
configuration space, i.e. A-B vs. origin.
 Difference sometimes called Sum since
A-B can be expressed as A+(-B)!

86
Minkowski Sum vs. Difference
(cont’d)
Difference is the same as “Spirograph” or
“rubbing”
 Difference is not commutative!


A-B != B-A
Difference and sum produce differentshaped results
 Difference produces CSO (configuration
space obstacle)

87
(Does Not Suck)
Relative Everything
89
Relative Everything

Let’s combine:
Relative Coordinate Systems
 Relative Motion
 Relative Collision Bodies

90
Relative Everything

A vs. B in world frame
(cont’d)
91
Relative Everything


A vs. B in world frame
A vs. B, inertial frame
(cont’d)
92
Relative Everything



A vs. B in world frame
A vs. B, inertial frame
A is moving, B is still
(cont’d)
93
Relative Everything




A
A
A
A
vs. B in world frame
vs. B, inertial frame
is moving, B is still
is CSO, B is point
(cont’d)
94
Relative Everything





A vs. B in world frame
A vs. B, inertial frame
A is moving, B is still
A is CSO, B is point
A is moving CSO, B is
still point
(cont’d)
95
Relative Everything






A vs. B in world frame
A vs. B, inertial frame
A is moving, B is still
A is CSO, B is point
A is moving CSO, B is
still point
A is still CSO, B is
moving point
(cont’d)
96
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)
97
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)
98
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)
Determining Collision
Time
100
Determining Collision Time

Method #1: Frame Subdivision
101
Subdividing Movement Frame

If a swept-shape (or
movement bounds)
test says “yes”:
102
Subdividing Movement Frame



If a swept-shape (or
movement bounds)
test says “yes”:
Cut the frame in half;
perform two separate
tests (first half first,
second half second).
First positive test is
when the collision
occurred.
103
Subdividing Movement Frame
(cont’d)

Can recurse (1/2, 1/4,
1/8...) to the desired
level of granularity
104
Subdividing Movement Frame
(cont’d)




Can recurse (1/2, 1/4,
1/8...) to the desired
level of granularity
If both tests negative,
no collision (was a
false positive).
Still inexact
(minimizing, not
eliminating, false
positives)
Gets expensive
105
Determining Collision Time
Method #1: Frame Subdivision
 Method #2: 4D* Continuous Collision
Detection

 *(N+1
dimensions; 3D for 2D physics, etc.)
Spacetime
107
Spacetime

Spacetime is a Physics construct which
combines N-dimensional space with an
extra dimension for time, yielding a unified
model with N+1 dimensions.
Space (1D) + time (1D) = spacetime (2D)
 Space (2D) + time (1D) = spacetime (3D)
 Space (3D) + time (1D) = spacetime (4D)

108
Spacetime Diagrams

1D space + time = 2D

Just an X vs. T graph!
109
Spacetime Diagrams

1D space + time = 2D


Just an X vs. T graph!
2D space + time = 3D

No problem.
110
Spacetime Diagrams

1D space + time = 2D


2D space + time = 3D


Just an X vs. T graph!
No problem.
Another example (2d
space + time = 3D)
111
Spacetime Diagrams

1D space + time = 2D


2D space + time = 3D



Just an X vs. T graph!
No problem.
Another example (2d
space + time = 3D)
3D space + time = 4D

Brainbuster!
?
112
Spacetime Diagrams

(cont’d)
Note that an N-dimensional system in
motion is the same as a still snapshot in
N+1 dimensions
1D animation = 2D spacetime still image
 2D animation = 3D spacetime still image
 3D animation = 4D spacetime still image

113
Spacetime Diagrams
1D animation
(cont’d)
2D spacetime still image
114
Spacetime Diagrams
2D animation
(cont’d)
3D spacetime still image
115
Spacetime Diagrams

(cont’d)
How do you envision a 4D object?

Use 2D animation -> 3D spacetime diagram as
a mental analogy.


Fun reading: Flatland by Edwin Abbott
Think about a 4D object that you’re already
familiar with.

(The universe in motion!)
116
Spacetime Diagrams
(cont’d)
Invented by Hermann Minkowski
 Also called “Minkowski Diagrams”

117
(Rules)
Time-Swept Shapes
119
Time-Swept Shapes



Sweep out shapes,
but do it over time in
a spacetime diagram
Define time over
frame as being in the
interval [0,1]
As before, we can
play around with lots
of relativistic
variations:
120
Time-Swept Shapes

A vs. B in world frame
(cont’d)
121
Time-Swept Shapes


A vs. B in world frame
A is moving, B is still
(cont’d)
122
Time-Swept Shapes



A vs. B in world frame
A is moving, B is still
A is CSO, B is point
(cont’d)
123
Time-Swept Shapes




A vs. B in world frame
A is moving, B is still
A is CSO, B is point
A is still CSO, B is
moving (swept) point
(cont’d)
124
Time-Swept Shapes




To solve for collision time,
we intersect the pointswept ray against the CSO
The ‘t’ coordinate at the
intersection point is the
time [0,1] of collision
Collision check is done in
N+1 dimensions
Which means, in a 3D
game, we collide a 4D ray
vs. a 4D body! (What?)
(cont’d)
125
Time-Swept Shapes



Wait, it gets easier...
When we view this
diagram (CSO vs
moving point) down
the time axis, i.e.
from “overhead”:
Since CSO is not
moving, it looks 2D
from overhead...
(cont’d)
126
Time-Swept Shapes



We can reduce this back
down to N dimensions
(from N+1) since we are
looking down the time
axis!
So it becomes an Ndimesional ray vs. Ndimensional body again.
Which means, in a 3D
game, we collide a 3D ray
vs. a 3D body.
(cont’d)
127
128
Time-Swept Shapes



Question #4: When,
during the frame, did
A and B collide?
Finally, the right
question - and we
have a complete
answer!
With fixed cost, and
with exact results (no
false anything).
(cont’d)
129
Time-Swept Shapes

BTW, this is essentially
the same as solving
for the fraction of the
singularity-translation
ray from our original
Minkowski Difference
“inadmissible
translations” picture!
(cont’d)
Quality vs. Quantity
or
“You Get What You Pay For”
131
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)
133
Rotations


Continuous rotational
collision detection
sucks
Rotational tunneling
alone is problematic
134
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
135
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
137
Summary





The nature of simulation causes us real
problems... problems which can’t be ignored.
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.
138
Summary
(cont’d)
Einstein and Minkowski are cool.
 Rotations suck.
 Doing real-time collision detection in 4D
spacetime doesn’t have to be hard.
 Or expensive.
 Or confusing.

139
Questions?

Feel free to reach me by email at:
[email protected]
or
[email protected]