Layered Shape Animation in XSI:

The musculature method

By Adam Sale

Part 2 of a 2 Part Series

Level: Intermediate to Advanced

Shape Animating the Muscles

Each of the curves is going to be shape animated in various musculature poses that will be mixed together using the animation mixer driven by custom parameters.

Make sure you are in the Animate module

Select the mouth curve and click on Deform>Shape>Store Shape Key. A pop up will appear allowing you to name the mouth pose as MOUTH_NEUTRAL.

Storing a shape key is useful because it stores the coordinates of each point in a cluster, but doesn't place the key onto the main timeline, rather the shape key is stored in your models mixer node under sources>shape. You'll build up your library of shapes and then apply the shapes onto the animation mixers timeline which will then allow you to mix the various shapes together with an average or additive interpolation
Pull the points on the spline to make another mouth shape. If you're having difficulty figuring out which expressions or shapes you should create for the mouth, check out the figure below:

Mouth expressions

Neutral ,Wide Open, Closed, Smile, Sulk, Sneer Right, Sneer Left

Phoneme Shapes - the sound names are just labels and don't necessarily reflect the phoneme sound that is made

A Mouth - closed

B Mouth - consonants as in the word growing

D Mouth - vowels as in

Dd Mouth - loud vowels

E Mouth - Aww sound as in Gawsh, good for country hick characters

F Mouth - Ooo as in wood, goon, spoon

G Mouth - Fff or Vvv as in Food or Volvo L Mouth -

L Mouth- as in Loud. Tongue curls up under roof of mouth

O Mouth - O as in Oh

R Mouth - R sound as in roof, root beer

S Mouth - ssss sound as in whisper can also be used for eee sounds as in geek

T Mouth - Th mouth sound as in theatre

The trick to making this method work is that after you've created the first neutral shape for the lips, select the character at the model node level, and open up an animation mixer in your C viewport. Remove the current Animation tracks in the mixer by right clicking on a track and choosing remove track from the option menu. Now, add in as many shape tracks as you'll need to the animation mixer . Shift S is a hotkey for this action.
Make your A Viewport an Explorer. Navigate to the models mixer folder and then down into sources>shape. Drag the LIPS.neutral shape clip onto a track in your animation mixer. Notice that it has a value of 1 right now. A fully weighted shape animation. Align the clip so that it starts at frame 1 of the main timeline. Each time you create and store a new shape key, you'll drag it from an explorer onto an empty shape track in the animation mixer to refresh the curve, and return it to its default position. Each time a shape clip is added to a track, drag its weight to 0 so the Neutral clip is the only shape affecting the mouth curve.

Create all of your new shapes from the base neutral pose. Since we'll be mixing the shapes using additive mixing, it is imperative that all of the shape expressions you create for the mouth curve originate from the coordinate positions of the neutral shape.

The reason you need to do this is simple. Say you start with a neutral eyebrow shape, and store it as a shape key, then you create a shape key where the left brow is raised. If you then go and create a third shape key where the right brow is raised, you'll actually be storing a shape where both brows are raised. You'll never be able to totally isolate the right raised brow shape. Sculpting each successive shape from the original default ensures that you'll have full control over isolated muscle groups later on.

When you have created a new shape, press deform>shape>store shape key. Name your shapes accordingly. For clarity sake, I'll name the shape keys: LIPS.Amouth, LIPS.Bmouth, LIPS.Cmouth etc.. etc..

Perform the same operations for all of the other curves, creating all of the shapes you think you'll need. Remember that when you're creating the new muscle shapes for each curve, do not scale the curve to elongate, or compress the shape. You will want to tag points and move them in order to save potential disasters later on. Shape animation stores the position of points in relation to their centres; by scaling up your curve the points aren't moving in relation to the position of the center, it's the center that's scaling up in the axes you choose. This is what ruins most peoples shape setup. Offset centers cause problems such as shape popping, and the actual curve being moved through space.

Load your shapes into the Mixer

You should have quite a library of source shapes stored under the models mixer node. Select the characters model node and open up the animation mixer in your C viewport. Update the mixer. The mixer should consist of as many shape tracks as you have shapes. All you need to do now is to load each shape from an explorer onto its own track in the animation mixer. Drag a shape from the explorers model mixer> sources>shape folder onto a track. Repeat the process until each clip is loaded. Drag the in/out points of the clip so that they last the duration of the scene. Shift selecting and then dragging the the middle edge of a clip will scale all clips uniformly.

Currently, all of the shapes are turned on at values of 1. Set the sliders so that each curves neutral pose clip is at a value of 1. All other clips can be turned off, set at a value of 0. The mixer is set so that it averages out the wieght of two clips added to tracks in the mixer. This means if you have a wide open mouth with a weight of 1 and a closed mouth with a weight of 1, the mixer would average out the shape to create a partially opened mouth. While this setting works very well in most instances, I would rather use the animation mixer in Additive mode.
At the top of the animation mixer, click on mix>shape mixer properties. In the pop up that appears, deselect the normalize option. When this is unchecked, the mixer switches to additive mode. Now, when you take two shape clips with fully weighted values, Xsi will take the two clip values, and add them together to create a new unique shape. An example of this might be using wide open mouth shape and the mouth shape you create for speaking the phonemes oo as heard in the words food, and water. Adding the two shapes together would resdult in a third new shape that might look something like the mouth shape you would create to say those same words loudly or forcefully Any of the shapes weights can be mixed together in any order and you can use as many shape clips as you need to create your more complex expressions.

