3
$\begingroup$

I am creating a wall section which will be a wall with a hole and in the hole's place a couple of doors and so on.

For ease of putting things in place I first create an empty node. Then add a wall and doors as children of the empty node. If I relocate the empty node, the meshes of the wall and doors follow along.

What bugs me is I want to locate the doors and wall relative to the location of the parent, empty node. How do I do this? It seems that even though an object has a parent node, the Location in X/Y/Z is specified in the global world. It would be easier to specify this relative to the parent node. So with a pair of doors I could just set something like X: -0.5 for the left door and the right door would get 0.5. Is there any way?

$\endgroup$
  • $\begingroup$ Note: I guess I should use tag "parenting", as "groups" seems to be a different thing in Blender. However no parenting tag exists. $\endgroup$ – Jonny Aug 22 '14 at 8:55
  • $\begingroup$ Try using animation drivers $\endgroup$ – someonewithpc Aug 22 '14 at 12:20
  • $\begingroup$ Try switching the translate mode of the child objects to local instead of global. $\endgroup$ – Samir Rahamtalla Aug 23 '14 at 7:49
7
$\begingroup$

A child always lives in the local space of its parent. You can easily check that by noting the current coordinates of a child that show up in the properties panel ("N"), moving the parent, and then comparing the new coordinates of the child with the first set. They shouldn't have changed, i.e. they can't be global).

At the time of parenting, the child object takes note of the parent's current state (location, rotation, scale) and stores it in child_object.matrix_parent_inverse. Blender applies this correction matrix to the parent's origin before calculating the child's effective global coordinates. (As it is the inverse of the original parent's matrix, it will "negate" the effect the parent had at the time of parenting, thus seemingly keeping the child in the global coordinate system.) Here is a nice official description: http://wiki.blender.org/index.php/User:Pepribal/Ref/Appendices/ParentInverse

Or if you prefer it mathematically (at least this is how I interpret blender's behavior):

parent.matrix_world * child.matrix_parent_inverse * child.matrix_local

(where parent.matrix_world can of course be influenced by other parents and such).

Now to get rid of the correction matrix, and to be able to place your doors at x = +-0.5 of the parent, simply select the children in question, press "alt+p" and select "Clear parent inverse" (Or in the 3D View, go to "Object"->"Parent"->"Clear parent inverse"). This will set the matrix_parent_inverse to the identity matrix and place the children in the parent's coordinate system according to the children's local coordinates. (You could get the same effect by parenting while the parent is still at the origin with no rotation and scale==1.)

$\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.