This time, we will set up the shoulders and the arms. In reality, the bones of the shoulder and the arm consist of the scapula, clavicle, humerus, radius and ulna. We could get away with just creating a single joint to act as the clavicle and scapula combined, another joint as the humerus and a final joint as the radius and ulna combined. For this tutorial, we are going to take things a little further by creating a clavicle and a scapula joint and then the humerus and a radius/ulna joint. I prefer to do this as it just adds an extra level of deformation to the shoulder region and makes it feel as if there is an underlying structure beneath the hollow mesh.
We will drive the scapula and the clavicle through an expression so, as the shoulder region or arm rotates, they will follow automatically. But, as some animators prefer full control over a rig, we will make sure we can disable this feature. We also need to capture the natural fall-off that occurs as we twist the forearm, going from the prone to supine position. To do this, we will add extra twist joints that are driven through an expression. This is just one of many ways to create such a result so do try out other methods such as using Multiply Divide nodes.
Lastly, we will want to add the ability to switch between FK and IK mode. To do this we will create three sets of arm joints: an FK set, an IK set and a bind set. We will then use constraints and Set Driven Keys to define which set of joints (FK or IK) will drive the bind set. A control will also be created to allow the animator to pick and choose which mode he/she would like to animate in.
So, without further ado, let the rigging commence…
Maya rigging – the shoulder and the arms
Creating the joints
Let's start with the clavicle. In the Front view, go Skeleton > Joint Tool and draw a 2-joint chain starting somewhere close to the mid-line of the character and ending close to the shoulder. Now fix the orientation by going Skeleton > Orient Joint Tool (Options). Set the Primary Axis to Y, the Secondary Axis to X and the Secondary Axis World Orientation to X. Hit Apply and rotate the joints to check if positive X rotation creates flexion. Next, position the joint correctly by translating the root joint; I popped the joint in a similar position to where you would find the clavicle on a real human being and then used the Joint Orient to rotate the joint back. Remember, do not use the rotate channels to get the joint into position. Once in place, rename the joints: l_clavicle_jnt and l_clavicleEnd_jnt.
Creating the clavicle joints using the Orient Joint Tool
Next we'll add the shoulder joint and the arm joints. In the Front view, use the Joint Tool to create a new chain of joints. Create the first joint at around the same position as l_clavicle_jnt, then another joint around the armpit, a third joint at the elbow and a final joint at the wrist. Fix the orientation of the joints by using the Orient Joint Tool. You can use the same settings as we did for the clavicle but set the Secondary Axis World Orientation to – (negative).Then translate the root joint into place and use the Joint Orient to again, orient the joints to sit into the arm geometry. You can also use the length of the joint (translate Y in our case) if needed. Once you are happy with the placement of the joints, select them one-by-one and check that there are no values on the rotate channels or the translate X or Z channel. For the root joint, it is okay to have values in all the translate channels. Now go through and rename the joints from root to tip: l_shoulder_jnt, l_upperArm_jnt, l_lowerArm_jnt and l_armEnd_jnt.
The shoulder joint and the arm joints created in the Front view
Lastly, we'll add the scapula joint. To create this joint, go Skeleton > Joint Tool, pop into the Perspective view, activate Point Snapping (or hold down the V key) and snap to 2 points on the model around the area where the scapula would sit. Now use the Orient Joint Tool with the following settings: Primary Axis is set to Y, Secondary Axis is set to Z and Secondary Axis World Orientation is set to X (+). Rename the joints l_scapula_jnt and l_scapulaEnd_jnt. Select both l_scapula_jnt and l_clavicle_jnt and parent both joints under l_shoulder_jnt.
The scapula in place by point snapping the joints to the geometry