0
$\begingroup$

I have a body-neck-head rig that looks like this with no pose:

Neutral pose, no rotation

Being a child, the neck should rotate with the body. This works by default when rotating the body bone:

Body rotated on X axis

However, the neck should also be able to turn on its Z axis independently of the body. This works if the body is only rotated on its Z axis:

Body and neck independent Z rotation

But it gets messed up when I Z rotate the neck if the body has been X or Y rotated:

Body rotated on X, neck rotated on Z not relative to body

As you can see, the neck's Z rotation is not relative to the body. It's relative to something else (I don't know what). This isn't for a humanoid rig but a machine, so the neck should never change relative to the body's X and Y, but should be able to rotate a full 360 on its own Z. How can I make the neck match the body's X and Y rotation but still Z rotate on its own axis?

I've tried tons of different bone constraint combinations but nothing makes sense, the neck's Z rotation somehow becomes tied to its Y axis. It became a confusing mess.

$\endgroup$
2
  • $\begingroup$ you need to rotate the neck relativly to itself (whatever parent bone rotation is), use local coordinates and turn on axis visibility for a better understanding of bone axis. $\endgroup$
    – lemon
    Dec 7 '21 at 18:47
  • $\begingroup$ @lemon How do I do those things? I tried changing the Orientation setting to Local in the Rotate menu, and while that changed the end result it still didn't do what I expected. How do I turn on axis visibility for a specific object? $\endgroup$ Dec 7 '21 at 18:54
1
$\begingroup$

First of all, activate axis visibility. This is not mandatory but will help to see how bones axis are.

enter image description here

Thanks to that, we can see that Y is the bone axis (between head and tail).

So to rotate around the neck (second bone in this example), you can R then YY (Y twice) as that will design local Y as rotation axis.

enter image description here

In the gif above, you'll see the green line displayed horizontaly when Y key is hit (first Y for global axis), then along the bone axis when Y key is hit a second time (second Y for local axis).

If you want to allow only rotations around Y, you can use a "Limit rotation" constraint, with X and Z checked, and "owner" set to "local space".

enter image description here

$\endgroup$
2
  • $\begingroup$ Thank you for the wonderful explanation! Any idea how to set this up with bone constraints, so that the only possible way for the neck bone never loses its position relative to the body but can still rotate on its local Y axis? Basically, I don't want to allow for accidental bad rotations. $\endgroup$ Dec 7 '21 at 19:46
  • $\begingroup$ In Pose mode, open the sidebar. Select the Item tab. Next to each Rotation Value there is an Icon that looks like an unlocked lock. Click the Icons next to the X and Z rotation values. Now you can only rotate on the Y axis in the 3D viewport. There's no way to prevent someone from manually typing a value into the input slots, but animators never do that. $\endgroup$ Dec 7 '21 at 20:22
1
$\begingroup$

By default, Blender uses Global transform orientation for everything. Which means that the X Y and Z axes used for any transforms are those of the scene World:

Global

What you need here is to switch to the active bone's axis, which is accessed by setting the transform orientation to Local:

Local

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.