Armature Bone Roll Issue

Hi guys,

I’m currently building the armature skeleton for an 8 legged creature, and I ran into the following problem:

As we all know (and as discussed in several other threads which don’t answer my particular question), Blender does some funky things to bone roll angles when applying transformations, etc.

I started out with a single, nice, axis-aligned armature leg, duplicated it 3 times and then proceeded to rotate each leg to face a slightly different direction. Then, I set up IK rotation limits for each bone. Mostly, this consisted of blocking X and Y axis rotation and limiting Z axis rotation to a certain range. As long as the legs are individual armatures, all is fine and works as expected (I have tested and tweaked the rotation constraints using the character mesh):

http://www.advanced-thinking.de/animated-atrocities/files/pics/tmp/leg_orig.jpeg
A single leg before applying transformations. The dark blue arcs illustrate the z rotation limits of the 2 selected bones. All is fine in the world of Mr. BoneyLeg.

As soon as I join them together to form a single armature, or use the “Apply size and rotation” function on a single leg to simulate the “join” process, the bone roll angles get screwed up:

http://www.advanced-thinking.de/animated-atrocities/files/pics/tmp/leg_trans_applied.jpeg
A single leg after applying transformations. Notice the slightly corrupted bone roll angles.

Using CTRL+N to recalculate the bone roll angles doesn’t help much, either:

http://www.advanced-thinking.de/animated-atrocities/files/pics/tmp/leg_roll_recalc.jpeg
As you can see, the roll angles are even more messed up now (after using CTRL+N in editmode).

If I wouldn’t be using the spiffy new rotation constraint feature, I wouldn’t even be bothered by this. The CTRL+N function would orient the bones in a way that helps the IK constraint solving process, and I could simply switch to the “sticks” bone drawmode to avoid the ugliness of the (odd) bone rotations ;).

In combination with the rotation constraints however, this is quite messy and basically forces me to figure out the correct bone roll values by entering them manually yuck.

Is there another way to solve this problem and keep the original, non-transformed “look” of the armature legs (the bone roll values must be changed in some way to achieve this, as far as I understand)?

Join all your pieces into one Armature then flatten everything in Edit Mode (like a spider pressed against the floor nano-seconds before being squished), that’s your Rest Position. Goto Object mode and Ctrl-A, then back to Edit mode and Ctrl-N.

I’ve never built an Armature by duplicating parts and joining them and therefor suspect that this may well be where the problem arises.

%<

Thanks for your quick reply, Fligh (oooh, a rhyme…)!

Your suggestion makes sense, and I just tested it myself - the angles don’t get corrupted that way. My problem is: I designed the mesh and the armature in the contracted rest position you can see in the screenshots. Adapating the “flat” rest position you mentioned would require some serious re-modeling of the mesh, which is almost completely (UV) textured by now.

I remember some character rigging tutorial mentioning to build things like fingers, arms, etc. in a slightly contracted way, because it makes assigning vertex weights easier (you get to the correct deformation strength quicker). Maybe some day armature editing in Blender will be a bit more robust and simple (kind of reminds me of the time - a.k.a. “The Blender Dark Ages” - when adding/removing a single vertex destroyed all vertex group information in the mesh data). I think I’ll just avoid rotation constraints for this armature, and be more careful next time…

I also wonder how other 3D apps (Softimage XSI, Maya, etc.) take care of this pitfall (if they handle it at all…).

I fought with roll angles on a standard humanoid armature for months before I got my roll angles consistent (seemed to be a Mac OSX thing then though because others weren’t seeing the same angles I was on the same model!)

Here’s something I posted earlier as a result of my own troubles:

Manged to get some results by:
Aligning spine and leg bones with s-y-0 & arms with s-y-0
Then rotating model in side view edit mode so it lay on it’s back
Then in CTRL-A in Object mode
Then re-enter edit mode, rotate back to upright position.
CTRL-N- roll angles. Almost all bones behaving.

(I think that was everything I did)

Some bones 180deg out, some slightly rotated in NumPanel. Adjusting by setting numPanel figure to 0.00 did nothing for one toe bone until the toe, foot and leg bones were first aligned with s-x-0. This fixed it.

One bone remained 180deg rotated and had to be put in place manually to stop it twisting mesh.

Essentially it seems Blender (some versions at least) has a problem rolling the angles if the bone chain isn’t perfectly straight. But if the bones were added and manipulated from various viewports, their axes are all over the place and need recalculating. So, flattening them and recalculating them gets everything basically working together (even if you have to tweak one or two bones with the num panel) and from here you can probably put the bones back into your preferred positions with good results.

from here you can probably put the bones back into your preferred positions with good results.

Yes, exactly, you can change the Rest Position to a ‘contracted’ one once all your roll-angles are set.

%<