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]