Animation CS 551 / 651 Rigid-body Simulation Mirtich Paper

advertisement
Animation
CS 551 / 651
Mirtich, 2000
Rigid-body Simulation
Mirtich Paper
Assignment 1
Rigid-body Simulator
Email sent to class on Saturday
Due: Monday, Sept 29th at 5:00 p.m.
Wednesday’s Class
I’ll be out of town
• Hopefully not trapped on a runway someplace
Julian will be the projectionist
• “Extras” from computer graphics DVDs
Rotation in 3-D
Looks similar to 2-D
Case
• Specify arbitrray rotation as
three angles
– One per coordinate axis
– Called an Euler Angle
– Common representation
– But order of rotations
matters
0
0
1
0 cos   sin 
Rotation x  
0 sin  cos 

0
0
0
 cos 
 0
Rotation y  
 sin 

 0
0
0
0

1
0 sin  0
1
0
0
0 cos  0

0 0 1
cos   sin 
 sin  cos 
Rotation z  
 0
0

0
 0
0 0
0 0
1 0

0 1
Rotation Matrices
Orthonormal matrix:
• orthogonal (columns/rows linearly
independent)
• normalized (columns/rows length of 1)
The inverse of an orthogonal matrix is
just its transpose:
a b
d e

 h i
1
c
a b
f   d e
 h i
j 
T
c
a
f   b
 c
