rigging- IK arm rig and SDK hand rig

We built 2 arm rigs, IK and FK. The IK rig is for when we need the hand to stay still or hold something, in an IK arm rig the hand moves the arm or holds the hand still while the body moves. The FK rig swings the arm from the shoulder and elbow  joints. Here I describe building an IK rig.

build the arm

  • Create arm joints opposite and matching to left side.
  • Create control curves, one for the Pole Vector, and an arm control
  • Centre the pivot of the arm control at the wrist joint, and the PV behind the elbow
  • freeze the 2 controls.

The controller controls arm with an IK RP.

control the direction of the elbow

This is of course done so that the elbow will bend in the preferred direction every time.

  • Set the preferred angle of the elbow
  • Select RP solver in IK handle options and click shoulder then wrist joints.
  • pole vector constrain the IK handle to the PV control

arm IK PV3b

set up the wrist rotation

  • Point constrain the IK handle to the arm control
  • orient constrain the wrist joint to the arm control

armIK doneb

Doing it this way leaves the hand free to be animated apart from the arm.


Set Driven Key Rig

I did this by mistake and have left it as an extra part of rigging an arm for assessment.

Placing Joints

Making a 2nd hand the same as the first is difficult because it is complex and has to be exactly the same but opposite.  Using mirrored joints won’t work because the joint orientation will be wrong and un-fixable. It is important that joint orientation  is correct. If orientation is different from the rest of the skeleton rotations will be different and wrong.

  • Mirror the 1st arm joints (I only raised it up in the picture for the picture, leave it in place)
  • colour them by putting them in a layer and choosing a colour for it so it is easy to differentiate them, here it’s red.
  • Make new joints similar to the other side and name them
  • V snap them into the same place as the mirrored arm. (un-parent hand main joint and delete arm)
  • Another way to make the hand joints is import the bind skeleton and copy the hand and hide the rest of the skeleton so you can unhide it to check placement at any time.

mirrored arm2arm jt orientations2

  • Check that the joints are in the correct position by importing the bind skeleton and checking
  • Duplicate the hand control curve from the other side or make it from scratch in the same manner as foot curve.
  • snap it to the hand palm joint so it is out of the way of the other arm controls.
  • reverse its X scale
  • freeze and delete history

hand control in place2

Orienting Joints

There are 3 different kinds of orientations needed in the hand. The normal joint orientation with X axis going towards the child joint is the first. World orientation is required for core joints, that have more than 1 joint coming from them, because it cannot point to all the children, cannot choose, would be wrong for at least 1 of them if it could and so it will have to be in line with the rest of the skeleton. The other kind of orientation in the hand is ‘custom orientation’ where we alter the orientation by hand, this is described a bit later.

  • Orient all the joints except the core joints with the options reset of orient joint. To do this un-parent these joint chains in the fingers then orient.

reset Orient Joint Options2

  • In orient joint options tick orient joint to world and un-tick orient children of selected joints. Make sure the base joints are un-parented and parenting nothing and orient.

world Orient Joint Options2

  • the thumb bridge joint and pinky finger bridge joint have custom orientations applied to them.

This where I realised (too late) that we don’t need to do the hand for the assessment and it had taken me a whole day…… I may as well finish it because I have to do it anyway on the right hand..

custom orienting

Custom orientation is needed at the bridge joints of the thumb and pinky finger so that they can drop down and rotate under the hand in 1 smooth rotation to enable the bringing together of the tips of these digits, this is a specialised movement of the hand. Without the custom orientation it takes many different individual rotations to get there and is bad for animating. Un-parenting joints is often required before orienting joints will work properly.

  • to custom orient select the joint
  • component mode and select the question mark to the right

custom orientingA

  • select the rotation tool
  • rotation tool options- reset tool, tick discrete rotate and choose the step size, 10 degrees is a good one
  • make sure you select the jont axis to rotate not the joint
  • rotate the joint axes as you want and write it down so you can put in the same amounts on the other hand.

custom orienting2A

setting up set driven keys

