Character Rigging – Shoulders are the Pits
by Brian Immel
Indirect Rigid Binding
Better solution for bending the shoulder area with Rigid Skinned geometry is creating a custom Flexor. This technique involves a set of vertices being driven by a lattice and the lattice itself is driven by the skeleton and all the vertices outside the lattice driven by the skeleton. Using lattices to driven the motion of a set vertices is commonly called Indirect Binding.
Advantages of using Indirect Binding: Set Driven Blend shapes on Lattices
- Customize control over the area of geometry in question
- Create as many controls (blend shapes) as needed to handle the bending area.
Disadvantages of using Indirect Binding:
- Takes time to set up the SDKs.
- Lattice editing to deform the surface properly
can get messy.
The first thing we need to do is create Sets of vertices that envelope the shoulder area and another set to contain all the rest of the vertices not included in the shoulder area.
1. Hide the skeleton or turn off the selection type for joints.
2. RMB over the geometry and go to Vertex components mode.
3. Select the vertices you wish to include the shoulder area.
4. Go to Create > Sets > Set option box.
5. Name the set Shoulder and hit Apply button. Do not close the Create Set Options window just yet.
6. Holding down the shift key, drag a marquee around all the other vertices on the selected geometry. This will make an inverse selection of the shoulder vertices.
7. Back in the Create Set Options window, name this set Everything_else and hit Apply and Close button. We should now have two sets. To view the sets go to Window > Relationship Editors > Sets.
This opens the Relationship Editor to the Set Editing menus. On the left side window, you will find four sets, two of which is the sets we just created. To select a set, highlight a set and right-click hold and choose Select Set Members. Warning: Select Set Members adds to the selection you currently have selected (but not to the membership of that set). It acts like the Paint Select Tool; it just keeps adding to the selection. If you wish to just select one set at a time, make sure you have nothing selected prior to that set.
Lattices and Binding
1. Now that we have our set ready to go, we need to define the lattice that will indirectly bind the shoulder vertices. If you haven’t done so already, select the set that contains the shoulder vertices from the Relationship Editor.
2. Go to Deform > Lattice option box.
3. In the Lattice Options window, select 5 x 4 x 4 divisions for character in Figure 12.
The reason why I chose those divisions is because the shoulder vertices make five divisions along the X-axis, four divisions along the Y-axis and four divisions along the Z-axis. Hit the Create button. Name the lattice shoulder_lattice. You don’t have to use these lattice divisions but these values work best for this demonstration. If you use fewer divisions, Maya will average the weights of each vertice between each lattice point.
4. Duplicate the lattice and offset it on the Z so that its not overlapping shoulder_lattice. Name the duplicated lattice shoulder_lattice_blendshape.
5. Select shoulder_lattice_blendshape then shift select shoulder_lattice and go to Deform > Create Blend Shape > option box. Name the blend shape Shoulder_blend. In Maya, skinned surfaces are evaluated before blend shapes are. So, we must first set up a temporary or base blend shape before we skin the entire setup (vertices inside the lattice and those outside the lattice).
6. Select the lattice named shoulder_lattice.
7. Go back to Relationship Editors > Sets and select Everything_else set.
8. Shift-select the root joint.
9. Go to Skin > Bind Skin > Rigid Bind.
Editing Blend Shapes
1. After everything has been skinned, we now need to test the shoulder bends. Select the shoulder joint and rotate is around to see how the surface deformers. You may notice that some bends are quite bad and for this reason we are going to set up Set Driven Blend Shapes but before we do that, we need to make sure all the lattice points in shoulder_lattice has the proper membership to skeleton.
2. Select the shoulder joint and go to Deform > Edit Membership. Add/Subtract lattice points as needed until the geometry bends better when the shoulder joint bends. This step may not be needed but sometimes it is necessary so just be away before you start setting up SDK Blend Shapes for the lattices.
Set Driven Blend shapes
1. Now that we have the blend shape system set up, we can add and subtract blend shape objects (lattices in this case), as we need to allow for better deformations in the shoulder. Select the shoulder_lattice_blendshape lattice and duplicate as many times as we have bend directions. We should have six blend shapes to handle the bending of the shoulder (forward, backward, up, down, twist forward and twist backward). We do not need to make any extra blend shape lattices for in-between rotations before SDK setups evaluate between two or more SDK values.
2. Offset each lattice so that they do not sit on top of each other. Note: It is very important that we do not freeze transformations or delete histories on these lattices. That would cause the blend shape function to work improperly (remember blend shapes work on the difference between the parent and child point locations).
3. Name each lattice according to their bend direction (shoulder_lattice_forward, shoulder_lattice_backward, shoulder_lattice_up, shoulder_lattice_down, shoulder_lattice_twistF, and shoulder_lattice_twistB).
We don’t really need seven lattices (six axis plus shoulder_lattice_blendshape) so rename shoulder_lattice_blendshape to one of the mentions lattices above. For argument sake, rename shoulder_lattice_blendshape to shoulder_lattice_forward. You can make another lattice and use it to help deform the surface using the translations of the shrugging motions.
4. Select all the lattices except for shoulder_lattice.
5. Shift-select shoulder_lattice and go to Deform > Edit Blend Shapes > Add > option box. Check on Specify Node and select Shoulder_blend from the Blend Shape Node line.
6. Now lets set up a SDK for the shoulder joint to drive the blend shape lattice between lattices. Go to Animate > Set Driven Key > Set > option box. If you like, you can open up the file Indirect_Binding03.mb if you missed something or just want to skip all the grunt work
7. Select curve named Shoulder_Control_L (big S near the shoulder) and hit Load Driver in the Set Driven Key window.
8. Select Shoulder_blend under the INPUTS in the Channel Box of shoulder_lattice. Hit Load Driven in the Set Driven Key window. Now we have all the major players loaded and we’re ready to start creating some SDKs to better blend each blend shape lattice. Don’t worry about the blend shapes of the lattices just yet. It is easier to work on one task at a time (SDK then blend shapes) than to try to do everything at once (set a SDK value, edit the blend shape and test, reset, etc.).
9. Select Shoulder UD in the driver window, select shoulder_lattice_up in the driven window and hit Key in the Set Driven Key window. Before keying, make sure Shoulder UD’s value is 0 and the shoulder_lattice_up value is 0 as well.
10. Select Shoulder UD in the driver window, set the value to 10, select the shoulder_lattice_up in the driven window, change the value to 1 and hit Key in the Set Driven Key window.
11. Reset Shoulder UD’s value to 0. Select shoulder_lattice_down in the driven window and hit Key in the Set Driven Key window.
12. Make Shoulder UD’s value –10. Select shoulder_lattice_down in the driven window and give it a value of 1. Hit Key in the Set Driven Key window.
13. Repeat steps 9-12 for the following combinations:
- Shoulder FB 0 = shoulder_lattice_forward 0 and shoulder_lattice_backward 0.
- Shoulder FB 10 = shoulder_lattice_forward 1
- Shoulder FB –10 = shoulder_lattice_backward 1
- Shoulder TW 0 = shoulder_lattice_twistF 0 and shoulder_lattice_twistB 0.
- Shoulder TW 10 = shoulder_lattice_twistF 1.
- Shoulder TW -10 = shoulder_lattice_twistB 1.
If this process hasn’t been long enough, next comes the funstrating (fun + frustrating) part: rotate the shoulder joint to its extreme and begin editing lattice points to help the surface geometry keep its volume during rotations. Each lattice will have a unique set of shape (lattice point locations). See Figure 19 for examples of the blend shape lattices shape for handling the up and down motions of the shoulder. Warning: these lattices make get ugly looking by the time you’re done but they will do the job. Here are some points to keep in mind when editing lattices when the master blend shape lattice has been driven:
- Be aware of the orientation of the master lattice. Some clusters of lattice points will rotate and change their orientation axis as you bend the shoulder. Editing the blend shaped lattice will not cause normal deformations, as one would expect.
- Move rows/columns of lattice points at a time then go back and refine individual lattice points as needed. Always work from rough detail to specific details.
- Although the ultimate goal is to keep the volume/mass of the shoulder constant throughout the bend, we must also look for geometry folding in on itself.
<< back to Skinning Methods Menu










