February 2003

The "SimpleGuy": A Review of and Tutorial for an Intuitive Maya Biped Character Puppet
By Kris Kapp

I’ve spent a lot of time rigging characters. Mainly, I’ve come to rely using scripts for most of the repetitious work, but it is still a time consuming process to completely rig a character for animation. At my current job, we send out a lot of modeling and animation to be done by contractors, and I was looking into designing a universal rig that could be fitted to any character so that we could start animation before the characters were completely modeled and textured. Normally, I’m not a big fan of this, as you can run into problems if IK is used to animate and the proportions of your stand-in rig are different from the final character setup. I ran across the SimpleGuy and found it was a great tool.

Jeremy Cantor’s SimpleGuy is a simple to use, basic Maya puppet that has built in controls for changing its proportions to fit other characters. I’m going to go over how I used it to fit with one of my characters. You can find the SimpleGuy puppet at Turbo Squid. I think it is a pretty good deal. It would take me at least several hours to fully rig a character with all the features that the SimpleGuy has with out the toolbox. Throw in the amazingly complete GUI and it is a killer deal.

First things first: Read the documentation. SimpleGuy comes with simple docs that basically describe how to use the puppet. The toolbox is easy to use and also includes some useful scripts for filtering curves in the graph editor and a wire frame-coloring tool.

I started by opening the SimpleGuy file in Maya. I cleaned up my view by creating a new layer, selecting all the SimpleGuy’s stand in geometry and assigning the geometry to the new layer and then hiding it. Next I imported my character geometry into the scene and opened the Toolbox by selecting the top node of the SimpleGuy (simpleGuy) and setting the Tool Box attribute to 1. The Plugins Menu item has a Change Proportions tool that brings up a GUI to let you fit the puppet to your character. By clicking the Overall Scale Tab, you can quickly rough in the proportions to fit your character.


Change Proportions GUI

Once you've got the basic proportions scaled as needed, you can start getting the individual joints in the correct positions. Position the hwa node to where the base of the spine would be in your character. This control moves the hips with the IK arms and legs. Select the hips if you just want to move the hips with out moving the legs and arms. One nice thing is that the toolbox allows you to hide the arms of the SimpleGuy, making it easier to get the position of the spine correct. It’s important to get the spine right, because the locations of all the other joints depend on where the hips are located.

Once the hips are in place, move on to the pelvis. Next, position the pelvis and legs by starting at the hips by selecting the Body Scale tab and then scaling the Pelvis. You can also select the pelvis from the Join Selections tab to further move it as needed.

The legs are next. Scale them using the Legs Scale tab. To fine-tune the femur placement, select the thighs through the Joint Selection tab and move it into place. One thing that I found to make this easier is to set the FKIK dial for the legs to FK and then rotate them into position. One thing that would be nice is a mirror button that would allow you to match symmetry from one side to the other, but it’s not that big of a deal to match the position of the joints from one side to the other. Another quirk that I noticed from the Change Proportion GUI is that the Left Thigh button selects the right femur placement node and vice-versa. I didn’t have to move the individual knee joints on my model. I was able to get the knee located correctly by using the Leg Scale sliders. One thing to think about is how your character is going to move. If the thigh is much longer or shorter then the tibia, you are going to have a strange gait to your character. If this is what you want then by all means position the knee where you want it by selecting it in the Joint Placement tab and translating it.

Once the joints for the leg are rotated and positioned, scale the foot for correct joint placement for the toe. There is not a joint selection for the toe but you should be able to get it in the correct position by using the foot scale slider.


Lower leg and toe placement (click for larger image)

Now that the legs are done, move onto the back. Use the torso scale slider to get the rough position of the back and shoulders then use the lumbar and thorax joint selections to get the correct placement of the back joints. Also use the lumbar, thorax, and spine controls to get the rotations as needed.

