Using SDKs to drive the blend shapes
We now want to add our extra corrective blend shapes to our existing blend shape node. Select the two corrective shapes and then the male_geo mesh and this time, go Edit Deformers > Blend Shape > Add (Options). Turn on Specify node and make sure the Existing nodes are set to 'correctives'. Hit Apply and Close and you should find that the 2 new blend shapes have been added to the 'correctives' node.
We are now going to drive the blend shapes using Set Driven Keys. For the majority of the time, I'll be driving the blend shapes using the rotation of the joints, but every now and then, I'll drive them using a control. I try to have joints drive blend shapes as sometimes you may have multiple controls driving the joints. For example, the FK arm controls and the IK arm controls both drive the arm joints. Therefore, you would need both sets of controls to drive the blend shape when required. By having the blend shape driven by the joint, we know that we do not need to worry about which control triggers the corrective fix.
Select male_geo and select the 'correctives' node from the INPUTS stack in the Channel Box and go Animate > Set Driven Key > Set. This should load the 'correctives' node into the Driven portion of the SDK window. Now select l_palm_jnt and hit the Load Driver button on the SDK window. Make sure all the rotation attributes for every control is back at 0 and the blend shapes are also at 0. Now, in the top-right box of the SDK window, highlight Rotate Z; in the bottom-left window, highlight correctives and in the bottom-right window, highlight both l_wrist_rZ_m70 and l_wrist_rZ_p100. With everything highlighted, hit Key on the SDK window to set the default pose. Now rotate l_palm_ctrl (this drives the joint) and set the Rotate Z attribute to -70. On the 'correctives' node, set l_wrist_rZ_m70 to 1. Un-highlight l_wrist_rZ_p100 from the bottom-right window of the SDK tool (leave everything else as it is) and hit Key. Now set the Rotate Z attribute to 100 on the l_palm_ctrl and on the 'correctives' node, set l_wrist_rZ_p100 to 1. Back in the SDK window, this time highlight l_wrist_rZ_p100 and un-highlight l_wrist_rZ_m70. Once again, hit Key on the SDK window.
Using l_palm_ctrl, rotate the palm on the Z-axis to test if the shapes are being triggered. You may notice that there is some ease out and ease in as it goes into the corrective poses. This is due to our default animation preferences being set to Auto or Spline. To fix this, select the 'correctives' node and go Windows > Animation Editors > Graph Editor. Here you will find the animation curves for the Set Driven Keys we have just created for the wrist. You can edit the animation curve here; I've set it to Linear to get a more pleasing transition as it hits the target poses. You can also add extra in-between poses using the SDK window or by adding extra keys in the Graph Editor to have more control over how the wrist goes in and out of the corrective poses. Repeat the same for the right palm.
Before moving on to the upper arm and then the shoulder, we need to do a little parenting so our joints do not inherit any extra rotation values, which they seem to be doing at the moment. For example, if you rotate the upper arm control, you'll notice that the l_palm_jnt inherits some values. Luckily, it is a simple fix. First, parent l_palm_jnt under l_armEnd_jnt and r_palm_jnt under r_armEnd_jnt. Then parent both l_shoulder_jnt and r_shoulder_jnt under spineF_IK_jnt. And while we are here, lets parent both l_upperLeg_jnt and r_upperLeg_jnt under hip_FK_jnt.
Using Set Driven Keys to drive the correctives shapes for the wrist
Creating the bicep bulge
For the bicep, I have rotated l_lowerArm_FK_ctrl by 100 degrees on the X-axis. I have then duplicated the mesh, unlocked the transform attributes and again, used the basic Maya tools to add a slight bulge to the bicep and maintain the form created by the elbow. For the most part (depending on the resolution of your mesh), you should be able to fix the pose in Maya. Every now and then though, I find it easier to take the mesh into a sculpting package such as Mudbox or ZBrush and take advantage of the sculpting tools to push and pull the form.
Before exporting the mesh out of Maya, make sure to zero out the Translate values on the duplicated mesh. This will stop it from freaking out when we bring the corrective mesh back into Maya from Mudbox. Once back in the default position, go File > Export Selected and save it as an OBJ file. Call is what you like for now. I called it l_elbow_rx100.
Working on the bicep bulge with the Sculpt Geometry Tool
Using Mudbox and Maya to correct the shape
In Mudbox now, go File > Open and load in the exported OBJ file. The main Sculpt Tools I tend to use for correcting poses are the Grab, the Wax, the Fill, the Pinch and the Bulge brushes. At this stage, I'm usually looking at plenty of reference and more importantly, putting my own body into the pose (if possible) to give me an idea of how I need to push the forms. If you'd like to work non-destructively, you could use the Sculpt Layers while fixing your corrective pose. To create a new sculpt layer, click on the white paper with a green cross icon in the Layers window.
Once you are happy with the result, switch over to the Select/Move Tools tab and select the Objects tool. Select the mesh and go File > Export Selected and save it as an OBJ file. I called the mesh l_elbow_rx100fix. Head back into Maya now and import the updated mesh. You may get a little message pop up about multiple groups and so on when you import the mesh. Just click OK to this window and then pop into the Outliner and delete the extra Sets that have been created. Make sure not to delete the male_bind_set, though. If you need to, continue to refine the pose using the tools in Maya. When you are ready, select the corrected pose, shift-select male_geo and run the 'BSpiritCorrectiveShape' command. Rename the new shape l_elbow_rX_p100 and delete the mesh we imported from Mudbox. Duplicate l_elbow_rX_p100, rename it r_elbow_rX_p100 and again, use the abSymMesh tool to create the right-hand corrective fix. Select the 2 new corrective blend shapes, followed by the male_geo and go Edit Deformers > Blend Shade > Add. Use the same settings as we used previously to add them to the 'correctives' node. Lastly, grab all the blend shapes we have created so far, group them together by hitting Ctrl+G and then rename that group correctives_geo_grp.
Using Mudbox to sculpt the forms of the bicep bulge
Driving the bicep bulge
Like we did for the wrist, we'll use SDKs to drive the blend shapes. To drive the bicep bulge, I am using l_lowerArm_jnt as the Driver object and the Rotate X attribute as the driver. I won't go into detail here about setting keys, etc, as it is the same workflow as covered in Step 6.
Using Set Driven Keys once more to drive the corrective shape
One thing I did add was an extra blend shape to give me a larger bicep bulge. The reason I added an extra bulge shape is so that we can create the full swelling of the bicep muscle during supination of the wrist. I've decided not to drive this shape with SDKs as I want to let the animator drive this corrective shape manually. Later on I'll probably hook this up to a custom attribute for the animator to turn on and off.
Supination causes the bicep to fully contract