Reusing rigging information for other characters?

Become a member of the CGSociety

Connect, Share, and Learn with our Large Growing CG Art Community. It's Free!

Thread Tools Search this Thread Display Modes
Old 11 November 2002   #1
Reusing rigging information for other characters?

I'm about to start on the first scene of my animated short, and I have a pretty important question:

How much and which parts of my rigging for a character could be reused by other characters? The bones? Skinning? Deformation? The IK's? The blend shapes?

For example, I have the following main characters:

Little girl
Little boy
Old man

Now, I understand that if I have characters that are very similar in their physique, I could probably reuse some stuff, but what can I reuse if the physique of the characters are as different as the above listed characters?

Basically, I need to know WHAT data and nodes I SHOULDN'T delete when rigging the first character, so that I can reuse those data again for other characters.

Last edited by Lunatique : 11 November 2002 at 03:26 PM.
Old 11 November 2002   #2
I've just completed my first animated short and I have reused my main character rig 3 times. Covering a male adult, an elderly female and a 4-year-old child. Having the same rig for each character makes things a lot simpler as you only have to know one rig.

Bones can be easily re-sized and positioned for new characters, and IK setups should follow. If you have any constraints you may need to adjust them for the new character.

However, the program I use (MAX) does not support reusing skinning and deformations (correct me if I am wrong). It sounds like you are using Maya, so I don't know if it is possible in that program.

I would say reusing character rigs is definitely possible and I would highly recommend nutting it out because it saved me several days work.

I hope that helps
Old 11 November 2002   #3
Bennels, how did you reuse the rig?
Ive been trying to use the IKJoe rig with my own mesh, but some of the bones wont resize properly...

I would hate to miss something obvious, as im now building my own rig. (would hate to have to do that too many times)

Old 11 November 2002   #4
ET: Unfortunately I'm using MAX 4.2 and I've not had the chance to pull apart this infamous rig. You may need to break it a little to move some bones, and then try and put it back together.

Sorry, i'm not much help on that one. I'll do a bit more research on the IKjoe rig.

Old 11 November 2002   #5
Most of my rigging for bipedal creatures is automatic. The beatuy of MEL is that you can script the usual grunt labour you repeat all the time...
Old 11 November 2002   #6
yep, same here.. makes things so much easier. Plus, you can experiment with specific parts of a rig.. say your biped character is 99% the same as another character, but it has pig tails.. you can rig it in seconds with your standard rig, figure out somethign for the pig tails, and then from then on you've got a pig tail setup you can use for any of your other creatures.

super handy.

jason schleifer
Animator -
Co-Founder -
Old 11 November 2002   #7
Ok, stupid newbie moron question time:

In order to script the mel for rigging, do I just grab all the steps I went through with the first rig from the script editor, and then drag them onto a shelf button? Or am I spewing newbie stupid nonsense?
Old 11 November 2002   #8
The best thing to do is approach it in a way that you'd approach writing any modular program.. break it down into the steps that you're going to be taking.

For example, first you need to figure out how you want to build the rig.. do you want it based on the skeleton, or do you want to do it based on locators that define certain regions of the creature? The important thing is that you need a base to start with. So let's take the locator method as an example..

First, you would load in the scene that has the geometry and create locators based on where you want things to be. Because you know that you're going to be building a skeletal structure based on the locators, you want to ensure that the naming is consistent and correct. So what you would do is place locators where you want, for example, the up arm, elbow, and wrist to be.

So you name the locators l_up_arm_loc, l_elbow_loc, l_wrist_loc.

Then, you're going to make a program that does the following:

1) Determine whether or not you're building a right or left sided arm (l_ or r_).
2) Find the appropriate locators (l_up_arm_loc, l_elbow_loc, l_wrist_loc).
3) Build a joint structure that moves through them.
4) Build an ikHandle
5) Create the control structure you want
6) Set the correct attributes keyable/unkeyable/locked
7) Hide things that you don't need to see.

So start breaking this down.. into mel. You know that you're going to be making this a "procedure" or individual program that can be called from a larger program. And you also know that you need to pass it either a left or right side, so it knows what to do. So you would define the procedure and the variables that you're going to pass it:

