June 6th, 2007

A simple to use skeleton builder and autorigger that builds a fast, animator friendly, bipedal rig.  Some of the features include:

  • Entirely node based.
  • Fully scaleable.
  • Stretchy IK/FK legs and arms.
  • Combo IK/FK spine with up to 18 joints (and true IK as of version 1.9).
  • Knee and elbow snap to pole vector control.
  • Standard foot controls including footRoll, footBreak, toeRoll, toeTwist, ballTwist.
  • Space switching on all major control curves (including a tool to copy control positions across space switches).
  • Support for upleg, upArm, and foreArm split joints (up to two each).
  • FK/IK head controls.
  • FK/IK fingers.
  • FK/IK and IK/FK matching on the legs and arms.
  • Auto align on relevant FK controls.
  • A tool to create a skeleton for your character.
  • A tool for quick and easy control curve mirroring and modification (includes lots of prebuilt control curves).
  • A tool for easy rig removal and update.
  • A tool for easy creation of a scaleable, stretchy IK spline joint chain (complete with FK controllers) from a curve.
  • The ability to change the rotation order of control curves across an animation and retain your poses.

I wrote this script with the intention of using it to rig my own characters for my Animation Mentor short.  Unfortunately, it took long enough to write that I didn't have time to build and use it with my own characters.  

What I'm trying to say is that it hasn't been properly put it through its paces.  It might break horribly, it might not.  Ok, it probably won't break horribly, but I can't imagine there isn't something that I've overlooked.  Please let me know if you do find any bugs or have any problems at all with it.  If it works great for you, I'd love to hear about that too.

And as always, suggestions are appreciated.

How to Use

The script needs to be sourced before it will run.  Once you've copied the files to the appropriate directories, you can start it like this:

source abAutoRig.mel;abAutoRig;

And the UI should appear.  Note that you'll want to move through the tabs from left to right to gain all the functionality of the rig.

Begin by entering your character name in the field and click the "Create a Skeleton" button.  The abSkeletonMaker window will pop up.  This and the abWireReplace can also be accessed under the Tools menu that appears at the top of the abAutoRig window.

Build the Skeleton

In the abSkeletonMaker window, click the "Make Proxy Skeleton" button.  You can modify the proxy by moving any of the curves or locators in the proxy.  The red curves indicate grouped hierarchies, and moving or scaling them will modify their child transforms.  The entire proxy can be scaled by scaling the red locator at the world origin.

If you plan on using the snap to pv controller for the knee and elbow joints, you'll want to make sure that the first three leg and arm joints share the same x and y values respectively.  Otherwise you'll have no luck getting it to work.

If your character has fewer than five fingers, don't worry.  You can leave them on the proxy and delete the joints once you've created your skeleton.  The same goes with the neck, head and eye joints.

Once you've got the proxy where you want it you can set the number of Upleg, Uparm, and foreArm split joints that you want using the sliders.  Click "Build Skeleton" and close the abSkeletonMaker UI when you're done.

Rig the Spine

Select the number of joints you want to use in your spine, the spine root joint (which will be just above the hip), and the hip joint.  Click "Create Spine Rig".

You'll want to bind your character to the newly created visible spine joints and not your low, mid, or high spine joints.  You'll know them by the way they turn magenta when you select the hip joint.  Note that in recent versions of the script, the weightSpine joints can be found in the weightSpine_grp, which is located in your yourCharName_Skeleton_grp.  If you rerig your character spine with the same number of joints, your existing weightSpine joints will be reused, so you won't have to worry about re-weighting your spine.

The octagonal control curve next to the spine (the Spine/Split control) can be used to change the influence of the hip, low, mid, and high spine control curves on each of the ik spine joints y rotation.  Just make sure that the four values under each spine joint add up to one, or else your rotations will be out of whack.  (Note that this control will also contain the rotation ratios for all of the split joints on the rig, as well.)  The visibility for this curve can be adjusted on the root control.  

The curve just below the top spine control is the spine shaper.  It's useful to shape the spine when you're translating spine control curves.  Its visibility attribute is located on the cog control.

As of version 1.9 you'll find the "useRootSpace" attribute on the high, mid, and hip control curves.  You can enable this for each curve individually to use it as a true IK control.  The low spine control curve will remain parented to the COG with only the rotation attributes available.

Note that I've changed the spine in version 2.7 to be much less flippy than before.  The spine setup will still create all of the same control curves at the same locations, so if you've referenced your character it will animate in the same way.  The only discernable difference (aside from less flipping) is that there are no longer spine rotation attributes on the Spine/Split control.  You still need this control though, because it's used by the leg, arm and hand setups to hold some important attributes, so don't delete it.  If you're unable to update to the new spine for some reason you can alleviate some of the flipping by following these instructions:

  • Locate the yourCharName_weightSpine_rig_grp in your spine_rig_grp.
  • Delete the existing parent constraint ("yourCharName_weightSpineTargetGrp_parCons")
  • ParentConstrain yourCharName_weightSpine_rig_grp to the COG ctrl curve, ensuring that maintain offset is checked in the parentConstraint option box.

Head and Neck

Specify the neck, head and optionally one of the eye joints to rig this part of the skeleton.

The head control has an optional control to translate the head that's hidden by default.  Enable the "ikCtrlVis" attribute to see it.  You can unparent the head from the rig and put it into rootSpace by enabling "useRootSpace" on the head translate curve.

The Legs

Select the number of upLeg split joints in your leg hierarchy and an Upleg joint.  Click the "Create Heel Locator" button and place it in the position where the foot should pivot about the heel (it might not need to be moved at all).  Once you're happy with its placement, click "Create Leg Rig".  Note that unlike the other rigging functions, the leg rig doesn't undo cleanly.  Use the rig removal tool to get rid of it.

The leg ik control curve is located behind the ankle.  Most of the attributes should be self explanatory.  FootBreak is the amount of positive footRoll after which the toe will roll instead of the ball.  MaxStretch is the maximum length in terms of initial length that the leg will stretch before it can't stretch no more.  Setting this to 1 will disable stretchy ik.  Fk stretch along with ik and fk leg visibility can be accessed by selecting the square control curve under the foot.

