Tutorial 03

 Salty The Seal.

Note: A lots of others type of setup can be made on that character rig, based on production and animator requirement. For this in-class tutorials we will stay really simple  with really minimum control. Up to you to add extra as you wish.

  download material files

Step 01                  Prepared your model for rigging
  • Group all Geometry under one empty group call mesh.
  • Names others element of your scene.
  • Unlock all TRSV if needed.
  • Rotate the mesh group to make your character fqace the +Z axis
  • Freeze Transformation and Delete History “Pay Attention”
  • Create a new Display Layers named “geometry” and add a multy selection of all geometry into the scene into it.
  • Mark this new layer as template.
Step 02                     Create a master structure to parent everything:
  • From the top view using the EP Curve tools draw a linear arrow call “master”.
  • Freeze Transformation and Delete History
  • Create 4 empty group and call them (“skeleton”, “ctrl”, “pose”and “characterName” )
  • Parent “skeleton” and “ctrl” under “pose”
  • Parent “pose” under “master”
  • Parent “mesh” and “master” under “characterName”
  • Lock and Hide all attributes of “characterName” in this case it will be call “salty”
Step 03                  Draw the joint for the full body. Set the LRA and joint mirroring:
For this example a total of 8 joint will be use for the Spine and 3 joint for the head. You can add more joint to the Spine but the result will be more or less similar.
Now draw the joint for the spline and name them correctly.Spine  and Neck joint:

  • spine01_jnt
  • spine02_jnt
  • spine03_jnt
  • spine04_jnt
  • spine05_jnt
  • spine06_jnt
  • spine07_jnt
  • spineEnd_jnt
  • neck_jnt
  • head_jnt
  • nose_jnt

2. Front and back Leg:
Front Leg

  • lf_frontLeg_jnt
  • lf_frontLeg_jnt1
  • lf_frontLeg_jnt2
  • lf_frontLeg_jnt3
  • lf_frontLeg_jnt4

  • lf_backLeg_jnt
  • lf_backLeg_jnt1
  • lf_backLeg_jnt2
  • lf_backLeg_jnt3
  • lf_backLeg_jnt4

Set the Local Rotation Axis:

  • X             =              Primary Axis or Aim Axis
  • Y             =              Secondary Axis or Up Axis
  • Mirroring the  joint: Choose proper setting for your model and mirror your joint to the right side.
  • Parent both front Leg to spine05_jnt
    “NOTES: It depend on your joint placement, parent to the nearest joint”
  • Parent both back Leg to spine01_jnt

Step 04                  Spline and Head Setup:
You can Hide others joint to help to focus on the Spine creation.

  1. Create an Ik Spline Handle between “spline01_jnt” and “spineEnd_jnt”
  2. Rename “ikHandle1” and “curve1”
    • spine_ik
    • spine_ik_crv 
  • Create an Ik Spline Handle between “neck_jnt” and “nose_jnt”
  • Rename “ikHandle1” and “curve1”.
    • head_ik
    • head_ik_crv
  • Create 2 extra joint (Change the radius to do not mistaken them with previous joint)
  • Select the 2 “_jntCtrl” and the “spline_ik_crv”. Create a Bind Skin to deform the “spline_ik_crv” with this new joints.
7. Create 4 Icon will be needed to complete the spine setup. Re-position the Center pivot of this ctrl.

Name of ctrl                        Position for pivot

  • cog_ctrl                                  spine01_jnt          
  • hip_ctrl                                  spine05_jnt                          
  • upperTorso_ctrl                   spine05_jnt                          
  • head_ctrl                               neck_jnt         
8. For (“head_ctrl”,  “upperTorso_ctrl”, “hip_ctrl”). Create a perfect alignment  using the zeroOut technique.This we ensure us with the best possible rotation of the controller controlling the body.
9. Parent The ctrl zeroOut as explain below.
  • Parent                                       To   
  • upperTorso_jntCtrl                       upperTorso_ctrl  
  • hip_jntCtrl
  • hip_ctrl_zeroOut
  • head_ctrl_zeroOut                       upperTorso_ctrl
  • upperTorso_ctrl_zeroOut
10. Finalyse the spline and neck setup
  • Select head_ik_crv. Then select all “Vertex ” and create a a none-relative cluster.
  • Rename this cluster head_cluster and parent it to the head_ctrl.
  • Select spine_ik_crv, spine_ik, head_ik_crv, head_ik. Group them together and rename              this new group doNotTouch.
  • Parent cog_ctrl to ctrl.
  • Parent spine01_jnt to skeleton.
  • Parent doNotTouch to characterName … in this case salty.
  • Lock and hide attributes that can destroy your setup.
  • Hide visibility for Ik (or you can hide visibility for doNotTouch group).
  • Hide visibility for head_cluster.
11. Using the Advanced Twist Controls. Select the spine_ik. Enabled the settings as showned below. This setup should work for you if you used the LRA x and y as primary and secondary axis.
Maya 2017/2018











Maya 2016

 12. By selecting the head_ik, create a new expression call neck_expr and enter the detail as below.


Step 04                  Front Leg creation:
1. From joint lf_frontLeg_jnt to lf_frontLeg_jnt2, create an ik (RP solver) and name it lf_arm_ik.

2. From joint lf_frontLeg_jnt2 to lf_frontLeg_jnt4 create an ik (SC solver) and name it lf_hand_ik.