global proc buildIkArm (string $side) { // Take an argument ("l_" or "r_") and build // an ik arm. }

This is a simple procedure which that simply will take an argument and does nothign with it at this point.. but it will do something eventually.

Now you want to add the second part.. where it finds the locators that it needs. You can do that using the $side variable, and the fact that we KNOW that the things will be labled up_arm, elbow and wrist:

global proc buildIkArm (string $side) { // Take an argument ("l_" or "r_") and build // an ik arm. // get the names of the locators $up_arm = ($side + "up_arm_loc"); $elbow = ($side + "elbow_loc"); $wrist = ($side + "wrist_loc"); }

now that we know those, we're going to start building joints through them. To do that you need the location of those locators in space, and you need to know the joint command. To find the location in space of an object, you can either use the xform command (xform -q -worldSpace -rotatePivot) or use the getAttr command if the locators aren't a child of anything else. I prefer the xform command 'cuz I know it'll work..

global proc buildIkArm (string $side) { // Take an argument ("l_" or "r_") and build // an ik arm. // get the names of the locators $up_arm = ($side + "up_arm_loc"); $elbow = ($side + "elbow_loc"); $wrist = ($side + "wrist_loc"); // find the world space of the locators, and // create joints that are in the right place $uap = `xform -q -ws -rp $up_arm`; $ep = `xform -q -ws -rp $elbow`; $wp = `xform -q -ws -rp $wrist`; $up_arm_joint = ($side + "up_arm"); $elbow_joint = ($side + "elbow"); $wrist_joint = ($side + "wrist"); // now each of the pos variables are arrays. // we can use them to create the joints. select -d; joint -p $uap[0] $uap[1] $uap[2] -n $up_arm_joint; joint -p $ep[0] $ep[1] $ep[2] -n $elbow_joint; joint -p $wp[0] $wp[1] $wp[2] -n $wrist_joint; // now orient them correctly joint -e -oj xyz $up_arm_joint; joint -e -oj xyz $elbow_joint; }

see how this is progressing? basically, you see what it is you need to do, then search the mel docs for the commands required. The next step was to make the ikHandle. Just guessing you can assume that it requires the ikHandle command.. type
help -doc ikHandle
and you'll find that there is example code to help you out.

global proc buildIkArm (string $side) { // Take an argument ("l_" or "r_") and build // an ik arm. // get the names of the locators $up_arm = ($side + "up_arm_loc"); $elbow = ($side + "elbow_loc"); $wrist = ($side + "wrist_loc"); // find the world space of the locators, and // create joints that are in the right place $uap = `xform -q -ws -rp $up_arm`; $ep = `xform -q -ws -rp $elbow`; $wp = `xform -q -ws -rp $wrist`; $up_arm_joint = ($side + "up_arm"); $elbow_joint = ($side + "elbow"); $wrist_joint = ($side + "wrist"); // now each of the pos variables are arrays. // we can use them to create the joints. select -d; joint -p $uap[0] $uap[1] $uap[2] -n $up_arm_joint; joint -p $ep[0] $ep[1] $ep[2] -n $elbow_joint; joint -p $wp[0] $wp[1] $wp[2] -n $wrist_joint; // now orient them correctly joint -e -oj xyz $up_arm_joint; joint -e -oj xyz $elbow_joint; // add an ikHandle $handleItems = `ikHandle -sj $up_arm_joint -ee $wrist_joint -n ($side + "_arm_ikHandle")`; }

see how it works?

the best thing to do is look at the script editor as you're trying stuff & see what commands get echoed.. then read the docs on those commands.. and discover how to use them to your advantage.

hope this helps some & gets you going on the right track!

jason schleifer
Animator -
Co-Founder -
Old 11 November 2002   #9
Well I don't know about you guys, but I'm doing that tomorrow.

Thanks for taking the time Jason, I guess you have a bit more of it now though ;^) can't wait to see it on the big screen.

Old 11 November 2002   #10
Nice response Jason. That should get Lunatique started on the right track...I saw a few things I could do to enhance my scripts too. I get nervous around brother was killed by an Xform...*sigh*


Last edited by bentllama : 11 November 2002 at 04:46 AM.
Old 11 November 2002   #11
heh, glad it's going to be helpful.. I'm actually in the process of re-working my whole pipeline at home to keep things more interesting.. should be fun.

jason schleifer
Animator -
Co-Founder -
Old 11 November 2002   #12
Jason- WOW! Thanks for pointing me the right direction!! You've always been one of my favs at cgtalk, since you are a busy bee working at a big studio, but still take the time to help out the cgtalk community, and is totally down to earth and easy going.

I feel like I have a huge mountain in front of me that I have to climb, and the peak it up there in the clouds where my eyes can't even see. Attempting to make an entire animated short as a 3D newbie, while learning each step of the way is VERY daunting. But with great people like the cgtalk guys/gals around to help out when I get stuck, I feel a bit more optimistic.

Now for another question:

Aren't locators just part of the skeleton? If the two systems are different, what are the pros and cons of building a system based on skeleton vs. locators? I will not be dealing with any non-human characters, and my characters will all be animated in a realistic manner(not exaggerated cartoony style). There will be a lot of closeups on the face and hands, as they express a lot of emotions. Oh wait, I do have to rig a flock of pigeons too. So, ok, add a pigeon rig to that.
Old 11 November 2002   #13
huh, who needs them trianing dvd's
getting alllll the info right here

thx jason

Old 11 November 2002   #14
yo jason nice! that helps me out and i can see how to almost write the whole thing in mel, but how would i do something like adding a hand rig to that, to place the joins in space do i have to havea locator for each one? or what do u recomend


-Side Step the Norm-
[]Machine Flesh 3D Challange![/url]

Or Visit DA4's site
Old 11 November 2002   #15
awesome response Jason... I love it.
reply share thread

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Society of Digital Artists

Powered by vBulletin
Copyright 2000 - 2006,
Jelsoft Enterprises Ltd.
Minimize Ads
Forum Jump

All times are GMT. The time now is 07:20 AM.

Powered by vBulletin
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.