Weighting the Rig
Click on the link below to open the Project in which the character’s joints have already been adjusted:
With the new auto-weighting in place, the next thing to do is to correct all the weights so that they deform your character better. As smart as auto-weighting is, it is never perfect and always needs to be touched up.
The first thing we can do is simplify the weights values themselves by using a new feature from the Weights Manager, which allows us to round all the weights values easily.
Switch to the Weights tab, set your Edit mode to Round and the To option to 10 (rounds all values to the closest increment of 10). Then right-click in the weights table and select all the weight values (make sure all Weight tags are still selected, otherwise all points won't be available in the weights table). Finally, click on the Set command of the Round mode.
All values are now rounded, which makes it a lot easier to understand how each joint affects the points, and a much better starting point to edit these weights. An extremely useful feature for weights editing and cleaning. Keep in mind that rounding values will make you lose some of the "subtlety" and smoothness achieved by the auto-weighting, but this shouldn't be an issue because you will refine the weights later on, in a more controlled manner.
We can now start editing our weights manually. This can be a long process so we are just going to cover the arms and hands in this tutorial, and you should be able to work your way through the remaining weights on your own.
Double-click on any Weight tag to open the Weight tool. A good starting setup for this tool is to set it to Absolute Mode, with no Falloff. This will make each stroke of the brush apply the value defined in the Strength option, instead of increasing gradually weights as if using an airbrush (the default Add setting makes the Weight tool behave that way, which is not good as a starting point).
This setup is good for overriding weights or starting fresh without auto-weighting because you know exactly what weight a point has, from the selected joint(s). Using simple values also helps. For example, you can start by laying down weights at 100% and making sure you cover the whole mesh. Once all points are influenced, apply 50% influences at edge loops that should be influenced by two joints (such as the elbows, for example). Finally, tweak your weights by using incremental values such as 30, 20, 10 and 5%. This should be more than enough values to juggle with, and to achieve the necessary subtlety.
You can finish that off by using the Weight tool in Smooth mode and smooth weights a little in difficult areas (hips and shoulders are notoriously difficult areas to weight, for example).
Weighting the arms
As an example of the weighting process, let's take the left arm as a starting point. With the Weight tool active, select the L_Arm component. Make sure no Weight tag is selected because we will be concentrating on the left arm's weights (otherwise, all the joints and weights from the selected object's Weight tag would be displayed, which is not necessary).
In the Joints tab of the Weight tool you can optionally enable the Lock List option so that only the current list of joints will be displayed, no matter what you select from now on. While locking the list is not necessary, it’s advisable to lock the Attributes Manager so you don't lose the Weight tool's options when selecting something else.
The list shows that the left arm component affects the Bruno and Clothes meshes, and that the elbow joint is the only joint affecting both meshes (the elbow joint affects both the sleeve and the wrist area of the character).
Switch to the Display tab, and set the Mouse Over option to All, so that the Weight tool will display each joint influence for the point over which your cursor hovers. This allows you to see if all accumulated weights reach 100%, and which joints are currently influencing the point and by how much.
Now that we can see all the influences, we can start applying some weighting to the shoulder joint - in this case, we can see that the shoulder joint should influence the top of the arm, the biceps and triceps areas, and the elbow. Hover your cursor over the mesh and apply 100% weighting anywhere the shoulder joint weight is not equal to 100% (make sure the shoulder joint is selected in the Weight tool's joints list, since weight will be applied to the selected joint). You can also do this from the front view and paint invisible points by disabling the Visible Only option found in the Weight tool Options tab.
Alternatively, you can also use points, edge and polygon selections to apply your weights. Often times, this is faster way to apply your basic weights, if your mesh is modeled properly (with edge loops).
Switch to polygon mode and select the loops of the left arm, to encompass the points we weighted earlier.
Next, open the Weight Manager, select the shoulder joint in the joints list and click Apply with a Strength parameter set at 100%. If you want, you can remove all weighting beforehand, by clicking the Zero command with the shoulder joint selected. This is a good way to ensure the joint is only influencing the points you have selected, and nothing else.
Repeat the same process with the elbow joint and the forearm points selected.
Now that both upper arm and forearm have weights assigned, we need to take a look at the elbow area. This area needs to be deformed by both joints so the transition is not too sharp, doesn't overlap or compresses the arm when it is bent.
Here is a graphical explanation of how a simplistic arm would be deformed if there were no shared weights on the elbow edge loop. Notice how the bent shape can easily be corrected with a proper repartition of the weights between the shoulder and elbow joints.
Applying this principle on our character is quite simple. Switch to Points or Edge mode, and with the Cloth mesh selected, select the elbow loop of points. Next, select both the shoulder and elbow joints in the Weights Manager, and apply a weight with 50% strength to these points.
This being done, we can apply the same principle to the shoulder area, which needs to be influence by both the shoulder and collar joints.
Select the shoulder loop of points, select both the shoulder and collar joints in the Weight manager, and apply a weight value of 50% to these selections.
Note that the Advanced Biped template has some additional controls that could be useful for the weighting process. Select any component and check its Controls tab to see if the component has some controls available. For example, the hand components have sliders to control the fingers, which come in handy to check out the fingers’ deformations.
To finish off the main weights of the Clothes mesh we just need to edit the weights of the wrist area so that the sleeve can be influenced when the hand is rotated.
Select the row of points at the tip of the sleeve, select both the elbow and wrist joints in the Weights manager, and apply 50% weights to the selected points.
Now is a good time to check your deformations. Here, if I bend the arm and wrist, I notice that while the elbow area is good for a first pass, the wrist is still not deforming properly. We probably need to expand our weights up the sleeve, and create sort of a gradient of strength values starting from the wrist.
Select the row of points at the tip of the sleeve and gradually decrease their strength the farther up the sleeve you go. Here is an example of weights I applied to the mesh:
This is the gist of how weights painting works. You can apply the same principles to the other parts of the character, by simply selecting the mesh you want to weight, its points and the joints to assign to the selected points. Don't forget to mirror your weights too, no need to do it by hand if your character is symmetrical!
As explained earlier, the weighting process and workflow is a pretty deep subject, as there are many ways to obtain the same results, and some pretty neat commands to discover, but as this is not an advanced weights painting tutorial, we will now skip to the job of creating a walk cycle using the CMotion object.