Strechy Bones (aka Muscle Bones)

The first time I saw how muscle bones worked I was amazed.. but I never tried to replicate it in Softimage. Until I saw a posting on cgtalk a few days ago. So here it is... Strechy bones (aka muscles bones).

First you should install my "puppetmaster" addon. I'm going to use those control objects in this tutorial. I'm going to start with the bones that you can place on your arm rig. Same technuiqe you can the apply to the rest of your character. Then later I'm going to show you how to add the muscles to a face.
I recommend though that you use shape animation and muscle animation in conjunction (unless you are animating for a game engine). Muscle groups are fine, but they are messy to animate. But you can setup pose animation for those also. I'm not going to show that now, perhaps I'll add another tutorial for that.

Arm and Muscle

First start out with drawing a two bone chain in the top viewport and place it in the correct position (btw, the model I'm using is the built in "man", simple so that you can replicate it).

Now we are going to draw out two single chains. One for the upper arm and one for the lower arm. Place them as I have done.

It might be a "little" messy to view. But I've changed the viewing of the bones to "box" and "pyramid", and hopefully you see them better (the default visuals wasn't readble in a JPEG image).
Now we are going to use our puppet toolbar. Make a 'puppetsphere' that you name 'LUAM_top' (which means Left Upper Arm Muscle Top). And chose 0.5 as the radius. Now branch select the Zeronull and move them both up to the root of the Biceps chain (or position constrain the null and then remove the constrain). Make another sphere which you name 'LUAM_bottom' same radius. And place it at the effector of the Bicep chain. Do the same thing with the lowerarm mucsle (and call them LLAM_top and LLAM_bottom). Your scene should now look like this (with the the "man" mesh hidden).

Now we need to parent the ZERONULL's to the chains. The ones that are named "top" should be parented to the upperarm. And the ones that are named "bottom" should of course go on the lower arm. Your schematic view should look something like this.

I use the old Softimage|3D style for drawing bones, so your schematic perhaps looks different. But the results will be the same anyway.

Now is when the "magic" starts. So for the muscle bones. First you position constraint the roots to the "top" spheres and the effectors to the "bottom" spheres. This shouldn't move anything out of the place.

So now select your bicep chain and press enter on the numeric keyboard (this should bring up the properties window). Under the "Chain Bone" tab you should find the properties for Lenght. Right click on the keyframe button to the left of the lenght slider. And chose "set expression"

This brings out the expression window. Delete anything that's already in the text window (should be the number of the current lengt). Now we need to add an expression that tells us how long we want this bone to be. And this is the reason why we made our spheres. We want the bone to always be the lenght between our sphere's. So for this we us an expression that gives us the distance between the to spheres.
In the expression window there is a button called "function" there you can find the most basic expressions. So chose "function -> Distance -> Center to Center". In your text window it should now read:

ctr_dist( <elem1> , <elem2> )

The "<elem1>" should be replace with our spheres. So select the "<elem1>" and press down the button object and find your LUAM_top. Then do the same for "<elem2>" but chose LUAM_bottom. Then press the validate button to check that it's a correct expression. Your expression window should look like this:

Do the same for the other chain. But use the "LLAM_top" and "LLAM_bottom" spheres. You should now have a working strechy bone!

Now if you need to adjust your bones you move the ZERONULLS. Envelope the character and test your bones. I will discuss the "bulge" matter in the next part (which will be written later).

2003, Stefan Andersson