Layered Shape Animation in XSI: The musculature method
By Adam Sale
Part 1 of a 2 Part Series
Level: Intermediate to Advanced
There are many ways to perform any task in XSI. It all depends on your preferred workflow. When it comes to shape animation, there are a number of solutions available to you.
The replacement method of shape animating your character is a great method of animating. Like a clay- mation artist, the 3D animator creates a main head shape for the character and then duplicates the head as many times as necessary. From there, manipulating tag points allows you to refine each of the duplicate objects into unique new expressions. Using XSI's shape>select shape key option, the animator selects an original source object, and then applies the duplicate expressions as shape keys on the original neutral head.
I've started playing with a musculature approach to animate the expressions of the face. Using a good reference, I lay down the muscles of the face underneath the skin and then shape animate the muscles, which control the face mesh. Shape animating the muscles seems like a good idea for a couple of reasons.
1) By forcing yourself to add in the extra layer of complexity to your skeleton, you'll be allowing Softimage to calculate a more reliable envelope. This alone is worth doing in my opinion. On the downside, Softimage does have more to calculate as the software updates the characters envelope at each frame.
2) Shape animating muscles will involve shape animating less vertices. I use splines as muscles for my characters. They don't render, and an 18 point mouth muscle curve doesn't create a large shape file.


The bones.
At the very least, try and simulate the bony structure of the face, as this will aid in weighting later on. When adding in a jaw bone, I like to use a two bone chain because I can get more interesting poses out of it. Your character should have a one bone neck chain and a one bone head chain. If you want to, put in the bone mass where the nose cartilage would be on the character. A 2 bone chain might do well here. Place in additional control as you see fit. Remember, the more accurate you are here, the better the envelope will calculate. When you are ready, move on to the next section.

The muscles
Lips
Start by getting a primitive circle consisting of about 20 points and shaping it so it fits the contours of the characters relaxed mouth. I like to place the curve slightly inside of the geometry of the character. I find the character tends to envelope better this way.
Eye and Brow
Refer to the image of the musculature. Notice how the muscles of the eyes work in a radial pattern. Get another circle with about 10 points and shape it around the socket area. Make sure it follows the contours of the mesh Try and keep it so that the curve runs slightly on the inside surface of the character.
Symmetry the eye muscles spline over to the other eye.
To create the brow muscles, draw a curve in your front view from left to right across your characters brow line. Then in your other viewports, adjust the spline so it fits the contours of the brow all the way around from temple to temple.
Cheek muscles.
For the cheeks, place an L-Shaped curve on of the jaw line, and a U shaped curve where the cheek muscle would lie. The L should follow the internal contour of the jaw line. Again use the image as a reference here.

Clean up your work.
At this stage, you should definitely freeze the scaling of all your curves as well as renaming all of your curves. Character management is an often overlooked aspect of 3D Animation, and it is these menial but vital steps that will keep your characters working through a long production schedule.
Using a Netview script to streamline your skeleton process
Select all of the muscle curves in multi mode
Turn viewport C into a Netview. From the XSI local directory choose the tools folder then in the deforms column, click on the Add Nulls to Points script created by Olivier Ozouk. The script creates a cluster center for each point on all objects selected, and then constrains the cluster center to a null that gets added at every cluster along the selected object(s). When you've run the script, you'll need to remove the cluster to object constraints for each curveas this allows the nulls to control the shape of the curve, when in actual fact we'll want the relationship to be created the other way around. Select each muscle curve and open an explorer. Navigate down each curve to the Nurbs Curve List Property, and then open up the cluster center folder. Delete all of the Cluster Center Operators under each cluster center folder. This will get rid of the cluster to object constraint and leave the Nulls behind perfectly placed for our next step. This step will streamline our workflow considerably. Once you run the script, it'll take a few seconds before adding in all the nulls. The nulls may be large when they first show up in your scene. Select all the nulls in multi mode and scale them to an acceptable size where you can see each null clearly.
Constrain the newly created Nulls to the respective point they were created on top of. You'll be using an object to cluster constraint to lock the movement of each null to the movement of the point.
Unfortunately the script doesn't handle this part of the process for you. You'll do it manually. Select a null and then choose constrain>object to cluster. The mouse line prompts you to choose a curve, and when you've selected the curve it prompts you to click a point. You'll have to repeat this process for the other nulls, selecting a null, choosing constraint>object to cluster. Choosing the curve and then clicking on the point.
Theres probably even a script that tackles this repetition out there somewhere…..