This is to have any movements which you may want easily available to animate with, in this case for the hand eg relax, spread and individual finger curls etc. You set keys at 0 for the starting position and say 10 and at 10 you rotate all the joints for the hand to be in the position you want and key it so that when you middle mouse button drag for the attribute the hand moves into position without having to move each joint and rotation individually.

  • select  hand control
  • highlight all the translate, rotate and scale attributes and ‘lock selected‘ (because you don’t want to add these to the control and it keeps them out of the set driven key window)
  • add attributes (as for the foot rig) for all the hand movements you want for the control eg fist, relaxed, scratch, spread, index curl, middle curl, ring curl, pinky curl, thumb curl, thumb roll.
  • in the animation menu set select animate, set driven key, set
  • select the hand control
  • click load driver
  • select all the joints of the hand needed to animate and select load driven
  • select all the joints in the driven window then rotate X, Y and Z on the right
  • select a movement in the driver right window eg index curl
  • make sure all are set at 0
  • click key
  • again select the control curve
  • put in say 10 for index curl
  • select all the chosen finger joints and in the channel box put a value say -80 in rotate Z
  • make sure the correct movement, finger joints and rotation axis are all chosen in the SDK window
  • hit key
  • repeat for all movements

set driven keysA

Blended Spine Rig- FK

We made 3 spine rigs in class. This is the first one with 7 joints. Later we did it again to have even more joints, 11, that were evenly spaced. This is  because more joints make a more even curve on bending with less creasing, 11 joints is easy to divide up for the blended spine, (you need an even number between the controls, 4 between each in the case of 11 joints) and evenly spaced joints because the IK rig needs this to work better. All 3 spines must have exactly the same number of joints in exactly the same space with the same orientations so that it all matches…..

Build the spine straight not like a human S-shaped spine. The human skeleton works differently and we don’t want it to be as complicated, we want to emulate not copy. When we have joints in a straight line they are less likely to shift when IKs are added.

Blended Constraints-  We need to think about 2 things-

  1. is this enough for a good bind
  2. what do we need to rig it.

5 – 15  joints is good for a spine. Here we have 7.

  • Starting at the bottom we are using the 3 wishbone shaped back controls 1, 2 & 3.
  • Back control 1 is at spine 1,
  • Back control 2 is at spine 4,
  • Back control 3 is at chest jt.
Controls lined up with spine joints 1, 4 and chest joint

Controls lined up with spine joints 1, 4 and chest joint

Spine Rig Start- 7 spine joints and  3 wishbone shaped back controllers 1, 2 & 3

Spine Rig Start- 7 spine joints and 3 wishbone shaped back controls 1, 2 & 3

To aid learning we put smaller controls on the in between joints so we could clearly see how each joint was bending, they are shown in the pictures. Also we constrained the small controls to the big ones. I have described constraining joints in this tutorial because in the later version we deleted the small controls and constrained the joints themselves.  This uses less levels of constraints and thus is less likely to break.

  • Freeze transformations on the controls and delete history.
new controls in place and named

new controls in place and named

Blend Constraints

We want the controls to follow the joints so we point constrain them to the joints. Then we want the joints to follow the the orientation of the curves so orient constrain them to the curves. After that the joints should have the blue rotates in the attribute editor to show these are constrained and same with the control translates. The in between joints are given a weight which tells them how much to follow each control which is above and below them.  This works in the spine to make the whole spine bend together evenly.

  • Point constrain back control 1 to spine joint 1.
  • Do the same for every joint and control.
  • Orient constrain the joint to the control with options set to maintain offset.
  • G repeat up the spine.
  • Select back control 1 and the joint above, at seg 1a, and orient constrain.
  • Repeat with Back control 1 and the joint above that at seg1b . Now both seg 1 and 2 follow back control 1
  • To set up the blend select back Control 2 and orient constrain the 2 joints below to it 1 by 1.
  • Check in the channel box under shapes to see Back Control 1 W0 and  to see Back Control 2 W1 the 2 back controls controlling this segment.


Before changing the amounts in these windows each back control influences the joint 50% of the total. To make each control influence a different percentage set up different weights in the windows so that both add up to 1

  • put the back control 1 at 0.7, it now influences it 70% and the other at 0.3 or 30%. Now we have a weighted blend with the bottom back control influencing  seg 1a 70% and the 1 above it 30%.
  • Do the same for the  seg 1b above with opposite numbers because it is closer to back control 2.


  • Repeat for the rest of the spine
all done

all done

Inverse Kinematic and Reverse Foot Setup Tutorial

I am making a reverse foot setup to have a separate control for lots of different foot movements with a broken hierarchy to achieve it.

Doing IKs...

The first set of joints are the IK leg setup for binding. These will need to have standard orientation to match the other joint systems and stay consistent with the rest of the rig.

  • Based on the original joint placements create the hip, knee, ankle, ball and toe joints
  • reorient the joints
  • bend the knee and set preferred angle and reset to 0

 Set up the leg IKs. RpSolver is used because extra rotation controls and a pole vector for the knee are needed. RP solver allows for twist and rotation in different ways.

  • Select ‘IK Handle tool’
  • select ‘ikRPsolver’ in ‘current solver’ in the option box
  • then select the hip then ankle joints.