The pv control contains the standard translate and space switching attributes as well as snapKnee.  If you've kept your upLeg, knee and ankle joints in the same xy plane then adjusting this value to one should snap the knee joint to your pv control.

You can rig the other leg by selecting its upLeg joint and corresponding heel locator and again clicking "Create Leg Rig".  If you're using version 1.7 or greater, the other leg will be automatically rigged at the same time as the first.  Select Options > Auto Mirror to disable this feature.

Eight Arms to Hold You

How about two.  Because that's what this script will do, two.  By now it should be pretty clear how to use this thing.  Specify the number of split joints and an upArm (shoulder) joint.  The arms are basically the same as the legs with the addition of an fk shoulder.

Once you've finished rigging at least one arm or leg, you'll see new button appear in your current shelf.  You can click this button to access the FK/IK snapping UI for your character.  It should be pretty self explanatory.  Don't forget to change the namespace drop down if you're using your character as a reference.

The Hands

So here we are at the hands.  The only special thing about the hands is the way you can specify joints in the UI.  You can select them in the order they're listed in the Hands tab, click "Hand Quick Select", and they'll be selected in the UI.

Also, all but the "Hand Ctrl", "Thumb", and "Index" fields are optional.

Version 1.7 introduces a few new hand attributes.  MasterSpread spreads all of the fingers based on the individual finger values located on the Spine/Split control (under the Left and Right Spread attributes).  MidCurlAmt and tipCurlAmt determine how much the masterFist and fingerCurl values will rotate the mid and tip joints relative to the baseJoint.

Fix Those Ugly Wires

If you want to change any of the wire controls (which you probably do), you'll want to use abWireReplace, which can be found under the tools menu.  With it you can select a control curve and double click your desired curve type in the scroll list (or click "Replace Selected") to replace it.  The radio buttons below determine the axis that the newly created curve will face.

Use "Copy From To" to replace a curve with your own.  Position your curve exactly where you want it, select it, select the control curve you want to replace and then click the button.

"Mirror Selected" will mirror the selected curve to any curves that lie on the mirror side of the xy plane.  Select the curve you want to mirror and click the button.

The "Wire Scale" floatField has been added as of version 1.7.  This value determines the default size of replaced controls.  If a curve shape is highlighted in the UI, control-LMB, MMB, or RMB dragging over the field will interactively scale the selected curve.

Easy Space Switching

All of the controls that support space switching (including the spine and head curves with the "useRootSpace" attribute) can be used with Tools > Space Switch Matcher.

To use it, just select the curves with positions that you wish to copy and press "Copy Position" in the tool UI.  Now move to a frame before or after a space switch on those same curves and click the "Paste Position" button.  The curves will snap to the same position they occupied on the copied frame.

Remove and Update the Rig

As of version 1.6 I've included a tool to easily remove parts or all of the rig.  It will only work on rigs made with version 1.6 of the script or greater.  Rigs made with earlier versions won't be recognized.  Sorry, you'll have to strip them manually and re-rig.  Also, be aware that the script won't open unless it finds at least one rigged (by 1.6 or greater) character.

To begin click Tools > Rig Remover in the main UI.  You'll be greeted with the abRigRemover window.  Select the rig you wish to modify from the option menu.  Next, hilite in the textScrollList any and all parts of the rig that you wish to remove from the skeleton.  Click "Remove Selected" and it shall be done.

If you're updating the rig and you've modified your character's control curves, you'll probably want to save them before deleting the rig.  Select the character's rootCtrl and click Tools > Save Wires To Shelf.  A new button with your character's name should appear on the current shelf.  Once you've updated the rig, your curves can be restored by selecting the rootCtrl and clicking the shelfButton.

Make a Stretchy Spline

As of version 1.8 of the script you can use the nimbly named abMakeStretchySpline tool to quickly make a stretchy spline rig from a curve.

To use it you first need to create a curve with knots placed where you want the FK controls.  Note that the control curves will taper from the beginning to end, based on the direction of the curve.

Once you've got your curve, click Tools > Stretchy Spline from Curve to open the script UI.  Select the curve you just made and click "Select Curve".  Once you've specified the number of joints you want in your spine and a unique naming prefix, you can click "Create Stretchy Spline".  And there you go.

Note that the root control has a few extra attributes compared to the others.  "Stretchy" enables and disables the stretching of the joints with the curve.  "Rig Scale" will scale the rig up and down.  And the "Squash Driver" and "Stretch Driver" attributes are intended to drive squash and stretch blendShapes, the manner in which those blendShapes are driven can be adjusted with the falloff and scalar attributes.

Release the Hounds

A few things on my to do list for this script are:

  • Add head scaling.
  • Include UI for attaching a proxy and controlling overall mesh visibility and resolution.

That's pretty much it, except for a few notes for the skimmers.

A Few Notes (for the skimmers)

Auto Rigging

The script will do strange things if your working units are in anything but centimeters.  You can switch back to your preferred working units once the rig has been created.

Be aware that autoFill (in version 1.6 and greater) fills mirrorable object fields (upArm, upLeg, the hand fields, etc.) with objects on the left side of the rig (+x) by default.

Currently the script doesn't create a standard reverse foot rig.  Instead of the toes pointing at the foot control when moved beyond the leg's maximum stretch, they'll stay in the position they are posed in.  I prefer it this way; others might not.

The leg rig doesn't undo correctly.  It can be undone, but you'll be left with some control curves and a toe rig joint (which ends up jumping into your skeleton hierarchy) that you'll have to delete manually.  Use the rig removal tool to delete it (unless you're dealing with a rig created with version 1.5 or below of the script, in which case you have to do it manually).

Heel locs should be properly aligned.  If not just rotate them until they are.

If you slide the IK/FK blend attribute on the legs and arms when the IK and FK limbs are in the same position, they'll rotate the long way around.  This shouldn't be a problem when animating.

If your skeleton has split joints and you want to change the x rotation of the hip or wrist, remember that you can adjust those values on the Spine/Split control (the octagonal wire next to the spine).  Keep in mind that the values for each category must add up to 1.

The "Char Name" attribute needs to match the character you're working on.  If it doesn't, some stuff will probably break (most notably, the rigRemover).

The shelf button created along with a rig (used to access the FK/IK snapping functions) won't work unless the script has been sourced first.  It also won't work if you rename your control curves.  In version 1.9 (only), it won't work if you move the rig_grp folder either.  It's easily fixed, though.  See the updates below.

Which reminds me, don't rename your control curves.  Actually, don't rename anything in the rig_grp.

Skeleton Maker

You can delete a proxy skeleton by deleting "skeleton_proxy_grpLoc".  All the associated nodes will be removed from the scene as well.

When building a skeleton, the first three joints of the leg (upLeg, knee, ankle) and arm (upArm, elbow, wrist) must lie in the same x and y planes respectively for the snap to pv function to work correctly.

The default skeleton is slightly misshapen and out of proportion.  If you come up with a more useful default skeleton, please send it to me.  I'd be more than happy to replace the current default.

Wire Replacer

Some of the curves created by the Wire Replacer are currently less than spectacular and maybe even slightly useless.  I'll fix them at some point.

The rig should be in the default position for the mirror curves function to work.

For Those New To This

Save your rigged character in its own file and reference it into your scene.  That way if you need to make changes to or update your rig your animation won't be lost (as long as your control curves names stay the same).

If you're using corrective blendShapes on your rig, make sure that they're not driven by your control curves.  It easier to update your rig that way.

More Learnin'

Thanks to Olivier Ladeuix for making these:

abAutorig Part I Pyro Tutorial
abAutorig Part II and III, Pyro Tutorial

On Vimeo:

Part I
Part II
Part IIIa
Part IIIb


Update/Bug Fix
June 7th, 2007 Heel locs axes, and therefore foot Ik control curves, are now properly aligned.
Update/Bug Fix
June 8th, 2007 Went back to my previous way of doing stretch on arms and legs that I think is more flexible.  FK stretch is no longer limited by the IK maxStretch attribute.  Exposed stretch amount on arms and legs.
Update/Bug Fix
August 1st, 2007 Split joints now work properly.  Master control can be rotated without any problems.  Added split joint rotation ratios to spineSplit ctrl (the visibility of which is now located on the root ctrl).
Update/Bug Fix
June 9th, 2007 Exposed stretch value for spine on cog ctrl.
Update/Bug Fix
June 15th, 2007 Fixed a problem with the arm and leg creation failing on 8.5 in osx.
Update/Bug Fix
June 14th, 2011 Shelf will be now enabled if off.  Adjusted UI sizes for 2011 and up.  Added "Mirror From To" to Wire Replace UI (select a source curve then a destination curve and click).
Update/Bug Fix
June 19th, 2007 FK to IK snap now fully implemented on legs.  Stretch value now displays the correct value when used on an arm or leg with split joints.
Update/Bug Fix
June 21st, 2007 Added optional ik fingers to hand rig.  Space switching on mirrored controls now works properly (leg and arm IK, hand).  PV controls will now follow their ik curves when their space is set as such.  Updated Fk to Ik snap to work when a character's rig group has been regrouped or moved in the scene hierarchy.  Fk/ik snap also now supports references via the namespace optionMenu and works with previously built characters.
Update/Bug Fix
August 1st, 2007 Split joints now work properly.  Master control can be rotated without any problems.  Added split joint rotation ratios to spineSplit ctrl (the visibility of which is now located on the root ctrl).  Fixed the way scale is determined so pv control wires will now mirror properly.  Added popup to select target object when wire mirroring encounters multiple mirror objects.
Update/Bug Fix
August 3rd, 2007 Made a small change to the way finger IK ctrls are scaled.
Update/Bug Fix
August 10th, 2007 Weight spine joints now rotate correctly with rootCon rotations.  Thanks to Josh Yoder for finding this.
Update/Bug Fix
September 27th, 2007 Under "Tools" menu added "Save Wires to Shelf" (with its own icon) and "Rig Remover", both of which should make for easier updates.  IK and PV controls are now aligned along the world axes.  Improved default rotation order on control curves.  Script will now attempt to repopulate UI fields (hidden and non) automatically, which, among other things, means that parts of the rig can be added after the UI has been closed and opened again without a problem.  Added scale slider and four new shapes (tweaked others) to abWireReplace UI.  Improved error handling (the script now checks for an existing rig upon creation).  Slight improvements to the default skeleton.  Killed a few bugs.
Update/Bug Fix
October 3rd, 2007 Fixed the hand IK rotation problem by adding "Align Hand IK to World Axes" checkbox to the Arm tab.  Leaving the checkbox blank will align the IK control to the wrist joint and allow it to rotate the hand.  Enabling it will freeze the control's transforms and lock and hide the rotation channels.  Modified default LRA alignment on arm, wrist and hand joints to make the IK control a bit more intuitive.  IK finger rig now blends properly between FK and IK.  Added curl attributes for each finger as well as midCurlAmt and tipCurlAmt, which determine how much the respective joints will rotate relative to the base joint when using masterFist and fingerCurl attributes.  Added masterSpread to hands and individual finger spreadAmount attributes to spineCtrlCrv to specify the amount each finger is affected by masterSpread.  Wire replacer should now work more reliably overall.  Adjusted the object centers of curves which should eliminate drifting when replacing wires.  Replaced wire scale slider with a float field, which can be control-LMB MMB or RMB dragged on to interactively scale the selected wire.  Creating wires along the -z axis now works as expected.  UI field auto fill is now more comprehensive (be aware that it fills mirrorable object fields (upArm, upLeg, the hand fields etc) with the left objects by default).  Added the ability to rig mirror limbs at the same time (The options menu finally has a child).  Lot's of other small stuff.
Update/Bug Fix
December 21st, 2007 Added ability to select hand joint rotation axes under Options > Hand Options.  Added "Stretchy Spline From Curve" to tools menu to make quick and dirty IK spline joint chains.  The knees once again stretch as they should (oops).  UI field auto fill now includes the number of split joints.
Update/Bug Fix
January 4th, 2008 Added individual up and low limb stretch attributes to legs and arms (works with limbStretch on foot and wrist controls).
Update/Bug Fix
January 10th, 2008 Added the ability to scale the stretchy spine.
Update/Bug Fix
February 8th, 2008 Less flipping when sliding IK/FK blend on leg and arm joints.  They'll still flip occassionally when the root ctrl has lots of rotations, but only when the IK and FK limbs are in matching positions and the ikFkBlend is between 0 and 1.
Update/Bug Fix
February 21st, 2008 Rig is now scaleable.  Added true IK to spine controls (enable "useRootSpace" attribute on the control curve).  Added translate control to the head, which can also be used in IK mode (enable "ikCtrlVis" on head ctrl to see the control).  Added utility to match ctrl positions across space switches ("Space Switch Matcher" in tools menu).  Added snapIKtoFK and hugely improved SnapFKtoIk (both can be found in the character shelf button).  Unfortunately, older snapFKtoIK buttons won't work anymore, which is not a huge problem because it wasn't really working that well anyway.  FK controls with align attribute now auto align with the root ctrl (<- this is awesome for those of us who love the align att).  Rig Remover will now work with multiple characters in a scene.  Improved stretchy splines (made with "makeStretchySpline") scaling.  Removed World space from space switch options as it was pointless.  Disabling all of the spaces does the same thing.  Fixed spine stretch value.
Update/Bug Fix
February 25th, 2008 Very small fix.  IK/FK snap button now works when rig_grp position has changed in the rig hierarchy (placed in a new group).