Drag the sliders around to see some of the possibilities for complex shapes.

From here, you could go ahead and begin keying in the characters face animation. You would have a lot of control at this stage, but you might find yourself overwhelmed with the number of controls you have. I add one more level of control into the face animation to further simplify the interface I'll be working with later. Read on if you want to know more about the layered approach.

Layers of Control using a custom Parameter Set

Once the shapes are in the mixer, you can use Custom Parameters tro control them. To do this, Get a null object, place it as a child underneath the CHARACTER model node and in the animate module click on Create>Parameter>New Custom Parameter Set. Give your set a name, BASIC_SHAPE_SET is what I named mine. Now with the set highlighted in an explorer click on create>new custom parameter. Give the parameter the name of the first shape clip in your mixer. Set the in/out points to 0 and 1 and set the default value to 0.

Create as many new parameters as there are shape clips in the mixer. Name the parameters according to the names of each shape clip.

Hook up the weight of each shape clip in the mixer to its respective custom parameter slider. We'll use expressions to accomplish this. We can speed the expression creation process by using drag and drop interaction. If you left click and drag on the animation chip of a custom parameter, you can drag it over the clip weight of a shape in an explorer to create an expression.

To access the weight of a shape clip through an explorer, navigate to the model level of your character, then navigate to the Mixer>Tracks>Shape>Mixer_Shape_Track>Clip list>Clipname> Instanced Action>weight. Once you're at this level, you can drag a green custom parameter chip over the green weight chip of the shape clip to hook up the expression. Click on 'Apply' when the expresison editor pop up appears. Repeat this process for each of the custom parameters, dragging and dropping their animation chips onto the weight chip of the respective shape track clip.

As you finish this stage, you'll find that to interact with the shapes, you've created, you can simply drag the sliders of the custom parameter set back and forth. You may be wondering what benefit this has over using the sliders in the animation mixer.

You'll recall that we attached the custom parameter set to a null. Since we created our own paramaters, that are hooked up and driving the weight of each shape clip, we can now mark the custom parameters we created under the null, and create complex face shapes by mixing the sliders weight values. When we create a complex face shape, we can save it as an action by clicking store>marked parameters>current. This command stores a static pose based on the input from the marked custom parameters. If we keep adjusting the sliders to create new combinations of poses, then in no time at all, we build up a library of face shapes that we can use in our animation.

Select the null you created, and expand it so that you can see all of the custom parameters stored within the set. CTRL click each of the parameters to mark them. The lettering of each parameter will be highlighted in yellow. You are now ready to begin storing actions for your characters face.

Creating Complex Shapes

Lock the Custom Parameter set, and begin creating your poses. Drag the sliders around to create all of the facial shapes you may need in your piece. Remember that all the muscles of the face work together to create speech and emotion. When you smile, the corners of the mouth curl up at the ends pushing the cheek muscles up towards the orbits of the eye. If you are creating a smile, be sure to add in this type of detail or risk having your face muscles look detached from one another.

When you've sculpted a pose you're happy with by dragging the sliders, of the custom parameters, store the pose by clicking on store>marked parameters>current. In the pop up that appears, set the in/out point of your action source to the start/end frames of your scene. Give the action a relevant name and then close the pop up. These will become your complex expressions

The actions will get stored in the mixer>source>animation folder. Create as many action poses as you'll need for your scene. Build up a library that you can re-use in future projects, or even share between different characters using connection mapping templates. Open up the explorer and navigate to the mixer>sources>animation folder to see the action sources you've created. We're now ready for the last part of the setup process

Hooking complex actions to sliders

Create one final custom parameter set underneath the null and name it COMPLEX_FACE_SHAPES. Create a custom parameter for each action source in you mixers>source>animation folder. Name the parameters so they reflect the names of each action clip they will end up controlling. Open the parameter sets property editor and lock it in a floating window.

Open your animation mixer and update it. Add in an animation track (SHIFT+ A) for each action source in your mixer>sources>animation folder.

Drag each action source onto its own track and make sure the in/out points of each track match the start end frame of the scene

Hook up the weight slider of each action to its related custom parameter.

Drag and drop each custom parameter animation chip on top of the weight chip of its related action clip. You can't drag and drop the custom parameter chip onto the weight chip in the animation mixer, the only place to set up the drag and drop expression is through an explorer. So, you've got to navigate deep into the mixer folder to get at the weight chip

Now you have less slider control to worry about, and a faster workflow with which to effectively communicate emotion through expression. It's a great way of simply keyposing or blocking in the actions of the face. You can offset and put in overlap and follow through after your pose timing is perfect. I think that the whole setup process in this article can be simplified a lot. I find that I'm constantly improving on my design and workflow, nothing remains the same. There is always a better idea to try out. But that's what makes this job so much fun, its never the same thing twice.

Some guidelines to follow when performing Facial Animation

The following articles may help you as you're about to start animate your characters face

Animation Intro Paper

Dialogue

Dialogue2

Making It Sync

Other Methods

Expression & Emotion

Eyes

The Face

Facial Animation: The musculature method was created by Adam Sale. Adam is a Technical Director and co-founder of Joncrow Entertainment. A fully certified Softimage Instructor, Adam teaches at various institutions throughout Vancouver. He can be reached at adam@joncrow.com