Anim8or Community

General Category => General Anim8or Forum => Topic started by: Alpha2 on November 24, 2009, 11:47:48 pm

Title: bone xyz coordinates
Post by: Alpha2 on November 24, 2009, 11:47:48 pm
Using version .95 (02-apr-07)

My problem:
Let's say I've created a bipedal character. He's built in a T pose and the bones have been attached in the usual manner. Once all the influences have been assigned, I take the characters arms and rotate them forward toward the camera "zombie style" on the X axis. The animation them calls for me to drop the arms straight down to his sides putting his palms facing away from the camera along the Y axis. At this point there's no way to rotate them up from this position into a T pose again because the rotation disks for the X and Z axis are in exactly the same position like a sandwich or something.

Likewise if I turn the arms so the palms are away from the camera first and drop them to his sides it's impossible to lift them straight forward from this pose for a similar reason.

Am I doing something wrong or is this natural human movement simply impossible for the XYZ set up? Or maybe has this been changed in a later version of Anim8or?
Title: Re: bone xyz coordinates
Post by: hihosilver on November 25, 2009, 12:17:27 am
I believe this will help you a lot: (
Title: Re: bone xyz coordinates
Post by: Alpha2 on November 25, 2009, 12:43:21 am
Okay thanks that helps me understand why it happens. But it still leaves me with the problem because as far as I know there's not way to adjust the hierarchy in an8, which means the character's motion will have to end up unnatural looking regardless of how I want the limb to move.
Title: Re: bone xyz coordinates
Post by: ENSONIQ5 on November 25, 2009, 01:56:20 am
One solution that has worked for me is to introduce an additional short bone in the shoulder, as a parent of the upper arm bone, which is only used for rotation in the horizontal axis parallel to the arms original orientation in the T pose.  Rotation in the horizontal axis perpendicular to this one (axis runs through shoulder front to back) and in the vertical axis is still performed on the main arm bone.  To perform the motion in your specific model you would swing the main arm bones forward (zombie pose) then rotate the short bone to swing the arms down by the model's side, palms backwards.  Note that there can be significant stretching of the mesh around the shoulder since the short bone won't be influencing a lot of points, careful weight painting might be required.

On further reflection, the motion you describe isn't really possible for humans anyway.  The direction the palms are facing is changed by rotating the wrist more than the shoulder.  If you perform the action yourself, moving from T pose to 'zombie', then rotating your arms straight down to your sides, palms facing backwards, you will notice that your shoulder does not rotate much at all when you turn your palms back in to face each other, it's all in the wrist.
Title: Re: bone xyz coordinates
Post by: Alpha2 on November 25, 2009, 07:27:51 am
I can do it and it's not like I'm double jointed or anything. Wrists locked in position from T pose to forward to sides, all the movement happens in the shoulders. But the description I used was only to illustrate where the failure of the bone's movement occurs.

The original problem cropped up when I wanted to move my characters hand from resting on his hip to pulling the hand away and rotating the arm forward to a Hand shake pose. This was simply impossible without some wild swing out to the side of the body instead of just moving forward because the axis constraint I used to keep the arm from clipping through the body while the arms were at it's side suddenly kept the arm from from lifting above his waist.

I will try your suggestion though, it sounds like my best bet. Since I dont use a solid body mesh for arms anyway (spent many hours trying to get arms to not deform at the shoulder and just got sick of it) it should suffice to get the arms moving the way I want.

Thanks for your suggestion!
Title: Re: bone xyz coordinates
Post by: Dreadkb on November 26, 2009, 07:21:31 am
These videos have given me an idea about a possible solution. Gimbal lock occurs in Anim8or on the "z" axis. In your figure, rotate the upper arm bone 90 on the "y" axis. This will flip what your "x" and "z" axis. This way, the motion you describe would cause Gimbal lock at the arms straight forward then down. Alternatively, you rotate the bone, in the figure, 45 and almost avoid Gimbal lock. Unfortunately, this would make simple 90 movements difficult, as you would have to change the "x" and "z" simultaneously.

Btw, I love these videos. I know, from experience, that Anim8or saves the rotation of bones in a figure as a quaternion. I never understood how these 4 values created the rotation I saw on the screen. Thank you so much for posting a link to these videos, hihosilver.
Title: Re: bone xyz coordinates
Post by: Alpha2 on November 28, 2009, 08:54:26 pm
Yeah unfortunately while it fixes the example to some degree, the over all situation still causes the lock up with other poses. Using Ensoniq5's solution helps a little, still not a perfect fix but I'm getting the animation I was aiming for, I suppose only time will tell if there are any further limitations I'll encounter.