To fix a button made with 1.9, just copy the button command into a text editor and replace all instances of ">|" with ">" and all "&|" with "&".  Replace your current command (of the IK/FK snapping shelf button) with the modified version and you should be good to go.

Update/Bug Fix
April 22nd, 2008 Weight Spine joints are now created in the skeleton grp.  They aren't deleted when you remove the rig, so you don't have to reattach and weight them when you update the rig.  Added "Reset Character to Default Pose" (which can be also be called with "abRTResetCharPose(1)") and "Reset Selected Control Curves to Default" (call with "abRTResetCharPose(0)") to Tools menu.  Added ability to lock proxy controls to prevent troublesome translations and rotations.  Added a warning when building the skeleton about snap to PV not working under certain conditions.
Update/Bug Fix
April 23rd, 2008 The script now supports feet that have been rotated out of the YZ plane.  When building your skeleton, match the foot locators (ankle, ball, and toe) to your mesh by moving them in their local YZ planes (no X) and rotating the "lf_foot_grpLoc" in Y.  If you want to use an existing skeleton you'll have to orient the ankle and ball joints first.  To do so, select left and right ankle and ball joints and run "joint -e -orientJoint xyz -sao ydown;" in the command line.
Update/Bug Fix
April 28th, 2008 Skeletons on layers can now be rigged.  IK and FK joints won't be colored, though, so you're better off keeping it off of a layer until the rig has been created.  Added a spine_end group control to the proxy skeleton.
Update/Bug Fix
May 7th, 2008 The skeleton created by skeleton builder is now mirrored in behavior instead of orientation (except for the eyes and, optionally, the legs).  I had to update hand rigging (among other things) to accomodate the change, so I've added a new a menu item (Options > Hand Options > Reverse Right Curl) which should be enabled when rigging skeletons created with earlier (pre 2.0) versions of the script.  Added "Mirror Leg Behavior" menu item to the skeletonMaker UI (enabled by default).  Disable it to mirror the leg joints by orientation.  Changed the way "Align Hand IK to World Axes" works -- rotations are now allowed.
Update/Bug Fix
May 8th, 2008 The UI autofill feature was missing some important hidden fields which kept certain spaces (like handCtrl for finger IK controls) from being created.  Now that it's fixed, the finger IK curves travel with the hand as they should (they're constrained to handCtrl space by default).  I also added the option to skeletonMaker to specify the number of fingers on the proxy.  Note that if you recall a saved skeleton from a shelf button, it will respect the current finger num value if the skeletonMaker UI is open.  Neck and head joints are now aligned so their control curves rotate the same way as the spine curves.
Update/Bug Fix
May 9th, 2008 Proxies saved to the shelf now have local transforms preserved (including scale on the rootLoc).  Feet rotated out of Z should now rig correctly when there are Y rotations on the leg_grpLoc.
Update/Bug Fix
May 12th, 2008 Fixed a bug with weightSpineGrp that prevented multiple character spines from being created in the same scene.
Update/Bug Fix
May 13th, 2008 Added Joint Orient Rotation Tool to Tools menu.
Update/Bug Fix
May 16th, 2008 Improved skeletonBuilder's orientation of joints in legs and feet when the limb has been rotated in Z.
Update/Bug Fix
May 29th, 2008 Added tool to add weight joints to a skeleton (useful for the lower leg), Tools > Add Weight Joint Tool.  Removed snap to PV warning for legs (they work when rotated -- the arms still don't).
Update/Bug Fix
June 7th, 2008 Leg split joints now rotate properly when the knee is brought above the waist.
Update/Bug Fix
July 13th, 2008 Fixed rt_thumb_grpLoc default skeleton proxy positioning.
Update/Bug Fix
August 5th, 2008 Added djx's fix to GroupFreeze procs.  Character names must now be unique before a proxy can be skeletonized.
Update/Bug Fix
October 14th, 2008 Changed min value on armStretch and legStretch attributes to -9.9 (arms and legs can now stretch negatively).  Improved default finger joint LRA orientation.
Update/Bug Fix
October 16th, 2008 Added "Align Control Curves to Spine" button on the Spine tab.  If enabled the mid and high spine controls will align to their respective joints; otherwise they'll lie on the XZ plane (the previous default).
Update/Bug Fix
December 2nd, 2008 rt_thumb_a_loc is now properly parented in proxy (to rt_thumb_grpLoc).  Added "Quick Create Character Set" to tools menu.  Select a control curve on your rig and then run it.
Update/Bug Fix
December 22nd, 2008 Added "Change Rotation Order Tool" to tools menu.  With it you can change the rotation order of any selected control curves and maintain their orientation across one or many keyframes.
Update/Bug Fix
January 16th, 2009 Simplified the spine and made it much more robust.  Note that although the spineRot control curve no longer holds spine twist attributes, it's still used as an attribute holder for the arm, leg and hand setups.  So don't delete it.
Update/Bug Fix
January 23rd, 2009 Fixed an issue with IK/FK arm snapping.
Update/Bug Fix
February 9th, 2009 Soft selection is now disabled before creating a rig.  It can cause an issue on 2009 and up (thanks bm jo).
Update/Bug Fix
February 11th, 2009 Fixed issue with limbs flipping when sliding IK/FK Blend attribute values (finally!!).
Update/Bug Fix
February 20th, 2009 Big enhancements to the twist joint setup in this version.  There are now two types of split joints: inline, the previous type which are parented one to another, and branched, which are all parented to the up joint.  Use inline for upArm and upLeg joints (where twist is read from the upJnt) and branched for foreArm and knee split joints (where twist is read from downJnt).  The forearm and knee twist is read from an aim constraint, which avoids a lot of gimbal lock problems with the wrist.  The idea is Adam Mechtley's, not mine, so a huge thanks to him for sharing his knowledge.  You can find his videos regarding the aim constraint setup at his site, www.6ixsetstudios.com.

Other new stuff: the "Add Split Joint" tool to the Tools menu, "Refresh UI" to the Options menu, knee split joints, and the addition of COG space to the hand IK controls.  Also, the leg and arm hierarchies are now checked before rigging to make sure that the joints are zeroed out.

Note: If you have issues with a knee or elbow shifting slightly after it's rigged, check to make sure that the preferred angle on your joints is set to 0 0 0.

Update/Bug Fix
April 7th, 2009 Adjusted proxy skeleton finger joints so that they're now aligned with their parent grpLocs.
Update/Bug Fix
April 23rd, 2009 Arm IK/FK snap should now work with referenced characters.
Update/Bug Fix
April 29th, 2009 Added more softmod warnings.
Update/Bug Fix
May 26th, 2009 UpLeg and upLeg split joints now rotate as they should when the knee is brought above the waist (forgot to remove an old fix -- that's why this one reappeared).  Improved stretchy spline maker; control curves can now be parented to a root transform or to the curve below them in the hierarchy; spline IK now rotates properly in a rig setting; added the ability to select the spline's parent object in the UI (leave it empty and a new control curve will be created at the base of the curve).
Update/Bug Fix
July 30th, 2009 Added "Weight Joint Selector" to "Tools" Menu.  Use it to quickly select joints for weighting.  Hold the shift and control keys when clicking to add or subtract from the current selection.  Also added "Make abxPicker Character Sheet" which will create a character UI node for use with abxPicker.mel (http://www.highend3d.com/maya/downloads/mel_scripts/animation/4216.html).  Please, someone, make a better UI and send it to me -- I'll incorporate it into the script.
Update/Bug Fix
July 31st, 2009 Improved abxPicker UI.
Update/Bug Fix
September 1st, 2009 Fixed issues with non-mirroring pinky and ring cup joints.  Added "Make IK/FK Snap UI Shelf Button" to the "Tools" menu (create a snap IK/FK shelf button for existing characters) and "Auto Build IK/FK Snap UI Button" to "Options" (uncheck it if you get the error "Object Not Found: Toolbutton 1" on rigging arms or legs).
Update/Bug Fix
September 24th, 2009 Improved "Make IK/FK Snap UI Shelf Button".
Update/Bug Fix
December 9th, 2009 Fixed issue with "Make IK/FK Snap UI Shelf Button".
Update/Bug Fix
March 4th, 2010 Check Character names for and remove "lf" and "rt" strings (can cause issues).  Added popup menu to charName field to quickly select existing characters.  Fixed issue with mirrorObj function and objects with shared names.  Improved heelLoc positioning method (esp. when ball and toe don't share the same Y translation) and foot IK control positioning when there are rotations on the proxy skeleton's foot_grpLoc.
Version 3.11
March 16th, 2011 Added abRTWireReplaceUI fix for Maya 2011 from Highend user cutjules1 (thanks Julien!).
Version 3.2
June 14th, 2011 Shelf will be now enabled if off.  Adjusted UI sizes for 2011 and up.  Added "Mirror From To" to Wire Replace UI (select a source curve then a destination curve and click).
Version 3.3
June 23rd, 2011 Removed redundant function "abRTGetCtrlCrvs" (replaced instances with "abRTGetRigGrpCtrlCurves").  "Save Wires To Shelf" now works on rigs other than the just the original they were saved from.  Hold the Control key when clicking a wire restore shelf button to replace only the selected curves.

"abAutoRig" was posted on June 6th, 2007 under Mel Scripts.  It was created using Maya.  It is tagged with Autorig, Character and Rig.

This entry was last updated on June 23rd, 2011.

Subscribe to the Comments Feed or Updates Feed for this entry.

Share |


June 22nd, 2011 said:

Hello, congratulations for the automated setup works fine and is definitely the best around. I would like to know if there is a command that allows the "Select_All_Controls" or simply just trying to do a select "_ctrl *" so you can create a set for the selection of all the controls. If there were possibly already be edited to add additional controls to the list? Thank you for your future answer! I am a rigger and I like your autorig because it is the most functional and editable!

June 22nd, 2011 said:

Hi Michele,

Yes, there is a way (buried in all those lines of mel) to select all of the controls on a character.  As I looked through the script, I discovered that I actually had two functions that did the same thing.  I'll remove one in the next version, and stick with the proc named abRTGetRigGrpCtrlCurves.  It takes the name of a rig group (the null that contains the rig -- something like "charName_rig_grp") in the current scene as its only argument.

I've also got a function that determines the rig group based on the currently selected control curves.  If you expect to have at least one control curve selected on a character you can use the following mel to get all of that character's control curves:


Hope that helps.

By the way, I love the image on the front page of your website.  Beautiful work.

June 23rd, 2011 said:

I really appreciate the fast response and are flattered that you like my site and my work! I launched the process and I will return one row with all the control names. One thing I do now and try to write a procedure that stores the positions of the vertices of each shape controls so you do not have to readjust all forms of shape control in the event that you must recreate a part of the setup such as spine or legs. Thanks again, I love working with people who have a high level of professionalism! Have a nice day!

June 23rd, 2011 said:


Just to let you know, that functionality is already in the script.  Select a control curve on the character whose wires you want to save, and click the Tools > Save Wires To Shelf menu item.  You'll get a shelf button which you can then click to restore the control curves on the selected character.

I just updated the wire restore function in the most recent version (3.3) of the script so that it should now work across differently named characters.

June 24th, 2011 said:

Well what to say, I am speechless! Your support is important, thank you! Now we will update the pipeline and I will use the functions that I have explained. You were kind and I will not hesitate to write more these days! Thanks again!

June 26th, 2011 said:

Hello, Thank you for your abAutoRig tool, it's amazing. I have some basic questions if you don't mind: Can we customize the control in the channel box to fit our character, for example the master fist need to be tweaked to give our character a perfect fist pose? is it done with set driven keys?   Another autorig tool have a handy function for that where you select the attribute you want to tweak, move your joint, then click on a fit button to set the new positions of the joint as default one.

Can we easily add custom attributes,  without breaking the rig?

Are you planning to integrate new features or even to propose an advanced (paid ?) version.  

Thank you, your work is really appreciated.

June 29th, 2011 said:

Hey SamSAm,

Thanks!  The rig doesn't use any set driven keys, though in the case of the master fist attribute there are related scalar atts (I believe; I'm not looking at it at the moment) that allow you to set the amount each finger curls relative to the master fist attribute.  Not the same as SDKs, I know.  You can add custom attributes that would do exactly what you want, but they would be lost if you remove and rebuild the rig (which might not be an issue).

Currently, I'm not actively developing the script, and really haven't been for a while.  I feel like it's mostly where I want it to be.  I do update with bugfixes and for new Maya releases (when I get them), though.

I can't say that won't change, especially if I start working on another short.  But as of now I don't have any big plans for the script.

August 2nd, 2011 said:

Hey Crumbly Master,

Long time not chatting here, i was busy with my tasks. But since i have a little freetime, i want ask a simple question.

Is it possible, to make the IKFK snap UI and function independent from the autorig script?

Thats it for now, and have a nice day.


August 8th, 2011 said:

Hey Scabyx,

I'm not sure what you mean?  Do you mean that you want it contained in a .mel file separate from the autoRig.mel?  Or that you want it broken out as sort of a universal IK/FK snapping script that could work on other rigs?

Or maybe none of the above?

October 27th, 2011 said:

Hey Crumbly,

I need help to simply run the script. When I go to script editor -> load script -> and make a shelf from the code, nothing happens (I click on the shelf but nothing happens - I'm using Maya 2011). I put the script at Documents -> Maya -> Scripts. So, I came here to the site and found the instructions above (source abAutoRig.mel;abAutoRig;), but when I write, the message is

// Error: (source abAutoRig.mel;abAutoRig; // // Error: Syntax error //

Could you help me on this one?


October 27th, 2011 said:

Hey Crumbly,

It's me again. Another massege is

source abAutoRig.mel;abAutoRig; // Error: source abAutoRig.mel;abAutoRig; // // Error: Cannot find file "abAutoRig.mel" for source statement. //

October 28th, 2011 said:

Hey Arthur,

The first error code that you received was the result of an errant parenthesis at the beginning of the statement (it should start with "source" instead of "(source").

As for your second post, make sure that you start (or restart) Maya after placing the script in the correct directory (you can also enter and run "hash" in the Script Editor or commandLine).  If, after that, you continue to get the same error, you'll need to do whatever troubleshooting it takes to make sure that the folder is actually a script directory (in your scripts path).  

Could you have mistakenly placed it in an script folder from another install of Maya?

Good Luck!

December 4th, 2011 said:


The rig is fantastic, I really enjoy using it. I ran into one problem and can't find a way to fix it. When I turn align on for the upper part of the arms, so it doesn't move with the shoulder I get this odd rotation on the RY channel on the joint of the arm and it causes odd deformation in the skinning. It only happend when the align is turned on. Any idea on how to fix this? it the only thing giving me problem.

Cheers, Tal

December 5th, 2011 said:

Hey Tal,

Thanks!  I see what you mean.  There seems to be some other weirdness with the rotations on those upArm joints, too.  I'll see what I can do.

December 6th, 2011 said:

Thanks man, that would be amazing!!!!!

December 13th, 2011 said:

Hey Tal,

I've been working on a pretty huge update to the script for a while now, and in it I've addressed the issue you mentioned (and in the process made some really significant improvements to the shoulder setup).  Unfortunately, I can't easily retrofit it onto the existing script, so you'll have to wait for the new version.

I plan to release it in two versions: one free with all of the features of current rig (plus lots of improvements) and a paid version (probably about $20 or so) with a few more advanced features, like the option for many more spine controls, multiple neck joints, a mirror pose tool, more hand control options, a character marking menu, and a bunch of other stuff.

I'm almost done with it, but I'd like to do a bit more testing before I release it.  It should be within a couple of weeks or so.

Thanks for the feedback.  I'll send you a copy of the new version when (maybe a bit before) it's ready.

December 16th, 2011 said:

Hi Crumbly,

Thanks for getting back to me, I am looking forward to the update. From what I understood you are saying there is no way to fix the curent problem, right? I have spent a lot of time doing corrective blendshapes and setting up the deformation, so it would be hard to redo it. Is there no fix at all? thanks again for taking the time!!

Cheers, Tal

December 16th, 2011 said:

Hey Tal,

I'm sure there's a way to fix it, and I'll take another look to see if there's not something simple that I'm overlooking.

The skeleton on the new rig is very similar the original.  The difference is that there are separate split, up, mid, and down joints for the limbs which sit on top of the base skeleton's up/mid/down joint hierarchy.  It's similar to the way the spine is set up, and it allows for all kinds of flexibility in rotating joints that the earlier rig just didn't have.

As long as your corrective blends are driven by non-split joints in your skeleton (as opposed to control rotations or other inputs connected to the rig), you shouldn't have a problem.  All of the existing joints, except for splits, remain unchanged.  They're just no longer bound to a skinCluster.

Also, I've just finished a tool that automates the process of moving to the new limb structure.  It also takes care of copying the weights from the old to the new joints on your bound meshes, which makes the process pretty simple (assuming it continues to work as well as it has in my tests).

December 17th, 2011 said:

That would be great!!!

January 3rd, 2012 said:

First in 2012... Great Tool! It's really a time saver. Looking forward to test the update! cheers, flo

January 20th, 2012 said:

Hi Crumbly First of all, thanks for this tool, I find it very usefull and very well done. I've been using The Setup Machine so far for rigging my characters, but was looking form something lighter and more animator-friendly. Your rig does all that, and some controls are very similar to those in AM (which I finished a year ago), so it's a nice surprise to see something that familiar.

I have some questions, though. First thing I found quite confusing was the fact, that you cannot rotate the leg in proxy skeleton (or move the foot/knee in x), because these attributes are locked. Most of the models I worked on dont have straight vertical legs. But I found out here that it's ok to unlock these attributes and move the proxy anyways. I just think you could mention it in the instructions above, because I wasn't sure if its ok to unlock these and move around withouth the rig breaking.

The second thing, and my main concern is the spine - I find it difficult to work with the way it is by default, and Im not sure how to work around this. Is there any way to switch between ik and fk for the spine, or is it just a hybrid? I'm pretty sure Im missing something because when it is created there is a second ik-spline spine underneath but it doesnt affect the rig in any way. Same goes for the spineShaper_ctrl (it moves around the ik spline, but it does nothing to the rig). What am I missing here? I'm looking for an IK spine, where I could move the top part and the bottom part seperately, shaping the middle with the middle control. But where I could also move the whole upper body with the cog ctrl.

Anyways, Thanks for sharing such a great tool for rigging

Cheers, Droo

January 20th, 2012 said:

Hey Droo,

It's true that you can unlock some of the proxy control channels and not incur too many issues.  If you've created your skeleton with a rotated knee, though, you'll probably find that the snapToPv attribute (when enabled) doesn't snap the knee exactly to the PV control's location.  It gets close, but it sort of floats as you drag the PV_ctrl around the modelView.  I'd guess that most people will never use the snapToPV feature, so it's probably not that big of a deal.  But it still bugs me that it breaks like that.  And that's why I lock those channels.

The spine is a single IK spline to which the weight joints are bound, and which itself is manipulated by the spine controls (via parented clusters -- one for each interior cv on the spline curve).  To use it as an IK spine you have to enable the useRootSpace attribute on each of the spine controls, which basically puts them into rootCtrl space.

I'm just finishing up a huge update to the script, which should address both of your concerns.  The new version allows you to rotate knees, elbows, feet, and hands in the proxy.  When you skeletonize it, those rotations are saved in the skeleton, which is created in a standard T-pose.  You then rig your character in the T-pose, and when you're ready to bind your mesh, you can click "Recall Proxy Pose" in the Tools menu.  The rigged character assumes the proxy pose and you can attach your mesh (I need to find out when the ability to bind in non-creation poses was added to Maya -- I think it was version 8 or 9).

As for the other issue, useRootSpace (and the align attribute on the arms, legs and head, FWIW) are now floating point values that blend smoothly between one and zero (they used to be booleans --on or off).  I'll see about parenting the spine controls in FK mode to the COG_ctrl.  Maybe I can make that an option.  That should make it feel pretty close to what you're looking for.

January 20th, 2012 said:

Hey Droo,

I forgot to mention that the spineShaper is essentially a container for various rig settings.  It wasn't always, which is the reason for its incongruous name and position.

In the new version of the script it sits next to the root_ctrl and has been renamed "rigSettings_ctrl".

January 21st, 2012 said:


It's a really brilliant script :). I have some suggestions, dont know if some of it is possible already (hidden away somewhere?)

The possibility to create 0-4 legs / arms. If more than two isnt possible, then the ability to create 0-2, would be nice also. And really nice if you could add more afterwards.

Be able to create just arms or legs. Without the other setup. Maybe with a top group, which you can group under existing rigs? Eg if you want to make a strange blob with only arms. :) Or a biped without arms or legs. In general perhaps make the rigger, more modular?

Other limbs. Such as tails, wings, antennas etc.

Perhaps for another script? Have the ability to do mechanical rigging. Pistons, wheels, threads etc.

Hope you continue your awsome work!



February 6th, 2012 said:

I don't know what to say... this is just awesome. Thank you so much for this time-saver!

February 9th, 2012 said:

Hey Crumbly Great to hear about upcoming update. Thanks for answering my questions. I have been playing around with the rig for a while now, and tested them out with some simple walkcycles.

Anyways I noticed another problem with the rig, and Im not sure if it isnt just me. Its about the stretch attribute on IK legs and arms. When I do a walk-cycle, I usually get to the point where my legs start popping (in the point when they change from stretched to bent and vice-versa), and I usually fix it with the stretch attribute, so the change is less poppy. But in your rig when I use "Leg Stretch" attribute on the foot ctrl, the foot doesn't stay in place, where the IK handle is, but they stretch beyond the point, until I move the timeline or move the heel_ik_ctrl, when they snap back in place. Which in effect makes it hard to see how much they are stretched, because its not updated in real-time. Is it a normal behavior, or just happening to me?

Also about my spine problems. I tested it out a bit, so I have some more thoughts about it. When I set the "Use root space" to "on", it changes to IK, so some of the behavior is what I'm looking for, but the problem then is that they always stay in place, so when doing a walkcycle for example, I'd have to make sure that they all have the same translations. What I would be looking for is to make them stay with the main cog_ctrl (be parented to it for example), but don't affect each other when moving around. For translating the upper-body I would only use the cog ctrl, but would be able to have nice rotations on the hips, and counter-rotations on the shoulders, without having to counter-animate the shoulders, when the hips are rotated (which is what happens when its set to regular FK mode). For the same reason I always have the "align" attribute on arms and head to "on", so that I have more control on the curves, and I don't have to counter-animate any rotations. In the spine case, the only ctrl that I would expect to get affected by moving the upper-body, and hips ctrl, would be the middle one, which would always stay in-between them  (something like the spineShaper_ctrl right now), but could also be moved around further for finer tweaks. In this case the hips ctrl and spine low, could be just one control, or the spine_low could move with/be parented to the hips control. It just seems a bit over-complicated right now, with so many controls :)

Sorry for whining so much, just wanted to leave some thoughts I had on the rig. It's pretty great nevertheless, so keep up the awesome job and thanks for sharing this tool, you must have put so much work into. There is so much more things that I like about it, I only write about those that I have hard time adjusting to :)

Cheers, Droo

February 9th, 2012 said:

Small update: I've played around with the rig, removing some parent constraints and adding new and I think I got what I was looking for with the spine. I noticed that what "Use Root Space" attr was doing, was switching the parent constraint from the "space_switch_grp" of one part of spine to the root's. So what works best for me is parent-constraining the hiSpineCtrl_space_grp and hipCtrl_space_grp to cogCtrl (instead of root), the lowSpineCtrl_space_grp to the hipCtrl, and then for the midSpineCtrl, I parent-constrained it to both the hiSpineCtrl, and hipCtrl, so it always stays between them, but the additional control in it remains. That way the cogCtrl moves the whole upper-body, but each of the spineCtrls controls the spine individually as IK. I move the whole hips with lower-spine with the hipCtrl only, because the spineLowCtrl is parented to it, but still has additional rotations for fine-tuning. So in effect I use mostly the HiSpineCtrl and hipCtrl for animating the spine which makes things much simpler, but still have all the aditional control from these other controls in there. Works like a charm (at least for me, although I understand that everyone can have a different workflow :) ). I hope that makes sense. I could even send you the maya scene with the modified rig to show what I mean. I personally find it much easier to pose and cleaner in Graph Editor to animate (as opposed to fk spine where you have to counter-animate upper parts). Maybe its worth adding to the rig functionality for everyone :) Let me know if you're interested in looking into it at all, no pressure :) Cheers

February 16th, 2012 said:

Hey fantastic rig man been using for over a year now, massive time saver!! ....always use it when I need to rig a charater. Big Thanks!!!

I've recently been exporting to a game engine and I need to bake the animation on the rig and strip any thing out thats not needed. So essentially I'm looking to export the most basic joint hierachy.

So as your probably already aware I've ran into a few problems when trying to strip joints out. The biggest issue I'm having is with the fk & IK arms. I bake out the animation on the upArm joint and elbow joint so in thery I can delete the respective IK & FK arm joints. But when I delete either of them the arm shrinks down which screws things up. Is there any way I can delete these and still maintain the arm length?

Thanks for you time

February 16th, 2012 said:

Sorry I haven't gotten back to you guys sooner.  I've been sort of single mindedly updating the backend of this site in preparation for the new version of abAutoRig.

Tom:  More modular is a good idea, and the script started off that way.  So, it might not be too difficult to do some of what you suggest, especially rigging standalone arms and legs.  Adapting it to rig more than two arms per character would probably mostly be a a naming issue (and overlap).

You can currently rig arms and legs individually by disabling the rig mirror limbs option in the Options menu.  I've never tried it on a character with one leg, though.  I can't think of a reason why it wouldn't work (not that Maya needs one :) ).

Droo:  I'll have to check out the stretch for myself, because it shouldn't be working that way in full IK.