When you're done, save your work and test out moving the points of the spline. The nulls should all move with the curve when you move a point within their general vicinity. If you see nulls that clearly don't move with the part of their curve being pulled, go back in and make sure you add them in.
So now there should be nulls on all of the curves we have created. Make sure your splines are in their default position before you go on. Hitting undo a few times or reloading your saved scene should give you a nice starting point.
At this point, I think we're starting to deal with a lot of layers of complexity that could easily get out of hand. During the setup, most people get stuck or mess up their parenting at this stage. Eventually all of the skeletal pieces will wind up within the same hierarchical structure. However, some of the pieces will be deformers, while others remain as regular scene objects that control the deformers.
We've created quite a bit of traffic around the characters' head at this point, and now we need to clean it up. Not all of the objects created here are going to end up as skeletal objects that directly deform the envelope. The curves are not going to directly deform the mesh. Rather, the nulls they control through the object to cluster constraint will, so what I need to do is find a way to keep the curves parented within the skeletal hierarchy, yet have it so they do not influence the weighting map of the character
Make the nulls that are stuck on the mouth curve, children of the characters head bone.
Make the mouth curve a child of the head bone.
Make the jaw nulls children of the first jaw bone
Make the jaw bone curves children of the first jaw bone.
Make the cheek curves children of the head bone
Make the cheek nulls children of the head bone
Make the nulls of the eye and brow muscles children of the head bone
Make the eye and brow curves children of the head bone

The characters skeletal system is now in place and ready to be enveloped. The last thing I'll do is select all of the objects in the skeletal system that I want to use as mesh deformers and click on the group button. Give your group the name DEFORMERS. Keep in mind that the deformers in your group will be composed of every bone you've parented in, and all of the nulls you attached to the points on each curve. Creating a deformers group will allow for a quick one-click method of assigning the skeletal deformers to the body geometry

Do not place the curves in this DEFORMERS group.
Instead, select all of the face muscle curves and click on group. Name the group ' FACE MUSCULATURE.
Select the mesh of the character and create a group for it, naming it SKIN.
Envelope the character
Select the mesh and switch over to the animate module. Click on deform>envelope>set envelope. XSI will switch your cursor into a pick session. Assign the DEFORMERS group you created as the skeleton of your character by clicking on the group name in your explorer. Right click when you've picked the group to finalize your selection. You can accept the defaults by closing the pop up window.




Optimizing Character interaction
Since your Nulls are now driven by the movement of the curves they're constrained to, you can hide them and reduce the clutter on your characters face. Make sure all of your point weighting is done, then select all of the Null objects that are attached to the curves, and create a group for them. A quick way of doing this would be to type point* in your filter box. The * wildcard will allow XSI to select all objects whose name has the word point. I'll call the group SKELETAL_NULLS.

Put the hierarchy underneath a model node
In an explorer select all of the parts of the character and place them inside of a model node by clicking create>model>new from within the model module. This will help us in applying and mixing data from various sources within the characters hierarchy later. Each model node contains its own mixer that can contain animation data from any object or branch found within its folder. The model node is key for us to be able to export the scene and mix it with other scenes later on. Give the model node a name that'll allow for easy tracking through the production process. I'll call mine CHARACTER.
Save your scene
End of Part 1. Click to continue on with part 2

