The Spine, with controls

There are just as many spine setups out there as there is animators. So this is how I make the spines for my characters. To demonstrate this I've only used the upperbody of a character that comes with Softimage|XSI. This technique can also be use in other applications.

The character I used was "Club Bot", designed by Michael Isner.



Depending on what your character look like you might wanna add or use less chains than me. For this character I'm going to use 3 singel chains for the spine.



As you can see I've draw the last bone the opposite way. This is to create a "ass bone". If you draw the bone the opposite way you'll get the benefit of a better control for the hip movments.

Now we need to build the control objects. Try as much as possible to avoid rotating/animating the chains it self. If you are rotating the bones you'll loose the possibility to have a zero value in your default position.
As an example. The second bone in this spine has the value of X=0 Y=0 Z=85.3823 You would need to write down the "85.3823" value or create a separate pose clip for each joint. Not very practical... So you would like this position to be the zero value? right? So to do this we need a few extra things. First create three nulls and align them in position ( not rotation! ) to the three roots of the chains. Then make each one of them the parent of the singel chains. Your schematic should now look like this:



Now we need to make the chain follow the rotations of the other chains. So position constraint the "Null2" to the "Null". And position constraint the "Null2" to the "eff1". Your Schematic should now look like this:



Now that we have done that we are going to create the control objects. For this I use my "puppet toolbar" which you can download here PupperMaster_Objects.xsiaddon. Install the addon by File->Addon->Install. You can of course make your own objects, it's just a tool to make it easier.



I'm going to use the "Puppet Square" first. So click on the Puppet Square button. Name the object "COG" press OK and then type in 6 units as it's lenght. It now created a square curve and parented it to a null. The null is named "ZERONULL_(the name you chose)". Branch select the null and square and move it to the exact position of the "null" object. Simplest way is to select the "ZERONULL_COG" and position constrain it to "null" and then remove the constrain.



You can also see that I color all my objects. This is purely to make it more visible. Now create another puppet square, name it "Spine1" and put it in the same position as the "eff1" object. But this time keep the position constraint to the "eff1".
OK, now we need to also create a "ass" control. So create another puppet square you call "ASS" and put it in the same position as the "null" object. But set the size to 5 so that it's a little bit smaller that the COG. This is now how things should look.



So let's start assigning the rotation values. We'll start at the top. Select the "Null2" object and orientation constraint it to the Spine1. if you now rotate the "Spine1" object you should have the bone reacting to it as well. And you can now type in 0,0,0 in the rotation value to get back to the default position.



Now select the "Null1" and orientation constrain it to the to COG object. if you now test rotate it you'll also see that the "Spine1" object is following the position. But now everything is what it should be.
Make the "COG" the parent of the "ZERONULL_Spine1" object. If you now branch select and rotate the COG it will react as it should.



But we don't want to branch select all the time. Download this script "lock_object.js"" (right click and "save target as..). Open up the script in the script editor. Now select the "ZERONULL_Spine1" object, then press "RUN" in the script editor.
If you now rotate the COG object the Spine1 will follow correctly. Next this is to do the same with the Ass bone. Make the COG parent over the "ZERONULL_ASS" object. Select the "ZERONULL_ASS" and press "RUN" in the script editor.

The reason why we use the "lock_object.js" script and not unclicking the "ChldComp" button is if you want to hand over the setup to another animator. You can never be sure if he/she has the "ChldComp" unpressed or not. This way you don't need to worry about branch selecting or the "ChldComp" button
We almost forgot, select the "null" object and orientation constrain it to the "ASS" object.

You "spine is now complete, and you learned perhaps a few thing about setting up controllers. Below are a few pose tests with just those three chains.




©2003, Stefan Andersson
"lock_object.js"©2003, Bradley Gabe, ILM