Your first post inspired me to parent the spine controls to the COG in FK mode, which I now realize makes more sense than switching them to rootSpace.  As for your modified rig, I'd love to check it out.  Definitely send a copy my way when you get the chance.

I'm not planning any updates to the current version of the script.  The new version will completely replace it.  And it's almost ready.  I just have to decide which features are premium-worthy, and then split it into two versions (premium and free).

February 16th, 2012 said:

Hey Wayne,

Have you tried removing the entire rig?  There's a built in Rig Remover, which you can find under the Tools menu in the script UI.

Let me know if that doesn't do what you're looking for.

February 17th, 2012 said:

Excellent, that seems to have done the trick!! Dont know why I didn't spot that sooner


March 4th, 2012 said:

Hey Everyone,

The new version of abAutoRig is finally available!  You can get it here.

March 18th, 2012 said:

Hello Crumbly, Awesome Rig! Though Im having a problem where both the lf_knee_line_loc and  rt_knee_line_loc stopped following the rig  after I've put animation on the rig. I move around the root control and they stay in one place. I curious what could be going wrong? Thanks!

March 20th, 2012 said:

Hi Anna,

I'm out of the country until the 30th of March with no access to Maya.  I haven't come across this issue before so I'm not sure what's going wrong, but I promise to investigate upon when I return (and my brain is up to it).

