makepipeline
createassets
bakeassets
testassets
shipgame
traditionalgame pipeline development
makepipeline
createassets
bakeassets
testassets
shipgame
game pipeline development
makepipeline
shipgame
createassets
bakeassets
?
spore
What can players make?
creatures
skin
paint
parts
bones
creditsKees van ProoijenJordan MaynardRyan W. EnslowBernd RaabeJohn DeWeese
Bob KingGal RothJohn CiminoTony Gialdini
Steven SadlerPatrick Benjamin
Steve EngSteve Lim
how the animation system sees creatures
skin, just for wysiwyg
bodiesxforms for mesh parts have capabilitiesparts, limbs, spine
joints between bodiesik 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 themmoveshow intent & purposeconvey emotions?
idea: describe the movement
1st approach: classically procedural
Now, we have another problem.
Do we hireanimators who can program?programmers who can animate?
take a step back
Want to hireanimators 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 semanticsdescribe 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
This is how the code reasons about the creature.
The code needs to deal with the variable results.
This is hard.
Code performs a “context query,”can return 0, 1, or many bodies.
moving
Move bone #57 to (3.14, 2.72, 1.62).
How do you punch something?
moving
How do you punch something?
Again, we require semantics,describe the intent.this is the “frame” of the movement.
Move fist to the target, please.
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” becausethe 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
Generalizedrecorded in the frame of the movement mode.all keys are in generalized space.
Specializedprojected onto a single body on a creature.multiple projections for multiple bodies.
a spore animation file
animationchannel
contextdescriptions (madlibs, scaling)keys
channelchannel...
the spore animation runtime loop
for each creature, for each animationtick to time – interpolates generalized splinesfor each channel
evaluate context queryfor each body
specialize onto bodycompute gait and wigglesdump 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 & lengthtrigger & duty factor
lots of other parameters
toe curl, ankle anglehip 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 befast.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, controllersslow, inaccurate, unstable, not “posable”
1.0 – multibranch 6DOF CCDcomplex, 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
ik solver experience
semantics are valuable
custom toolwas worth it
(demo)
thank you