<%@LANGUAGE="JAVASCRIPT" CODEPAGE="1252"%> MAXTD - MAX, TD, Character Rigging
 

SKELETON CONTROLS

Time for the rough stuff. In this section, I'll explain the basic controls placed in the character. I'll cover the advanced controls, along with the controllers used, in the next tutorial. So, let's take a look again at our skeleton.

Bones-only skeleton

I'll show you first how to set the controls for the spine, since this is one of the simplest areas to set up. Here's a view of the spine bones.



As explained before, each bone is an individual, independent chain, composed of only one bone (two counting the root), and aligned. Now, create three helper objects. I use my 'rotator' helper object, so I instantly know what kind of control it is (a 'rotator' rotates hierarchies). I use these ones to drive the rotations of each bone in the spine in an FK fashion. Of course, I don't rotate each helper in each axis. Expressions are used to automate the rotations that occur in certain directions. I'll get later into writing those expressions. For now, take a look at where each rotator is placed. Each chain has one of these rotators as parent of its root bone. Aside is a sample view of the schematic view for this complete hierarchy.



NOTE: Please bear in mind that using IK with expressions and script controllers results in a somewhat slow setup. However, I don't mind having to wait a little in exchange of complete control over the character's behaviour.

Try rotating one of the helpers. You should see the bone rotate with it.

Now, select the neck bone. Got to the motion panel. Create another helper (I use a 'translator' helper object), and align it with the top bone. In the motion panel, with the bone selected, click on the link button and select the translator (I'll refer to these helper objects by their name from now on. You can use your own developed objects, non-renderable geometry, or dummies). Now, in the position section of the panel, click on the create button. This will create an end effector at the position of the translator, automatically linked to it. If you move the translator, the bone should follow. I have limits set on the root neck bone, so that the neck won't rotate to much in any direction. My character's helmet is directly linked to the topmost bone, NOT the translator. This way, no matter what happens, the head won't come off. Here's a view of the finished setup, along with the schematic view.



The clavicle area is another one very fast to set up. It's basically the same procedure than for the neck bone. Create a translator at the end bone, align it, go to motion panel, link the bone to it, and create a position end effector. Of course, the root clavicle bone has limits, and it's only enabled in it's local ??? axis. This bone's function is to raise and lower the shoulders.



Ok. Time to get into the ugly stuff. The arm setup. The arm's setup is designed to give maximum flexibility and power, while retaining ease of use. It's designed to switch between full IK and FK. The IK mode uses a simulated up-vector constraint (also known as pole vector constraint), which makes fairly easy to adjust elbow orientation. So, let's get into it.

First, create a rotator and position it precisely at the root of the arm chain. Now, create a null (another one of my scripted objects), and position it exactly in the center of the rotator you just created (I use a pivot-to-pivot align for this). Now, move it into the back of the character, taking care not to move it in any other direction (use your transform gizmo). Now, assign a look-at controller to the shoulder rotator, and pick the null as the target. Now, you have a simulated up-vector constraint. Link the root bone of the arm chain to the shoulder rotator. The difference between a real up-vector constraint and the faked one ( by the way, I borrowed this technique from Adam Baroody, taking his concepts on these constraints, and developing them further), is that a real up-vector/pole-vector constraint has only one degree of freedom, whereas the faked approach has three degrees of freedom. In some instances, this is an advantage. Ok. Back to our business. Now, select the forearm bone (the last bone in the chain), and repeat the steps taken before in the motion panel, but with one difference. Create a translator, position it exactly at the pivot (end) of the bone, and create the end effector. Now, assign a link controller to the translator. I'll explain in the next tutorial why this is needed. You should have the link controller with a PRS sub-controller. Now, link the bone's end effector to the translator. That's it. Move the translator, and the arm will move. Move the null, and the elbow will change its orientation. Use the logical axis constraints and limits for each bone in the chain. I'm not posting my particular settings since these change depending on the character's physique, so use the ones you feel are right for your character. Here's what you should have now.



If you don't need FK for your arms, you're done. The FK part will be covered in the next tutorial. Just repeat everything for the opposite arm, and link the shoulder rotator to their respective clavicle bones. Remember it's directly to the bones, not the end effectors. This will prevent the structure from breaking. If you want to use the arm setup like it is now, just uncheck all axis of rotation for the forearm bone. This will prevent the "wrist" bone from rotating, so you can use the setup as it is (the "wrist" bone is the short bone between the forearm and the hand. Remember it'll be used to properly deform the character's gloves).

Now, let's get to the legs. The legs have controls very similar to those found in the arms. In fact, the setups are extremely similar. Just create a rotator at the pivot point of the root of the chain (the red terminator bone), and create a null in the same position. Move the null behind the rotator, assign a look-at controller to the rotator, and pick the null as the target. As for the ankle, create a translator at the calf bone position, create a position end effector for the bone, assign a link controller to the ankle translator, and link the end effector to the translator. You're done.



The feet have a similar, simple setup. Just create a rotator at the ankle, and link the foot's root bone to the rotator. This rotator assists in setting up special positions for the foot, as well as compensating for certain rotations that can occur during animation. Just lock the rotator's x axis, you don't want that axis working. Now, create two more helpers. Create one translator at the ball of the foot, and one dummy at the toes (I use a dummy just to differentiate both). Assign a link controller to the ball translator. Create two end effectors in the foot chain, one for the ball and one for the toes. Link the end effectors respectively to the ball translator and the toe dummy. Link the toe dummy to the ball translator, and in the motion panel, select the ankle translator as the ball translators parent at time 0. That's it.



To finish assembling things, link the ankle rotator to the calf bone. Link the hip rotator (the parent of the leg root bone) to the hip box bone. Link the first spine rotator (the topmost parent in the chain) to the box hip bone. Link the hand palm bone to the last bone in the arm chain (that'd be the 'wrist' bone). Link the neck's chain root to the small bone between the clavicles (let's cal it the 'chest meeting bone'), and each clavicle root to this bone too. Now, link the chest meeting bone to the last bone in the spine chain. Select the wrist translator (the one that moves the entire arm) and in the motion panel select the chest meeting bone as the parent (in the link controller) at time 0. Select the arm nulls and link them to the chest meeting bone. Select the leg nulls and link them to the hip box bone. Select he neck translator and link it to the chest meeting bone. And lastly, create a trans-rotator (another helper object), position it at the center of the hip box bone, assign a link controller to it, and link the hip box bone to it. Name this helper "My_character's_name_here_COM". COM stands for Center of Mass, and this will be the node that animates the movement of the whole character. Why use a link controller on it? We'll answer these questions in the following tuts...

And to end up this tutorial, here's what you should have so far. If you're happy with the control this setup provides, you might start animating. I'll cover the advanced controls in the next tut, but they're only meant for power-hungry, flexibility-needing users. Hope you've found some valuable info so far. See ya soon!



©Sergio Muciño. maxTD 2000.

[Continue with part 4]

smucino@maxtd.com