June 2nd, 2012 said:

Hey Crumbly,    I just started checking out your auto-rigger and love it, Thank You, huge time saver!!!

October 25th, 2012 said:

Hey Crumbly! I have a question on a problem that im facing with my corrective blendshape. I have corrective blendshape on my shoulder and driven key were set. the problem now is, whenever i rotate my Master Control, the shoulder joint will have rotation value (since it's parent contrained i suppose) and my corrective blendshape are activated.

Is there a solution for this?  Thank you =)

October 27th, 2012 said:

Hey KingJulien,

I'm going to assume that you're using the latest version of the script, abAutoRig II.  If not, let me know.  I just want to make sure because this page is for the original version of the script (which shouldn't have the issue that you're describing since it had a much simpler arm and leg setup).  You can find the page for the newer version here.

It sounds like you're using a weight joint to drive your blendshape.  If so, you'll want to switch the driver to the respective upArm_jnt instead (e.g. use "charName_rt_upArm_jnt" instead of "charName_rt_upArmWeight_jnt").  It should give you the correct rotation values regardless of how the Master Control is rotated.

April 20th, 2013 said:

hi crumbly, i wanna buy your script, but it doesn't work in maya 2014, when i want create the legs the script crash

April 21st, 2013 said:

Hey 3dtilo,

I just updated the latest version of the script (abAutoRig II) to fix this issue.  You can find the latest version here.

April 22nd, 2013 said:

thank you, im going to try it to purchase later

January 11th, 2015 said:

When i try to create the skeleton after setting up the proxy it only makes half the skeleton. The right side arm and leg are missing. Any trouble shooting tips? Im using autorig2 v3 Ibelieve

January 13th, 2015 said:

Hey Milo,

First thing I'd suggest is that you make sure you have the latest version of the script.  You can get it here, if you don't have it already.

If you still encounter the same issues after updating, feel free to send me a file with the proxy in it.  I'll be happy to take a look and see what I can find.

just say it


Related Posts