About local space in action constraint

As you can see the picture below, if you change the rotation value by rotating the parent object (box), the rotation value of the child object (monkey) is retained. Child objects have their own local coordinate system, depending on the parent axis of the coordinates.

But today I found something strange when I tested the action constraint. To control the action, I have targeted a bone connected to the IK bone and set the action constraint’s space option to local.

At first I thought this setting would not work properly. Because the value of the target bone is always connected to IK bone and has a rotation value of zero, like child objects that depend on the parent object. But unexpectedly, this setting worked just like the GIF below.

When I test the root bone by rotating it, the local space works well.

Why does the action constraint’s local space option work correctly when the rotation value of the target bone doesn’t change? I want to solve this problem and understand Blender’s coordinate space clearly.

Here, I also attach the blend file I used for the test.
Action Constraint Test.blend (84.0 KB)

Thank you in advance.

Are you scrubbing your timeline with the action in the action editor? If so, that action will play which is what I think you are looking at. Can’t really tell how you are animating the test. To test it, animate the control and put that in the action editor and play it. then move your root bone and then switch your space and play it again. I think you will see the difference.

In my tests, actions do not have multiple users.
One action is assigned to the action constraint, and another action is assigned to the target armature to ensure that the action constraint works.
What I’m wondering is how the action constraint’s local space option works correctly, even though the rotation of the IK chain bone, the target bone, is zero.

Local space doesn’t necessarily mean that the bone is explicitly animated - it is simply the rotation of the bone relative to its parent. Pose space does what you thought local space did - it only takes into account the transforms explicitly made by the user (as far as I understand it).

Okay, your explanation is easy to understand.
To summarize, Blender’s transformation of the bone moving by constraint is not directly visible in the N panel of the 3D-View window or the bone tab of the Properties window, but it is changing internally.
So, do you know how I can check the transform values that are computed internally in Blender?

You can use the mathutils and math with matrix function to return the values in python.


Depends on what you actually want for the matrix.
You can post in the python support section in coding and I’m sure they will help you once you clarify what you need.

Sunghoon-Jung, yes, I think this is what happens. It is also good to remember the order of transformation in Blender : translate, then rotate, then scale. It cannot be changed (unlike in XSI) and it means that rotating a bone or an object does not change its local translate axes, and moving it along one axis after rotating along another will move it along the untransformed axis. In Maya it’s called the “parent” orientation, in Blender you can check for this using the “gimbal” orientation.

stilltrying, thanks mate, I’ll use this too. :slight_smile: