Wednesday, 24 November 2010

Managing multiple skeleton poses (model pose, T pose etc.)

Usually the skeleton will be built for a mesh in a model pose and this is also the position that the mesh will be skinned in. For constructing control rigs however, we want the skeleton in a T pose.

Also, character models are frequently updated after the rig is created and functionality can change which require modifications or additions to the skeletal hierarchy. All these modifications need to happen with the skeleton in the original bind pose, so the ability to store and apply multiple poses for both creation and ongoing maintenance of character rigs is essential.

The only provision in Maya for storing a pose on a skeleton is through the dagPose node which is created when a mesh is bound to the skeletal hierarchy. I find this to be extremely inadequate, there is no good way of creating and managing multiple poses and often you can end up with connections to the hierarchy that prevent Maya from setting the skeleton to a single bind pose.

The solution to this is a custom pose manager tool. It allows me to store any number of poses on the skeleton itself by writing rotation, translate and orient values to custom attributes on the joints. Setting the skeleton to a particular pose is simply a case of reading the custom attribute that corresponds to the pose and setting the joint attributes accordingly. This can be done for selected joints or the complete hierarchy.

Generally a character skeleton will have three poses;
  • The model pose - skeleton fits to the model as provided by the Character Art team
  • The T pose - skeleton in pose suitable for control rig construction
  • Modified bind pose - meshes re-skinned with knees, upper legs and elbows bent to around 30-35 degrees to help volume preservation (more on this in my next post).
Here you can download a version of the tool I use. It's had some extra functionality stripped out that isn't needed and it'll complain about a missing a .bmp file for the UI but other than that it should be good. Let me know if you have any problems and I'll do my best to help out.


  1. Cool idea. I've never even considered using multiple poses like that. More inexperienced riggers are using all the tools I write so I just designed all the control building scripts to work in whatever pose the character is built in for simplicity.

    Also in my latest revision I removed the control skeleton completely because of people not getting the distinction between the 2 sets of joints and doing things like binding geometry to the wrong skeleton.

  2. Hi Matt, just came across this blog - it's a great resource.

    Couple of questions regarding this:

    1. How do you rotate your joints accurately so that from the model pose you get perfect 90 degree angles for rigging? If you're starting from rotations at zero (model pose) how do you know that 33.85 degrees (for example) will make the shoulder perfectly straight?

    2. Why do you think the setState command doesn't work on my 2009 SP1a? Either via your script, or manually, it doesn't do anything... weird - IK will still affect the joints.

  3. Hey Geoff,

    (1) To set the T-pose I use an orthographic viewport and manually adjust the joint orient values until straight using the top of the viewport as a guide (low tech solution, but it works).
    I then have a script to map the new orientation onto the opposite limb so (a) I only have to do it once and (b) I know each side matches perfectly with no user-introduced errors.

    (2) Not sure why setState isn't working, I'm on Maya 2008 here (old I know!) so can't test in 2009.
    As an alternative you can use this:

    doEnableNodeItems false all;
    doEnableNodeItems true all;

    ...but you may need to source this script first (adjust for install path differences):
    eval ("source \"C:/Program Files (x86)/Autodesk/Maya2008/scripts/startup/doEnableNodeItems.mel\";");

  4. This is a great tool! You just saved my life.

  5. Since Matt's link does not work anymore I have written my own version of the tool. Anyone can download it here: