The Most Simple Bone Question Never Answered

Hello,

I have a question, and possibly even a challenge to you blenderers. First is the question:

Is it possible to “apply” a bone roll at any arbitrary angle? Say I have a bone roll at a 45 degree angle, I want the bone to stay at that position but set the bone roll to 0. Seems simple enough, right? WRONG. (seemingly)

Ok, if there is not a simple blender function to apply bone roll, then the challenge is to figure out a way to do this. Is this possible through scripting? Any suggestions are much appreciated.

thanks

surely you can rotate it in edit mode?

Why do you want to do that?

Let me explain a bit more. I have two sets of animations for two different skeletons, and I want to make all the animations compatible with both skeletons. Problem is, one of the skeletons has bone rolls that are not zeroed. So the animations work for that skeleton, but because the animations were created with messed up bone rolls they wont work on the other skeleton with correct bone rolls. And listen, I cannot just redo the animations or start from scratch here, OK? Wish I could, but we´re talking about a lot of complicated animations.

Now, if I can just get blender to zero out the bone roll (think ‘apply bone roll’ like you would ‘apply scale’), despite the fact that the rolls are all messed up, I think the data can be copied to another skeleton with proper bone rolls with no problem.

One thousand thanks.

Select all bones in pose mode and Ctrl-A - Apply as rest pose.

Apply as rest pose does not affect bone roll.

Here in the first screen shot is the upper arm of a rig in the normal rest pose in edit mode. I entered pose mode, r-key to rotate, y-key, y-key to rotate along the local y-axis a negative -90, then from the pose menu -> apply -> current pose as rest pose. Then entering edit mode as in the 2nd screen shot, the bone’s roll angle is now -90…

Randy



I understand. Hope you can figure it out as it would be good to know.

Thanks Randy, but I think you’re not understanding me. Ok lets take your example, where you have the 90 bone roll. Suppose you want to keep that exact position of the bone, but reset the bone roll to 0.0. How is this possible? If I set bone Roll to 0.0, then the arm rotates, but I don’t want this, I want the bone to stay in the exact position. I only want the bone Roll to reset.

Zero out bone roll, while bone remains unaffected – this is what I want. Any suggestions, or is this simple action impossible?

Hi! I think (tho dont quote me on this) that the only way may be to Apply Pose when in pose-mode [Pose -> Apply -> Apply pose as rest pose] - tho it will of course zero-out all other transforms on the bone, too which, if i understand, you may be trying to avoid. So not sure if that helps :0/

Nope, Apply Pose simply does not affect bone roll.

Well it writes the bank value in pose mode to bone roll. You’d want it to 0 the bone roll. And it won’t do that because it is writing the bank value there (Z direction). You can test this by changing the angle in pose mode and applying it.

Sorry I don’t have a solution. I have just been looking at it here and there when I get time. Might there be another solution other than bone roll?

So let me get this straight, if a bone roll of 0 degrees has the z-axis pointing upwards, you want to adjust the bone so the z-axis points in another direction (downwards, forwards, or backwards) and have the bone roll still be 0 degrees? Don’t think it’s possible at all to rotate a bone on it’s y-axis and reset to roll angle to 0. After all, in edit mode you can rotate a bone on it’s x & z-axis, but not the y-axis, the y-axis is the bone roll angle and I see no way of resetting it. If you have an armature with actions and want 2 meshes to be controlled by those actions, then really I think the better way would be to use the same armature with both meshes…

Randy

You mean “Recalculate bone roll angles”? That’s Ctrl-N.

Sounds like the easist thing to do is write a Python script to copy the roll property(Python: EditBone.roll) from the one skeleton to the other.