Adding Controllers to a Rig
Creating and Placing Controllers
Create the controller (a circle for instance: Create → Curves → Circle) exactly at the origin. Holding down x will activate snap to grid. The transformation and rotation should both be [0,0,0].
You can use parenting to exactly place controllers at the joint they need to control, with the same orientation as that joint:
- Name the new object "CTRL_Something". Select it and shift select the joint it needs to control
- Parent the controller to the joint, making sure you un-check the option Preserve Position (Edit → Parent → Option Box) This will move and rotate the controller into place.
- Un-parent the controller, making sure Preserve Position is checked (Edit → Unparent → Option Box)
If the orientation is not deemed important, you can simply snap the controller to the joint by holding down "v" (snap to point) - you may need to hide your geometry so it does not snap to its vertices.
Shaping Contollers
The controller has been placed and rotated properly, but may be inside your mesh and therefore hard to grab / select. To move the shape to a different spot you can use this trick:
- Select the curve, and set the selection to Control Vertex (using the RMB pop up menu)
- Select the control points. It is extremely annoying that, when trying to select points, Maya insists on selecting joints. If you have your joints in a separate display layer, you can turn their visibility off there, or you can un-check Joints from the Show menu at the top of the view panel.
- Move, rotate and scale the control vertices to wherever you want them to go. This will not move pivot point of the control object.
Making Controllers Stick
Now that we have the controller in the right spot, we need to make sure it sticks to the skeleton. We are going to use a contraint for that. We could simple constrain the controller itself, but Maya will then refuse to animate the constrained channels. So we need to create a group containing the controller.
- Select the Controller and place it in a group by itself (Edit → Group or CTRL-G)
- For neatness, select the group, hit insert and snap the pivot of the group (by default located at the origin) to the joint to be controlled.
- Select the joint that is the parent of the joint we want the controller to control
- In the outliner, control select the group containing the controller
- Parent constrain the controller's group to the selected joint (Animation → Constraints → Parent → Option Box) making sure the option "Maintain Offset" is checked.
Making the Contoller Control a Joint Rotation.
Now that the controller is places and sticks to the skeleton, we need it to actually control something. If we want the controller to control the rotation of a joint follow the followin steps.
- Select the controller and shift select the joint you want it to control
- Create an orient constraint: Animation → Constraints → Orient. Since we made sure the controller has the exact same rotation as the joint it is to control, the "Maintain Offset" option should be irrelevant
Controlling IK
The setup for IK controls is slightly different. We still want to parent constrain the group the controller is in to the rig, but what it should stick to is not as straight forward. It could just be the master controller (as with feet or hand controls) or the center (COG) joint (one of the other options for hand controllers)
- Select the controller and shift select the IK handle you want it to control
- Create an point constraint: Animation → Constraints → Point. A Parent constraint will also work.
Double Controls
It is not uncommon for a hand IK controller to also control the orientation of the hand bone. This can be achieved by following both steps listed above: point contraining the IK handle to the controller AND orient constraining the hand joint to the controller
Cleanup
Once you have the controller all set up, lock and hide the channels you will not be using (translation and scale when controlling joint orientations for instance)