1
Physics for Games Physics for Games Programmers Programmers Problem Problem
OverviewOverview
Squirrel Eiserloh
Technical DirectorMumboJumbo Games
2
Types of Problems Knowing when to cheat Simplifying things Giving shape to things Moving things around Simulation baggage Detecting (and resolving) collisions Sustained interactions Dealing with the impossible Making it fast enough
3
Knowing When To Cheat
4
Knowing When to Cheat 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.
5
Knowing When to Cheat
Ask: “Will the player notice?” “Will the player care?” “Will the results be predictable?” “Are we at least cheating in a consistent
way?” “Will the simulation break?”
If the simulation breaks, they will notice and they will care
Some crimes are greater than others
6
Simplifying Things
7
Simplifying Things
Simplified bodies
8
Simplifying Things
Simplified bodies Even more
simplified bodies
9
Simplifying Things
Simplified bodies Even more
simplified bodies Convex bodies
10
Simplifying Things
Simplified bodies Even more
simplified bodies Convex bodies Homogeneous
bodies
11
Simplifying Things
Simplified bodies Even more
simplified bodies Convex bodies Homogeneous
bodies Rigid bodies
12
Simplifying Things
Simplified bodies Even more
simplified bodies Convex bodies Homogeneous
bodies Rigid bodies Indestructible
bodies
13
Simplifying Things
Movement is often assumed to be in a vacuum (ignoring air resistance)
14
Simplifying Things
Movement is often assumed to be in a vacuum (ignoring air resistance)
Even when air resistance does get simulated, it is hugely oversimplified
15
Simplifying Things
Collisions are often assumed to be perfect and elastic
That is, 100% of the energy before the collision is maintained after the collision
Think billiard balls
16
Giving Shape to Things
17
Giving Shape to Things
N-sphere 2d: Disc 3d: Sphere
18
Giving Shape to Things
N-sphere 2d: Disc 3d: Sphere
Simplex 2d: Triangle 3d: Tetrahedron
19
Giving Shape to Things
N-sphere 2d: Disc 3d: Sphere
Simplex 2d: Triangle 3d: Tetrahedron
Convex Polytope 2d: Convex Polygon 3d: Convex
Polyhedron a.k.a. “Convex Hull” a.k.a. “Brush” (Quake)
20
Giving Shape to Things
Discrete Oriented Polytope (DOP)
21
Giving Shape to Things
Discrete Oriented Polytope (DOP)
Oriented Bounding Box (OBB)
22
Giving Shape to Things
Discrete Oriented Polytope (DOP)
Oriented Bounding Box (OBB)
Axis-Aligned Bounding Box (AABB)
23
Giving Shape to Things
Discrete Oriented Polytope (DOP)
Oriented Bounding Box (OBB)
Axis-Aligned Bounding Box (AABB)
Capsule
24
Giving Shape to Things
Discrete Oriented Polytope (DOP)
Oriented Bounding Box (OBB)
Axis-Aligned Bounding Box (AABB)
Capsule Cylinder (3d only)
25
Moving Things Around
26
Moving Things Around Kinematics
Describes motion Uses position,
velocity, momentum, acceleration
27
Moving Things Around Kinematics
Describes motion Uses position,
velocity, momentum, acceleration
Dynamics Explains motion Uses forces ...and impulses
28
Moving Things Around Kinematics
Describes motion Uses position,
velocity, momentum, acceleration
Dynamics Explains motion Forces (F=ma) Impulses
Rotation Torque Angular momentum Moment of inertia
29
Moving Things Around
How to compute the next position and velocity from current position and velocity?
This process is called integration;
An algorithm for doing this in an integrator
30
Moving Things Around
How to compute the next position and velocity from current position and velocity?
This process is called integration;
An algorithm for doing this in an integrator
31
Moving Things Around
How to compute the next position and velocity from current position and velocity?
This process is called integration;
An algorithm for doing this in an integrator
32
Moving Things Around
How to compute the next position and velocity from current position and velocity?
This process is called integration;
An algorithm for doing this in an integrator
33
Moving Things Around
How to compute the next position and velocity from current position and velocity?
This process is called integration;
An algorithm for doing this in an integrator
34
Moving Things Around
How to compute the next position and velocity from current position and velocity?
This process is called integration;
An algorithm for doing this in an integrator
Which integration method to use?
35
Moving Things Around
How to compute the next position and velocity from current position and velocity?
This process is called integration;
An algorithm for doing this in an integrator
Which integration method to use?
36
Moving Things Around
How to compute the next position and velocity from current position and velocity?
This process is called integration;
An algorithm for doing this in an integrator
Which integration method to use?
37
Moving Things Around
How to compute the next position and velocity from current position and velocity?
This process is called integration;
An algorithm for doing this in an integrator
Which integration method to use?
38
Moving Things Around
How to compute the next position and velocity from current position and velocity?
This process is called integration;
An algorithm for doing this in an integrator
Which integration method to use?
39
Simulation Baggage
40
Simulation Baggage
Flipbook syndrome
41
Simulation Baggage
Flipbook syndrome Things can happen
in-between snapshots
42
Simulation Baggage
Flipbook syndrome Things mostly
happen in-between snapshots
43
Simulation Baggage
Flipbook syndrome Things mostly
happen in-between snapshots
Curved trajectories treated as piecewise linear
44
Simulation Baggage
Flipbook syndrome Things mostly
happen in-between snapshots
Curved trajectories treated as piecewise linear
Terms often assumed to be constant throughout the frame
45
Simulation Baggage (cont’d)
Error accumulates
46
Simulation Baggage (cont’d)
Error accumulates Energy is not
always conserved Energy loss can be
undesirable Energy gain is evil
Simulations explode!
47
Simulation Baggage (cont’d)
Error accumulates Energy is not
always conserved Energy loss can be
undesirable Energy gain is evil
Simulations explode!
Rotations are often assumed to happen instantaneously at frame boundaries
48
Simulation Baggage (cont’d)
Error accumulates Energy is not always
conserved Energy loss can be
undesirable Energy gain is evil
Simulations explode!
Rotations are often assumed to happen instantaneously at frame boundaries
Numerical nightmares!
49
Collision Detection
50
Collision Detection
We need to determine if A and B intersect
51
Collision Detection
We need to determine if A and B intersect
Worse yet, they could be (and probably are) in motion
52
Collision Detection
We need to determine if A and B intersect
Worse yet, they could be (and probably are) in motion
If they did collide, we probably also need to know when they collided
53
Collision Response
...and we need to figure out how to resolve the collision
54
Sustained Interactions
55
Sustained Interactions
Surface contact
56
Sustained Interactions
Surface contact Edge contact
57
Sustained Interactions
Surface contact Edge contact Contact points
Different solutions
58
Sustained Interactions
Surface contact Edge contact Contact points
Different solutions
59
Sustained Interactions
Surface contact Edge contact Contact points
Different solutions Stacking
60
Sustained Interactions
Surface contact Edge contact Contact points
Different solutions Stacking Friction
Static & Kinetic
61
Sustained Interactions
Surface contact Edge contact Contact points
Different solutions Stacking Friction
Static & Kinetic Constraints & Joints
62
Dealing With the Impossible
63
Dealing With the Impossible
Interpenetration
64
Dealing With the Impossible
Interpenetration Tunneling
65
Dealing With the Impossible
Interpenetration Tunneling
66
Dealing With the Impossible
Interpenetration Tunneling
67
Dealing With the Impossible
Interpenetration Tunneling
68
Tunneling(Sucks)
69
Tunneling
Small objects tunnel more easily
70
Tunneling (cont’d)
Possible solutions Minimum size requirement?
Inadequate; fast objects still tunnel
71
Tunneling (cont’d)
Fast-moving objects tunnel more easily
72
Tunneling (cont’d)
Possible solutions Minimum size requirement?
Inadequate; fast objects still tunnel Maximum speed limit?
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
73
Tunneling (cont’d)
Besides, even with min. size requirements and speed limits and a small timestep, you still have degenerate cases that cause tunneling!
74
Tunneling (cont’d)
Besides, even with min. size requirements and speed limits and a small timestep, you still have degenerate cases that cause tunneling!
75
Tunneling (cont’d)
Besides, even with min. size requirements and speed limits and a small timestep, you still have degenerate cases that cause tunneling!
76
Tunneling (cont’d)
Besides, even with min. size requirements and speed limits and a small timestep, you still have degenerate cases that cause tunneling!
77
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
78
Tunneling (cont’d)
Interpenetration Tunneling Rotational
tunneling
79
Making It Fast Enough
80
Making It Fast Enough
Don’t be too particular too soon Avoid unnecessary
work
81
Making It Fast Enough
Don’t be too particular too soon Avoid unnecessary
work Eschew n-squared
operations Avoid the
“everything vs. everything” case
82
Making It Fast Enough
Don’t be too particular too soon Avoid unnecessary
work Eschew n-squared
operations Avoid the
“everything vs. everything” case
Try using simulation islands and space partitioning to divide and conquer
83
Simulation Islands
Consider: 1000 objects, 1
island 1000x1000 checks = 1 Million checks
84
Simulation Islands
Consider: 1000 objects, 1
island 1000x1000 checks = 1 Million checks
Verses: 1000 objects,
divided into 10 islands of 100
10 x (100x100) checks
= 100,000 checks 1/10th as many!
85
Simulation Islands
Simulation islands can “go to sleep” when they become stable i.e. when forces and
motion remain unchanged
86
Simulation Islands
Simulation islands can “go to sleep” when they become stable i.e. when forces and
motion remain unchanged
87
Simulation Islands
Simulation islands can “go to sleep” when they become stable i.e. when forces and
motion remain unchanged
When an object enters the island’s bounds...
88
Simulation Islands
Simulation islands can “go to sleep” when they become stable i.e. when forces and
motion remain unchanged
When an object enters the island’s bounds...
89
Simulation Islands
Simulation islands can “go to sleep” when they become stable i.e. when forces and
motion remain unchanged
When an object enters the island’s bounds...
...the island wakes up
90
Simulation Islands
Add the newcomer to this simulation island
91
Simulation Islands
Add the newcomer to this simulation island
...and put it back to sleep once it stabilizes
This is just one of many ways to reduce complexity
We’ll be covering several others later on
92
Making It Fast Enough
Can also exploit work previously done Make “educated assumptions” using:
Temporal / frame coherence: Things tend not to have changed a whole lot in the 15ms or so since the previous frame, so save the previous frame’s results!
Spatial coherence: Things tend to miss each other far more often than they collide, and only things in the same neighborhood can collide with each other
93
Summary
94
Summary The nature of simulation causes us
real problems... problems which can’t be ignored
So we cheat And we simplify things And even then, it can get quite
complex...
95
Summary (cont’d)
Problems we’re concerned with: How should we choose to represent physical
bodies? How should we simulate and compute motion? How can we prevent energy build-up? How do we cope with floating point error? How can we detect collisions – especially when
large numbers of objects are involved? How can we prevent tunneling? How should we resolve penetration? How should we handle contact? How do we deal with non-rigid bodies? How can we relieve CPU burden?
Top Related