Game Physics
Download
Report
Transcript Game Physics
Game Physics
Chris Miles
The Goal
To learn how to create game objects with
realistic physics models
To learn how to simulate aspects of reality
in order to make them behave more
realistically
Overview
Newton’s laws
Data types
Particle implementation
Rigid body implementation
Newton’s Laws of Motion
1.
Inertia
2.
F = ma
3.
Equal and opposite
How They Apply
Velocity remains constant unless acted on
by a force.
Objects accelerate via f = ma
Interactions between objects should affect
both similarly
How They Don’t Apply
1.
Velocities that reduce over time give
better numerical stability
2.
Objects are often moved instantaneously
3.
Many interactions are one-sided, there is
no reason to simulate the other side.
An Object – Rigid Body
An object that moves but does not
change shape
“Mass properties” define how these
objects are affected by forces
Mass
2. Moment of inertia
3. Center of gravity
1.
Simulation
We want to write a simulation describing the
motion of the object
look at the universe after 1 second, 2 seconds,
so on and so on.
integrate the equations of motion between those
steps
Data Types
Scalar
Vector
Matrix
Quaternion
Euler Angles
Rotation Matrix
Tensor
Scalars
Scalars are a single number
They represent simple characteristics,
such as mass
Vectors
[2,5]
[1,5,17]
[-.14,5,-7]
Vectors usually represent a location, both
in world and local space
Quaternion
Quaternion’s contain an orientation
Explaining how they work is long and fruitless
Know that they hold an orientation in some
undecipherable way
Can quickly rotate vectors, cumulate easily, and
interpolate smoothly
Used by virtually every modern game engine
(Laura Croft gets points for pioneering)
Particles
First we will look at particles, which are a
reduced form of Rigid Bodies
Particles differ in that they do not have
orientation, they just have positions
Euler angles
What quaternions were developed to replace
Vector containing rotations around x,y,z
Suffers from gimbal lock - makes it impossible to
go from some orientations to others in a single
step
Interpolates poorly - very ugly animations /
camera movement
Understandable
Rotation matrixes
Another alternative to quaternions
Too large, requires 9 variables vs. 4
Numerically unstable – unnormalizes over
time
Slower
Tensor
Don’t worry about them, math term
Generalization of scalars/vectors/matrix’s
Scalars are rank 0 tensor, vectors 1,
matrix’s 2
Concerned with rank 2 tensors, for
moment of inertia
Can also accurately simulate drag
Particle Class Definition
Class Particle
–
–
–
–
–
–
vector position
vector velocity
vector resultantForce
scalar mass
Function Integrate( dtime )
Called every time step to update position
Function Integrate( dtime )
//dtime = how much time has passed in this time step
position += velocity * dtime
velocity += force / mass
force = 0
Improvements
Violate law #1, have velocities slowly decrease
– greatly increases numerical stability
Original:
–
New:
–
velocity += force / mass * dtime
velocity += (force/mass – velocity*cf)* dtime
cf should be a coefficient of on the order of .999
or so
Implicit Integration
We are doing explicit (forward) euler
integration so far in our modeling.
If stability is an issue you can use implicit
integration
http://www.mech.gla.ac.uk/~peterg/software/MT
T/examples/Simulation_rep/node89.html is a
good overview
Runge-Kutta
Precise integration technique
Sample several times for each time step.
t = 0, t = .25, t = .5, t = .75 to find value at t = 1
Provides very accurate results
http://mathworld.wolfram.com/Runge-KuttaMethod.html
Rigid Body
Position and Orientation
Linear and Angular movements are
independent and analagous
Rigid Body Class Definition
Class RigidBody
–
vector
vector
vector
scalar
position
velocity
resultantForce
mass
–
quaternion
vector
vector
tensor
orientation
rotationalVelocity
resultantTorque
momentOfInertia
–
Function Integrate( dtime )
–
–
–
–
–
–
Moments of Inertia
The moment of inertia is the rotational equivalent to
mass, it describes how hard an object is to rotate
Depends on the axis of rotation so it is a tensor,
mapping from a direction to a magnitude
3x3 matrix
Just using a simple scalar in this example7
Calculating Moments of Inertia
Producing the values that go inside the
moment of inertia is non trivial.
Assign point masses to the object,
representing where things are distributed
Then Σmr2
Ideal Integrate function
position += velocity * dtime
velocity += force / mass * dtime
force = 0
orientation += rotationalVelocity * dtime
rotationalVelocity += torque / momentOfInertia *
dtime
torque = 0
Complications
Quaternion operators are odd so to add
rotationalVelocity
from
–
orientation += rotationalVelocity * dtime
to
–
o += (rv * o) / 2.0f * dtime;
Point Forces
To calculate the torque caused by point
forces
Use the vector cross product
force X position = torque
Where position is the vector from the
center of gravity to the point