PDA

View Full Version : Parenting and Zeroing-Out Problem


jedijrmax
05-26-2004, 02:46 AM
Hey everyone. I've rigging a human skeleton using Maya 5.0, and I've coming across what I think is a weird problem.

I have selection items... like shapes made from epcurve tool, or just locators etc... I have them point snapped to joints so that they sit on top of them... ok.. sounds ok so far..

I want all of my selectors and locators to be 'zeroed' out, so at any time I can just type in zeros in the channel box and essentially, once the character is rigged, it would moreorless return to the bind pose. SO... I do all the work first.. meaning I draw my skeletons, finialize their positions, create locators, point snap them to different points of the body and then freeze transform them, and then I head over to the hypergraph to actually...make some sense out of all of it, ya know to essentially MAKE the rig..

I have found that when I, for example let's say, when I take a locator that has an arm's ik handle parented to it, and I take that locator and parent it to something within my hierarchy, I notice that the locator no longer it zeroed out. Hm.. so I unparent it out of the hierarchy and now it goes back to being zeroed out.. but the real kicker is .. is that the locator would've never moved. When I parent it into my hierachy, and the numbers aren't zeroed out, the locator hasn't moved at all...so it's making that position, the position which is like point snapped to a wrist for example, like 9.244 -22.422 -.004 , but I want it to be parented into my hierachy, sitting on the wrist joint, but with 0 0 0 0 0 0.

Anybody have any clues? I think it is having to do something with the translations from actual joints. Although .. has anybody encountered this before or have any idea of what I'm talking about? If nobody does, then I can try to put up a .mb file right?


Thanks a lot in advance!

Gnimmel
05-27-2004, 01:53 AM
The channel box shows the offset from it's parent, so if you change the objects parent, then the translation values in the channel box will change.
If you want to parent somthing onto your skeleton and keep everything at zero, the easiest thing to do is to duplicate the object, and parent the old one to the new duplicate. This should give you all zero's in the translation and rotation because it is showing the offset, which is nothing because they are the same objects in the same place.
Now delete the shape node of the duplicate object, just so you can't select it, and then parent the duplicate to what ever you like in your skeleton.
Now the duplicate's transforms get changed, but your control dosn't because it's showing the offset from the duplicate.
With the duplicates shape node deleted you can't accidentaly select it while animating and it's just a null node that keeps your real control at zero.

Richard

jedijrmax
05-28-2004, 03:06 AM
Wow, thank you very much. That's all very interesting. I really appreciate the help. I had all of these additional questions concerning what you wrote, but I just seemed to figure them all out. I really can't thank you enough. Although I do think it is weird that I've never heard anybody talking about this concept. Wouldn't it be really important to understand how this works when rigging a character?

jedijrmax
05-28-2004, 03:19 AM
I guess I spoke too soon. I thought I understood everything just fine, but it turns out something just happened that I can't seem to explain to myself.


The whole idea of 'offset' that you mentioned was completely new to me. If you have cubeA at 1 0 0 and you parent it to cubeB at 5 0 0, cubeA will become -4 0 0. Makes perfect sense, awesome.

I wanted to now see how it worked with rotations. Made a CubeA at the original with rotation values of 0 25 0. Made a CubeB with translations of 5 0 0, and rotation values of 0 50 0. So if rotation values worked with the same concept of offset as the translations did earlier, then I would imagine that when CubeA is parented to CubeB, it would be 0 -25 0.......and it iS! the rotations on CubeA became 0 -25 0! awesome... however.... then, when I took a look at the translations....

CubeA- Translate X- -3.214
Translate Y- 0
Translate Z- -3.83
Rotate X- 0
Rotate Y- -25
Rotate Z- 0


CubeA- Translate X- 5
Translate Y- 0
Translate Z- 0
Rotate X- 0
Rotate Y- 50
Rotate Z- 0

What's up with the CubeA TRANSLATIONS?!? According to what happened before, with CubeA being at the original and CubeB being five units in the +X, then CubeA should've been -5, 0, 0. But with a rotation on the Cube... yielded crazy translates... but the offset... shouldn't have changed..... Any idea what's going on with this?

Gnimmel
05-28-2004, 10:09 PM
The reason for the translations seeming strange after your rotation test is that this all works in local space. By rotating cube B to 0 50 0 and parenting cube A to it, cube A is now in cube B's local space and not world space anymore.
To see this better, select cube A, go to the move tool and select local space. You'll see it's lined up with cube B.

Richard

kiaran
05-30-2004, 09:52 PM
the easiest thing to do is to duplicate the object, and parent the old one to the new duplicate.

This seems like a very round-about way of simply putting an object in a new local space. With your object selected, just hit CRTL+G to group it to itself. Then parent that group under the joint or whatever you are doing with it.

Working with coodinates spaces and grouping hierarchies is fundamental to character rigging, learn it inside and out.

Gnimmel
06-01-2004, 06:55 PM
The reason for duplicating the control object is so it keeps the same local axis. If you simply group it to itself then you have set your control axis to world space. There are some controls that this would work fine on, but most of the time the controls have to be aligned to a joint in the skeleton which is never aligned to the world.

kiaran
06-01-2004, 09:04 PM
I don't know if anyone has mentioned this yet but...

1. orient constrain a null-group to the joint.

2. delete the orient constraint you just made (observe that the null group's rotation axis remained aligned with the joint)

3. Now orient constrain the joint to the null .

4. Parent the null under your control object (likely a curve)

5.Group the control object under itself and parent under whatever joint you want.

Everything is zeroed out and the rotations line-up perfectly.

I've actually scripted this action and turned it into a button on my rigging shelf.

Hope this helps:D

M.E.L.
06-01-2004, 11:32 PM
Originally posted by kiaran
I don't know if anyone has mentioned this yet but...

1. orient constrain a null-group to the joint.

2. delete the orient constraint you just made (observe that the null group's rotation axis remained aligned with the joint)

3. Now orient constrain the joint to the null .

4. Parent the null under your control object (likely a curve)

5.Group the control object under itself and parent under whatever joint you want.

Everything is zeroed out and the rotations line-up perfectly.

I've actually scripted this action and turned it into a button on my rigging shelf.

Hope this helps:D

that sounds alot like the Patapoff way of doing things :buttrock:

heh, Grimmel nailed it bang on, if you just duplicate the control, freeze transforms...you got yourself the exact same axis as the original object that was messed up and it saves you alot of extra time with other ways.

- shawn

kiaran
06-02-2004, 05:18 AM
that sounds alot like the Patapoff way of doing things

MEL: Say hi to Patapoff for me eh? LOL. :p

If you simply group it to itself then you have set your control axis to world space.

Gnimmel: Ok, I misunderstood what you meant. That's actually a pretty neat trick. Me likes! :bounce:

CGTalk Moderation
01-18-2006, 07:00 AM
This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.