Wiring cracker: the mechanics of a non-anthropomorphic, real-time, performance animation puppet

ACM SIGGRAPH 98 Conference abstracts and applications, 1998
DOI: 10.1145/280953.282445

ACM SIGGRAPH Conference Abstracts and Applications

bibtex

At Protozoa we've coined the term "wiring" to describe the art of procedurally connecting data from various input devices to a real-time character or CG puppet. Mapping a human's motions onto a non-humanoid character is one of the more fascinating aspects of wiring. One such character, "Cracker," a genetically mutated "Lizard Cow," was designed and modeled by Bay Raitt and wired by myself for an in-house short animation called "Meat." It's the nonanthropomorphic mapping between the performer and the CG character as well as the techniques used to accomplish this that are described in this sketch. Beauty in Simplicity The thing I find most interesting about this character is its apparent simplicity. With only 5 EM sensors producing global position and orientation data for the hands, feet and pelvis, the performer is capable of eliciting a full range of motion and expression from such a non-humanoid character. To define the position and orientation of an object in space, we generally use xyz coordinates for position and quaternions for orientation. I, however, sometimes like to think of an object's 3D definition in terms of its matrix and component vectors. Viewed in this fashion, a mere five sensors transform into a huge quantity of data that can be utilized using many well-known mathematics techniques such as linear algebra and trigonometry. Feet on the Floor The first problem I had to solve on this character was how to get her to walk. To keep her feet from sliding, I stuck to the rule of "feet on the floor," not altering the foot sensor data except for global position scaling. Starting with that rule, you could say I built Cracker from the feet up. Considering that her knees bend in a backwards, chickenlike fashion, I decided to ignore the knee sensor data and create her knee positions by using a simple inverse kinematics operator. Because I wanted Cracker to be able to slink low to the ground, taking long strides, as well as walk more upright, I needed to extrapolate two hip positions from the pelvis sensor such that performing her would feel right as well as meet some parameters required by the IK. The solution was to write a "triangle to non-planar quadrilateral" operator. Taking the feet and pelvis sensor data, the operator returns a quadrilateral such that two of the points are untouched foot data, and the other two, the hips, are translated off of the pelvis by parameter-specified vectors. The hips always remain a specified distance from each other (keeping the hip joints solid), and neither ever ventures outside of a sphere originating at its respective foot with a radius equal to the sum of the upper and lower leg lengths. This is accomplished (minus the bells and whistles) by calculating successive frames based on: 1 A spherical interpolation between the pelvis sensor's x-axis and the normalized vector between the feet (percentage of "swing"). 2 Orthogonalization of the resulting x-axis with an axis derived by normalizing the subtraction of the averaged foot position from the pelvis sensor's position. 3 A translation defined by the farthest intersection of two rays starting at each hip, pointing along the y axis of the current frame with each hip's respective target sphere. This allows the performer to be scaled up as large as necessary to allow for long strides without breaking the IK chain, keeping the feet on the floor as well as keeping the character low to the ground. Other adjustable variables include: differing leg lengths, placement of the hips anywhere within the allowable sphere of motion, and non-symmetrical, individual hip placement. Driving Cracker Being a mutated lizard, Cracker had to have a very flexible spine and large range-of-head movement. I quickly realized that trying to directly control her head with the performer's head sensor data would be difficult and painful to perform. I decided that how I really wanted to control her head and torso was with my hands, as if I were driving her around. First, I created a deforming spline based on a hierarchy of nodes with the head perched on the end o