Transcript Slide 1

How to Animate a Character
You’ve Never Seen Before
Chris Hecker, Maxis
[email protected]
traditional game pipeline development
make
pipeline
create
assets
bake
assets
test
assets
ship
game
spore game pipeline development
make
pipeline
make
pipeline
create
assets
bake
assets
test
assets
ship
game
?
ship
game
create
assets
bake
assets
What can players make?
creatures
skin
paint
parts
bones
credits
Kees van Prooijen
Jordan Maynard
Ryan W. Enslow
Bernd Raabe
John DeWeese
Steven Sadler
Patrick Benjamin
Bob King
Gal Roth
John Cimino
Tony Gialdini
Steve Eng
Steve Lim
how the animation system sees creatures
skin, just for wysiwyg
bodies
xforms for mesh
parts have capabilities
parts, limbs, spine
joints between bodies
ik chains
very few limits on topology & morphology
tree structure
some socket constraints
scale limits
shader bone limits
see Chaim’s talk on the editors
Friday, 2:30pm — 3:30pm
So, we have a problem.
How do we make them
move
show intent & purpose
convey emotions?
idea: describe the movement
1st approach: classically procedural
Now, we have another problem.
Do we hire
animators who can program?
programmers who can animate?
take a step back
Want to hire
animators who can animate!
but how?
How?
Show, don’t tell.
Example based, not descriptive.
Animate on one creature,
the software applies it to the others...somehow.
watch animators work
select bone
move bone
selecting
Where is bone #57?
images from http://highend3d.com/articles/features/25-4.html
selecting
Need to add semantics
describe what you’re selecting.
we call this description a “context”.
I’d like to select the left topmost grasper, please.
selecting
(demo)
selecting in code
Code performs a “context query,”
can return 0, 1, or many bodies.
This is how the code reasons about the creature.
The code needs to deal with the variable results.
This is hard.
moving
How do you punch something?
Move bone #57 to (3.14, 2.72, 1.62).
moving
How do you punch something?
Move fist to the target, please.
Again, we require semantics,
describe the intent.
this is the “frame” of the movement.
moving - madlibs
move grasper to same creature’s mouth.
move grasper to other creature’s grasper.
move mouth to external target.
move slasher to position relative to ground.
move slasher to absolute position.
moving - scaling
Is a given movement “big” because
the creature is big?
the movement is inherently big?
the target is far away?
The animator needs to tell the system.
(demo)
moving - frame
This description of the movement
specifies the frame in which it is
recorded.
Even for multiple bodies on the
same creature.
moving - space
Generalized
recorded in the frame of the movement mode.
all keys are in generalized space.
Specialized
projected onto a single body on a creature.
multiple projections for multiple bodies.
a spore animation file
animation
channel
context
descriptions (madlibs, scaling)
keys
channel
channel...
the spore animation runtime loop
for each creature, for each animation
tick to time – interpolates generalized splines
for each channel
evaluate context query
for each body
specialize onto body
compute gait and wiggles
dump all goals into ik solver
gaits
The game drives around an oriented particle.
The gait system tries to keep up.
gaits
cluster legs based on length
move foot goals using parameters
step height & length
trigger & duty factor
lots of other parameters
toe curl, ankle angle
hip rotation and translation
(demo)
wiggles
We want “secondary animation”
tail bobbing, arm swaying,
without manual keying.
wiggles
Find “wiggleable” bodies that
haven’t been selected.
Add secondary with damped
spring mass system.
(demo)
the constant question:
How well does an animation generalize across
lots of creatures?
stochastic testing
AVG – Animation Validation Grid
branching
split up creature-space
“has feet”
“has graspers”
“upright spine”
ik solver
Decouple procedural systems
from needing to think about
creature topology.
Just set goals on bodies.
ik solver
Want it to be
fast.
accurate in workspace.
fail gracefully if missing goal.
decide not to hit goals for quality.
path independent.
ik solver history
0.0 – linked rigid bodies, constraints, controllers
slow, inaccurate, unstable, not “posable”
1.0 – multibranch 6DOF CCD
complex, slow, more accurate, not tunable
2.0 – particle IK – “control freak”
fast, accurate, more tunable, twitchy, fails poorly
2.5 – particle IK – “laid back”
fast, accurate, tunable, smooth, fails better
useful takeaways?
target relative
curves
semantics
are valuable
custom tool
was worth it
ik solver
experience
thank you
(demo)
How to Animate a Character
You’ve Never Seen Before
Chris Hecker, Maxis
[email protected]