ikRPsolver2-choosing ikRPsolver

SC solver is used when only ordinary rotation is needed, no extra twist or rotations, and when going between just 2 joints.

  • Select ‘IK Handle tool’
  • choose’ ikSCsolver’ in ‘current solver’ in the option box
  • select the ankle then ball joints.
  • Repeat with the ball then toe end joints.
  • Name all the ikHandles eg: r_ankle_IK_Handle; r_ball_IK_Handle; r_toe_IK_Handle
choosing ikSCsolver

choosing ikSCsolver

foot iks

  • Test by lifting the foot to see if all bends the right way.

testing ik handles2

Building reverse joints… this is done so that there will be extra pivot points and sticking points for the foot with a separate hierarchy for them. Rotations and twists can be controlled for just the foot joints with the ankle being the base of the movement then heel then ball and toe like a real foot.

To build the new joints- locators are made at the exact location of the original joints, adding one for a heel joint, so that the new joints can be snapped to them. Because higher joints in the hierarchy will move all the joints below the new joints are V snapped to the locators by starting at the top of the hierarchy . The reverse joints are built with the orient set to world space so that their movements are based on their place in the world because that is where they move eg in relation to the floor. These steps are described below.

  • Create locators and v snap them to the ankle, ball and toe end joints
  • create another and v snap it to the back tip of the foot on the model at the height of the other joints.
  • Create joints starting at the ankle joint then go to the heel then toe then ball then ankle again.
  • Name them eg: r_inv_Main_joint; r_inv_Heel_joint; r_inv_Toe_joint; r_inv_Ball_joint, and r_inv_Ankle_joint_End.
  • Put them in a layer and name it inv_Joint_layer.
  • Check their orientation and set to world if not already.
reverse joint settings orientation

reverse joint settings orientation

the reverse joints in white flow in the opposite direction from the original skeleton in pink but sit in the same place, orientation is set to world

the reverse joints shown in green flow in the opposite direction from the original skeleton in brown but sit in the same place

  • Parent each IK handle to the its matching joint in the inverse system.
ik handles under joints of the same name in outliner

ik handles under joints of the same name in outliner

To control all the foot joints a foot control is made and pivoted at the ankle joint so that the movements of the curve will move the foot centred at the ankle joint, where it would in a real foot.

  • create a foot control using nurbs curve with the EP curve tool with the options set to linear so it will have straight angles if that’s what you want.
  • V snap the curve to the foot and centre its pivot at the ankle joint.
  • Freeze the values
  • rename it r_foot_control

rt leg curve2

foot control placed and centered

foot control placed and centered

  • Select the foot control then the inverse main joint and parent control.

Adding attributes so that new movements can be added to the control. Only 1 is needed for the ball joint because the ball joint only rotates in 1 direction. Add the most used ones first so that they are on top. Then they will be in the channel box for the foot control.

  • Select the foot control
  • at the top of the channel box click ‘edit’
  • click ‘add attribute’.
  • In the ‘add attribute’ box type in the new names for the movements of the foot wanted in the order wanted eg Heel Rot X
  • click ‘add’ at the bottom
  • repeat for each one .
  • For the ball joint just add the 1 to lift the toe.

rt leg adding attributes2

Connection editor connects the new attributes of the control to the selected movements of the inverse joints.

  • load the control on the left by clicking ‘reload left’
  • select the joint you are doing in the outliner, ‘reload right’
  • Scroll down on the left side to the bottom to the control attributes just entered
  • on the right side scroll down to about halfway and find rotate and click the + sign to expand it.
  • Click heel rot x on the left (when heel is on the right side) and the rotate x on the right side to connect them.
  • Repeat for heel rot y and rotate y, and heel rot z and rotate z
  • repeat process for each reverse joint.
connection editor- making the connections from the control to the heel inverse joint rotations

connection editor- making the connections from the control to the heel inverse joint rotations

Edit attribute- You can change the names of the attributes to be more descriptive so it is easier to understand for the animator.

  • click edit in the channel box window
  • click ‘edit attribute’
  • select the attributes of the control 1 by 1
  • Click the names 1 by 1 and write the new name in the place called ‘nice name’. eg change Heel Rot X to heel liftHeel Rot Y to heel twistHeel Rot Z to heel roll.
editing attributes to change the name to something more recogniseable for the animator

editing attributes to change the name to something more recognisable for the animator

  • Test the foot control attributes to check that it moves correctly

testing foot control2

foot controls zeroed2