3. Create an icon call lf_arm_ctrl

  • PointConstrain  lf_arm_ik  to lf_arm_ctrl.
  • Group the lf_arm_ctrl to became lf_arm_ctrl_grp. 
  • parent lf_arm_ik  to the lf_arm_ctrl_grp
  • Parent lf_hand_ik to lf_arm_ctrl.
  • Create a new attribute call elbow on lf_arm_ctrl.
  • Use the node editor connect the 
    lf_arm_ik.twist     =      lf_arm_ctrl.elbow  
  • Hide visibility of the ik and lock the attributes.
  • Parent lf_arm_ctrl under ctrl.
Step 05                  Back Leg creation:
Many different type of rig may have been apply to the backleg of the seal (Base on production requirement  and animator requirement). But for the goal of this in-class tutorial “3 hour”, we will make a easy setup for them)

  1. From joint lf_backLeg_jnt to lf_backLeg_jnt2, create an ik (RP solver) and name it lf_leg_ik.
  2. From joint rt_backLeg_jnt to rt_backLeg_jnt2 create an ik (RP solver) and name it rt_leg_ik.
  3. Create an icon call tail_ctrl … Attention to the pivot of the controller…?
    • Create the Zero Out for the tail_ctrl
    • Parent tail_ctrl_zeroOut to hip_ctrl.
    • Parent lf_leg_ik to  rt_leg_ik” to tail_ctrl.
Step 06                         Bind Skin:
Apply a Bind Skin to the selected geometry.  Special setup will be added on the eye and eyelid.

  1. Select “left_rear_flipper”, “left_front_flipper”, “right_rear_flipper”, “right_front_flipper”, “body”, “whisker”, “nose”
  2. Select spine01_jnt
  3. Add the Bind Skin.

  • From the side view. Replace the pivot for hip_ctrl and upperTorso_ctrl to match the global z an y position of the front leg.
Step 07  Facial setup Eye control ( Look-at )
1. Prepare the eye geometry to be rig:

  • Select lf_eyeball and lf_eyeLid and group them together.
  • Replace the center pivot for the new group
  • Rename this one lf_eye Grp.
  • Do the same for the other eye.
  • Group them together to create a new group call eye_geo_grp.

2. Make the eye geometry follow our rig:

  • ParentConstrain “eye_geo_grp” to “head_jnt”
  • ScaleConstrain “eye_geo_grqp” to “head_jnt”

3. Create 3 specific icon to control the eye direction:

  • eye_ctrl
  • lf_eye_ctrl
  • rt_eye_ctrl
  • Parent them together and create a new group call eye_ctrl_grp.
  • Use Center Pivot for this new _grp.
  • aimConstrain lf_eye_grp, rt_eye_grp to they’re respective eye controller.
  • parentConstrain eye_ctrl_grp to the head_ctrl.
  • Finally parent eye_ctrl_grp to the ctrl node .




4. Eye Emotion: For the eye expression we will create connection between the lattice deformer and Set Driven Key to create some facial attributes. Feel free to create your own

  • Create a lattice on each eye side eye_grp
    • S = 3, T = 5, U = 3      ffd1: S =5, T = 5, U = 5
  • Rename the lattice and the base as this
  • lf_eye_Lattice
  • lf_eye_Lattice Base
  • Scale up the Lattice and the Base  to
    • X = 1.5, Y = 1.5, Z= 1.5        (approx)
  • ParentConstrain the Lattice and the Base to the  head_jnt.
  • Parent both the Lattice and base to the doNotTouch node.
5. Select both eye ctrl and add attributes to them:

Attributes name Min value Max value Default value Type
happy 0 1 0 float
worry 0 1 0 float
sns -1 1 0 float
gScale -1 1 0 float
upperLid -1 1 0 float
lowerLid -1 1 0 float


6. Use the Set Driven Key and Lattice point to create shape to match the new attributes.


Shape the lattices point as you wish to shape a worried shape.

Shape the lattices point as you wish to shape a worried shape.

Shape the lattices point as you wish to shape a worried shape.

Continue as long as you wish. The important will be to create basic expression and emotion. Base on your production requirement. A mix of shape can also be animated to extrapolate some new shape.
Step 08                  The final wrap up. Restrain the access to unnecessary attributes and object.
A good trick when about to publish a character will be to (shift LMB on the + sign in the outliner.) That will expand all the children and it will be easy for you to hide and lock undesired item. But below a list of thing to do.

  • Lock and set the Ik Visibility to 0
  • Create layer for rig ctrl and add all “master” object to it
  • Lock and hide “foot, arm and spine ctrl” scaling and visibility
  • Lock and Hide every attributes on “characterName”
  • Disable visibility and lock and hide them with the scaling attribute of all ctrl
Step 09                  This Rig is now ready for animation….????
Remember TE$ST, TE$ST, TE$ST your rig before you bring it to a production.As we may work in a small studios or medium studio. The usage of references model are really appreciated during a production. The usage of reference “model” with a string name as attributes…..
Step 10                  Stretch spine                                                        OPTIONNAL
  • Select spine_ik_crv.
  • In a mel command Line wrote.

  • Create a multiplyDivide node and rename it divideByHimself. Set the node action to divide.
  • Connect curveInfo1.arcLength to dividebyHimself.input1X.
  • Copy the value from dividebyHimself.input1X to dividebyHimself.input2X.
  • Create a multiplyDivide node and rename it divideBy1. Set the node action to divide.
  • Connect dividebyHimself.outputX to multiplyDivide2.input1X.
  • Now simply connect multiplyDivide2.outputX to all “spine**_jnt.scaleX”


But in this case I’ll exclude the spine01_jnt and spineEnd_jnt as they will deform my character rig head and feet in a undesired manner.

Congratulation you pass through Salty the Seal. In this tutorials we have incorporate a more advance stretch spine setup. Keep a creative approach to it and have fun learning.

That’s all Folk’s