j 
d
e
f
h
i 
j 
Rotation Matrix
9 DOFs must reduce to 3
Rows must be unit length (-3 DOFs)
Rows must be orthogonal (-3 DOFs)
Drifting matrices is very bad
• Numerical errors results when trying to gradually rotate
matrix by adding derivatives
• Resulting matrix may scale / shear
• Gram-Schmidt algorithm will re-orthogonalize your
matrix
Difficult to interpolate between matrices
Angular Velocity Vector
In 2D we just had w, a
scalar
In 3D we need a vector,
call it w
Calculating change in r
Computing change in r
requires cross product
Cool matrix math does
the same
Rotation
matrix
Kinematics for point on moving
body
Centripetal acceleration term!
3D Dynamics
Very similar to 2D
• Angular momentum becomes a vector: r x p
– r = vector from origin to point
– p = linear momentum at point
• It measures the amount of momentum that is
perpendicular to r
Total angular momentum
linear momentum
substitute
Inertia Tensor
Use the tilde operator
Pieces come together
Linear terms are identical to their 2-D analogs
Angular terms follow same pattern
• Orient the default inertial matrix to align with current
orientation
• Compute angular velocity by multiplying angular
momentum by inertial matrix
• Use angular velocity to compute change in orientation
Timewarp Rigid Body Simulation
Presented at SIGGRAPH 2000
Brian Mirtich
• MERL, A Mitsubishi Electric Research Lab
(Cambridge, MA)
Big Idea
Simulations are slow
• What part is so slow???
Simulations are discontinuous
• What’s the source of discontinuities?
But not discontinuities are unpredictable
and only affect parts of simulation
General rigid body simulator
• Nontrivial geometries
• All pairs can potentially collide
• Second-order physics equations of motion
• Could be deployed on multiprocessor (simulation farm)
Discontinuities
When do they occur?
• When the state or equations of motion change
– Collisions
– New contacts
– Changing from rolling to sliding dynamics
Particle simulation example
• Computing state of particle arbitrary time in the future
is easy … f(t)
Discontinuities
What trouble do they cause?
•
Integrator must be stopped and restarted with new
state, forces, or equations
•
Main control loop constantly checking for
discontinuities so appropriate handling takes place
Two common methods
•
Retroactive detection and conservative
advancement
Retroactive Detection
Catch discontinuities after the happen
• Detect when two objects go through one another
• Use root finding to detect exact time of impact
Roll back the clock to time of impact
• All objects or just some?
Continue simulation only up to impact
Retroactive Detection
What’s bad about this algorithm?
• You’re repeating work
– Simulate, back up, simulate again
• Additional collisions may be encountered during subsequent
smaller simulation timesteps (and others won’t take place after
all)
• Synchronization requires repeated simulation of all objects if
they are involved in collision or not
Doesn’t scale well in number of discontinuities
Conservative Advancement
Don’t simulate past discontinuities
• Heuristics predict future discontinuities and impending
events are stored in a priority queue
Upon approaching time of event in priority
queue, take small steps
Conservative Advancement
What’s bad about this method?
• Conservative, but slow as number of discontinuities
increases
– All simulated objects move forward at small
timestep
• Difficult to compute tight bounds on discontinuities
Timewarp Algorithm
Derived from a 1985 paper by David
Jefferson
• Be optimistic
– Each object simulates as quickly as possible
• Be responsive
– If an object is informed of an event in the past, it
must reset its state to that previous time
Timewarp
Multiple processes
• Each models part of the system
• Each has its own “time” called Local Virtual Time (LVT)
• Process clocks are not synchronized
Timewarp
Message Passing
• When a process experiences an event
– message is sent to all processes with timestamp = LVT of
sending process
• When a process receives a message
– If (message time > recipient’s LVT)
² Message is placed on time-based queue
² Process will advance clock to next event on queue
– What if (message time < recipient’s LVT)?
Rollback
Occurs when a recipient has simulated
“past” the time at which another process
has generated an event
• Go back in time (how?)
• Put all processed events back on queue
• “unsend” events sent to other processes
– For each message sent, an antimessage is stored
on a queue that can be easily flushed
Rollback
Overhead
• Keeping track of previous states
• Keeping track of processed events
• Keeping track of submitted events
Global Virtual Time (GVT)
• The minimum of all LVTs
– All states before GVT can be purged
• Monotonically increasing
Timewarp for rigid body sim
• Every simulated body is a process
• The state = position & velocity
• Global event queue stores all bodies’ events
– Event = timestamp and list of affected bodies
• Main loop
– Pull front item from event queue
– Simulate affected bodies to that time
This can be put on a uniprocessor
Types of events
Collision Check
• Between pairs of bodies
Group Check
• Collision check for contacting bodies
• Splitting groups of bodies when no longer contacting
Redraw
• At every new rendered frame, copy positions to buffer
Callback
• User-defined functions to be executed
Collisions
Safe-time
• Each body keeps track of the last time it was known
not to be in collision with other bodies
• This helps limit how far a body must roll back upon
detection of a collision
• Safe-time is included in collision/group check events
• Upon collision checking, safe-time is updated
Collisions (A collides with B)
• Vertical connections join post-collision states
• Gray states are new states after A-B collision check
event
Collision (between A and B)
Multibodies
Jointed (articulated) bodies like a human
All bodies must be treated in unison
Easily integrated into their system
Contact Groups
Bodies in persistent contact
• Simulated as a unit
• Membership of group is dynamic
• Complicated state keeping so,
upon rollback, a body can be
detached from its group and
simulated
Collision checks
Active Pairs
• The set of all bodies that must be checked for
potential collisions
– We want to keep this set small
Active Pairs
Looking for collisions
• Each body has an axis-aligned bounding box
• For each timestep between GVT and LVT
– Record location of bounding box
• Compute bounding box (swept volume) of all
bounding boxes over time
– Using six heaps for max/min {x, y, z}
– GVT increment causes volume to shrink
Looking for collisions
If swept volumes do not intersect
• Collision free between [GVT, tmin (A, B)]
– Depending on LVT of A and B
• A and B not an active pair
Looking for collisions
If newest timestep for B causes overlapping
swept volume with A
• Collision check at time tmin (A, B)
– B, before integration (last known free time)
• Rollback will resolve collisions
Results
Applications
• Atoms: 200 spheres and 100 water molecules in
divided box
• Cars: 4 multibody vehicles and 400 pendula
• Robots: 20 eight-link manipulators throwing blocks
• Avalanche: 300 rocks tumbling down mountainside
Results
• Note average integration step vs. time between
discontinuities
Results
Atoms for 2 seconds
• Average integration step
Results
Atoms for 2 seconds
• Total simulation time
Euler Angles
(x, y, z) = RzRyRx
• Rotate x degrees about x-axis
• Rotate y degrees about y-axis
• Rotate z degrees about z-axis
Axis order is not defined
• (y, z, x), (x, z, y), (z, y, x)…
are all legal
• Pick one
Euler Angles
Rotations not uniquely defined
• ex: (z, x, y) = (90, 45, 45) = (45, 0, -45)
takes positive x-axis to (1, 1, 1)
• cartesian coordinates are independent of one
another, but Euler angles are not
Gimbal Lock
• Term derived from mechanical problem that arises
in gimbal mechanism that supports a compass or a
gyro
Gimbal Lock
Gimbal Lock
Occurs when two axes are
aligned
Second and third rotations
have effect of
transforming earlier
rotations
• ex: Rot x, Rot y, Rot z
– If Rot y = 90 degrees, Rot z
== -Rot x
Download