The arms follow the same workflow as the legs. Use the FK controls to rotate the joints to match the model. Scale the clavicles and neck to fit. The hand control is used to position the fingers. I was able to get pretty close with mine by using the individual finger spread attributes. You’ll probably have to select the individual finger joints and translate them a bit to get them to match your models hands.


Model with SimpleGuy joints scaled to fit (click for larger image)

Depending on your character, at this point you might be ready to bind your mesh to skeleton. For my character, I needed to add joints for the ears and jaw, and I decided to add a few joints in the rib cage to make it easier to paint the weights of the bound mesh.

One thing that I found is that simply just parenting new joints to the Simply Guy skeleton causes an extra transform node to be created between the joints. To get around this, use the Connect Joint command with the Parent option on to get around this. However this can cause the joint chain to scale itself so it no longer fits where you need it.


Adding addition joints for skinning (click for larger image)

I used the following procedure to get around this:

  1. Layout the new joints with out connecting them to the existing skeleton.
  2. Mirror the joints for the other side.
  3. Make a guide for the joints by duplicating the joint chain.
  4. Connect the first joint chain that was created by using the Connect Joint with the Parent option turned on. Chances are that is will not be scaled correctly.
  5. Snap the joints into the correct position by using the duplicated joint chain as a guide.
  6. Delete the joints used as a guide.
  7. Check the Local Rotation Axis on the newly connected joint chain. You may have to adjust the LRA by using the joint –e –oj yxz –zso command on the joints. Or you can adjust the axis by hand. That’s what I ended up doing for the ears of the character because I was after specific behavior from the ears.

I also added joints for the jaw and for a couple ribs. One thing that I noticed is the there are two joints named Skull1. The joints chains for the SimpleGuy work off the concept of having a control skeleton, a FK skeleton, and an IK skeleton. One of the Skull1 joints is parented to the control skeleton and the other is parented to the FK skeleton. I just renamed them skulltopJ_ct and skulltopJ_fk to follow the same naming convention as the other joints.

I also followed a naming convention when I added the new joints. If I was going to bind geometry to them I used the string JNT as a suffix when I named the joints. This makes it easier to select the correct joints when I bind the skin. For example: the first joint of the ear chain that I added I named lf_earRootJNT.

Once you have the puppet posed how you want it and are ready to bind a mesh to the skeleton, record the pose using the Record Current Pose under the Action menu on the toolbox. This pose will allow you to get back to the default pose used for binding. One caveat: you must deactivate the constraints on the clavicles before it will allow you to Apply Recorded Pose. I made a quick button to turn the constraints off then another to turn them on:

I made a quick script that I use to select the joints and bind the skin at the same time. Sometimes you might have to adjust the joint placement and/or add some detail to your mesh. By automating the simple tasks, you have more time to spend on the creative side of things. For example:

Let me know if this script doesn’t make sense. Sometimes the formatting gets a little screwy with html. I also export the weight maps and import them back in if I have to re-bind a mesh to a skeleton. That way I don’t lose any work if I want to adjust the placement of a joint. The mirror weights function works pretty well if you have a good set of UV’s. Taking time to lay them out in a meaningful fashion will make your life easier in the long run.

I was very quickly able to rig a couple of characters and skin them using this tool. The two characters are very proportionately different from each other. Starting from scratch on both of them would have taken me a while, and I wouldn’t have had the nice GUI to animate them. I think the tool is well worth what Jeremy is charging for it. The website is: http://www.turbosquid.com/HTMLClient/FullPreview/FullPreview.cfm/ID/184717/A

Hopefully, I’ll be a little quicker in answering emails this time around. I am still working on getting internet access at the house. But if you have any questions my email is: kris.kapp@riskstudios.com and I will try to answer as quickly as  possible.


Rigged rabbit (click for larger image)


Rigged chicken (click for larger image)

 

 

GIGnews is a publication of GIGnews.com, Inc.
"Get In the Game" is a registered trademark used with permission.

© 1
999- 2005 GIGnews.com, Inc.
Legal