Bones orientation

(aws357) #1

:mad: I am having a hard time building a small ludwig-like rig for my knight in shining armor…

I can’t manage to have the roll angle as I want it to be… With z-axis up…

Each time I press ctrl+N, the resulting roll is quite funky…

I tried without parents to the bone. Same stuff… z-axis wander a bit everywhere.

:mad: Is there a way to set this manually? Or am I condemned to have funky roll angle?

And yes, I am working on the hand bones… that’s why having the z-axis up would be interesting…

:no: I can’t imagine Blender not having something to solve this issue except the ctrl+N…

(Mike_S) #2

Create your armature from the top viewport and the default Z-axis WILL be “up”.

Otherwise switch to Object mode, press ALT-R to clear rotations, when you go back to EDIT mode Z will be “up”.


(aws357) #3

:confused:eh… yes… Any solution for one bone inside a whole armature?

(sketchy) #4

I believe that if you select the bone (in edit mode) and press the “n” key that you can manually change the roll angles.

I haven’t done it in awhile, so that might be wrong. But what you’re trying to do is possible.

(Calvin) #5

Yes you sure can!

You can go to object mode, select the armature and hit Ctrl+A and “apply scale/rotation.” This will set the armature in the correction rotation.

(Mike_S) #6

I thought that CTR-A sets the “preferred angle” (to borrow some MayaSpeak), i.e what the armature will return to on ALT-R (or POSE rest position). That may not necesarily be “up” for Z (I assume aws357 was referring to the Global Z axis for up).

What does CTR-N do (in edit mode) ?


(Calvin) #7

Well if you want the current armature rotation (local rotation) to be global, you need to apply that local rotation and make it real. THats that Ctrl+A does in object mode.

So instead of going through the trouble of clearing the rotation in object mode and rotating your bones to correct angle in edit mode, you can simply apply the rotation.

(Dang, I think I am missing something, nevermind… will take a look when I get home, have to go to class)

(Vertex Pusher) #8

Well I guess I may have a little something to contribute to this … but I have been trying to learn the armature system in depth for the past few months and this particular issue came up with a complicated rig I was working with … and I basically “discovered” that you really shouldn’t have any other axis other then the Y as the “up” axis . And precisely because the bone roll angle issue .

It seems that despite how the view ports are configured (with the Z as the “up” axis) the default “up” axis is the Y … for everything … This is a bit annoying but if you have, like me, configured Blender to start with the front view open and have the Transform Properties window always open, you will see that everything when created in the front view is actually rotated 90 degrees along the X axis once you tab into Object Mode and that you need to Ctrl-A all objects so created (I guess Blender “out of the box” has the top view open ? … it’s been a while so I can’t remember …) . This isn’t all that important for most things but for the armature system this does create a problem - bone roll values that you don’t want .

Just as a simple test : Open up Blender and add an armature in the front view . Grab the tip and move it to a corner of the grid so that it is angled 45 degrees . Tab into Object mode . Open up the Transform Properties window . You will notice that your armature is rotated 90 degrees along the X axis . So … Ctrl-A the armature to have it’s “up” axis as Z … And suddenly you will see the bone rotate along its roll axis . Tab back into Edit Mode, select the entire bone and Ctrl-N to recalculate the bone roll angles … the bone will rotate back to the way it was … but with a change in its roll value (-45 or 45 depending on which way it is angled) …
Now repeat the above but this time create the armature in top view … And you will realize that despite being angle at 45 degrees to the view like above no roll value … not even after recalculating the bone roll angles (Ctrl-N) …

Now I am assuming that this occurs because the Y axis is the one used to calculate the bone’s roll … and that if you have anything other then the Y as the “up” axis the roll values get screwed up because now the roll axis (Y) is tangent to the up axis instead of being the up axis . Just turn on “Draw Axes” and look at what the “up” axis is for an individual bone is … the Y .

And just another bit of proof … The really great new “limit” constraints (loc,rot and scale) added in the last release … Try and apply the limit rotation constraint to the first armature (the one with Z up and rotation applied) . Now turn LimitX on with no min or max values and do not turn on the “local” co-ordinate space … it will fall flat along the Y axis as if created in the top view … This is occurring because despite the fact that you have applied the 90 degree rotation along the X axis to the object, the constraint is enforcing the global up axis … which is … the Y .

Now the only work around that I could come up with was to create an empty and parent a Y up armature to it then rotate the empty 90 degrees to be able to use the Z up view ports and also making sure the mesh also had the proper orientation as the armature . This prevents me from accidentally applying the rotation to the armature and I can use the numbpad hotkeys to navigate the views …
… Else you could just clear the roll values manually if you insist on having the Z as the up axis … though you won’t be able to get rid of the rotation that is caused by being tangent to the Y axis without odd roll values …

Sorry for the long winded response, but this has been bugging me for a while … Hopefully with the refactoring for v2.5 later this year there will be an option as to which axis will be the “up” axis with regards to the various views …

(Calvin) #9

Whereever the tip is pointing at is up and the Y axis. If you want to change that you need to Rotate the armature object 90 degrees along X global.

(Mike_S) #10

Ah, well there’s the problem, you and I have different ideas on what “up” means :slight_smile:

If I have a front or side view open, I consider “up” to be in the vertical direction towards the top of the screen (global up). Which is the Z axis.

For a bone it gets more confusing, with a bone created in the top view, I think of the bone as lying on it’s “side”

I don’t know what Aws357considers to be “up”, so it’s no wonder why we might all be giving different advice to what we consider “up” :smiley:


(Vertex Pusher) #11

@ Calvin : But that’s not true . Once you Ctrl-A an armature in the front view the up axis becomes the Z (the view port up) up axis … yes according to a bone’s local axis the Y will be up . But the armature as whole has Z as the up axis and hence Aws357’s problems . As I explained above once you have the Z as the up axis for the armature unwanted bone roll values occur because the bones are tangent to the Y axis used to calculate the roll …

This is not that big a deal … the Z up view ports don’t align to the fact that Y is the global up axis and the default up for all objects created … either just don’t apply the global Z up rotation or parent the armature (or for that matter your entire scene) to an empty and rotate the empty to align to the Z up view ports …

@ Mike_S :

I can’t manage to have the roll angle as I want it to be… With z-axis up…

(Calvin) #12

You’re right, Vertex Pusher. I don’t know what I was thinking, you cannot correct the local axis of bone, at least not the Y axis.

Whichever direction the tip is pointing at is Y, hence up.
Using roll you can switch the X and Z axis, since you roll along Y axis