Facial Bones (aka Muscle Bones)

The setup for strechy facial bones is pretty much similar to the technuiqe for the arm bones. However they are slightly different, but not by much. And now it's very important that you use my puppet object (the puppetmaster addon) or use a similar way of using control objects (with a zero null).
I've prepared a scene which you can use. It has a simple head mesh in it, made with the facemaker in XSI (not fancy but will illustrate our practicing good enough). So download the scene below and put it in your 'scene' folder in any database that you have for Softimage|XSI.
You can see that I have already placed the bones correctly where I want them. Also these placements might not be anatomicly correct, but it's just a tutorial on how to use this technuiqe. I recommend that you buy a Anatomy book if you would like to study that... if you really feel like you need that... if you are into that kind of perfection...

The chains that are lightblue are rigid, the red chains are the strechy ones (or rather the one that will be strechy).



First of all we need to position out our control objects. We'll start with the left eyebrow first. Since the chain consists of the chains we need four control objects. So simply create 4 puppet shere's which you name LEB_1, LEB_2 etc. For radius you can use 0.1.
Then take the "ZERONULL_LEB_1" and align it so it matches the translation of root for the eyebrow chain. Then take the ZERONULL_LEB_2 and align it to the second chain (again only position). The third controll object will align to the third bone, and the last one with be aligned to the effector (position only).

Now it should look like this...



Don't worry about the size of the ZERONULL's they will be hidden later on. Now do the same procedure for the right eyebrow. But name them REB_1, REB_2 etc.

Now that we have them all in the right position we should start adding the expressions. And also some position constraints. Select the Left Eyebrows root and position constrain it to the LEB_1 sphere. Select the second chain for the eyebrow and position constrain it to the LEB_2. And I think you can figure out what you are supposed to do with the third bone and the effector? :) And you should repeat the procedure for the right eyebrow. Your schematic should look like this if you turn off "links of selected Nodes Only" (ok, I did re-positioned the objects...).



Now select the first bone in the left eyebrow chain. Press enter to bring up the properties. Under the "Chain Bone" tab you should find the lenght slider. Right click on the green key icon and chose "set expression". Delete the number that's in the text window (no need for it anymore). What we are going to do now is the same thing as we did with the arm chains (if you read that tutorial). But I can explain it again. We want the bone to be the lengt of the distance between our two control objects. In this case between LEB_1 and LEB_2. So we'll chose an expression called ctr_dist(. You can find it by pressing the button Function -> Distance -> Center to Center. We should replace the <elem1> & <elem2> with our two control spheres LEB_1 and LEB_2. So your expression should read:

ctr_dist( LEB_1. , LEB_2. )

Press validate and then apply. Close the expression editor. Now open up the second chains properties and apply the same expression but now use LEB_2 and LEB_3. Your expression here should now be:

ctr_dist( LEB_2. , LEB_3. )

You understand the concept by now?. In that case you can complete the last one by yourself? And then perhaps even complete it on the right side?
Now whe you have done that you should be able to pull the sphere's and the chains should strech them selfs to the correct lenght. And since we were smart enough to use the puppet spheres you can select the sphere and type in 0,0,0, in the XYZ translation. It will then pop back into the default position.

Now for the mouth. We'll make some more objects, we need eight of them this time. The nameing convetion here is a little more tricky. Since a few of them are going to share sides. We have the middle and the sides and objects in-between.
So here's how I named them (looking from the front).
		[MMU]
	[RMU]		[LMU]
[RMS]				[LMS]
	[RML]		[LML]
		[MML]
There was no easy way of explaining that :) So Now start and place the control spheres just like you did with the eyebrow. When you are about to place them for the sides of the mouth it doesn't matter which effector you chose, as long as you pick the "same" on each side. ex. if RMS is aligned to eff8 the opposite one is eff5.And if you have been a good student your image should now look something like this:



And now you do the same with the chains as you did with the eyebrow. Start with the root and then work your way up.

And now that we got our objects in place we should start parent them to their collective chain... or something like that. So all ZERONULL's that is for the Eyebrows should be parented under the head bone (named bone1 in this case). Also the upperlip ZERONULLS shold be parented to the head bone (not the side controls). And the lowerlip and the side controls should be parented under the jaw bone (called bone2). And again... if you have been a good student your schematic can look like this.. if not... redo...



Now we are almost in our envelope phase. Just a tiny few more things to do before we are finished. First is to hide all our ZERONULL. Do this by typing in ZERO* in the MCP object selection (see image below).



With the all the nulls now selected press down the GROUP and name the group ZERONULLS. And select View Visibility - Hide Members. Now we need to select all the bones in a similar way. So type in bone* in the MCP object selection. Name this one CHAINS_ENV don't change anything else. The do the same again, but unselect the rigid bones (meaning head, neck and jaw bone). Again make a group and call this CHAINS_MUSCLE and set the Selectability - Do not allow selecting members. Last but no least, hide all the roots and effectors. Type in eff* press H to hide, and ro* press H to hide. Now your head should look like this:



Finaly time to envelope! Select your mesh, chose Envelope - Set Envelope then middle click on the CHAINS_ENV group, then right click to end the selection. Now you ofcourse need to paint your weights correctly. But if you try and pull some of the objects you'll notice a nice deformation.
So there is lot's of stuff to do, but now you've learned the basics on how to make those bones strechy.

So what is the benefit of using chains instead of objects? It's how the envelope reacts to chains or objects. If you have an object it will use the objects center to create deformations and not have as much gradient falloff as a chain will have. At least this is what I've heard and it seems to be like that. I DO recommend that you use shape animation for your facial animation, but use muscles as secondary animaition. I'm sorry that I couldn't provide a cooler model, but I didn't have anything in my library that I could share at this point. So to end off this little session I give you a bad pose for the head we just used.





2003, Stefan Andersson