How are object hierarchies typically handled?
The object hierarchy in a 3d modeler or game engine normally consists of treelike structured “stacks” of matrices. As every object in a such a scene tree has such a matrix and everyone is interpreted to be relative to its parent, each matrix is operating in its parents space. We can multiply the matrices to get the final transform for calculating final positions for vertices of a child. Eg setting a child to position to 0,0,0 aligns its origin position with its parent, the same is alignments are possible for rotation and scale. It’s as easy as it sounds, its common among these tools, so its known by the people it’s transparent on what are the influences and the way its designed is aligned to the math behind it.
Now what does blender do?
First, it seems to have the ideology that its somehow benefitial to present everything in worldcoordinates.
When we create a parent child relationship, then Blender takes not just the parents matrix and the childs matrix and multiplies that. It puts a third one in between. The parent inverse matrix. That one is the inverse of all combination of all the transforms the parent would have used. Lets say we have tree levels a cube0 existing at the rootlevel of the scene. Then a cube1 that is a child of cube0 and a cube2 that is a child of cube1. So we have something like a grandfather, father and child. The parentinverse matrix of cube2 is then set to be the inverse of the multiplication of cube0 and cube1 matrices.
If this matrix called parentinverse is not “cleared” it makes all their transform changes undone. So the coordinates of the child (cube2) are now also treated as if they were world coords. So blender does not have to transform any values of that child transform. It’s finished here
One might think thats a good idea to have just world coords. But there are many bad consequences embedded in this solution and that is also the reason why so many people are confused about it.
- It’s invisible. I don’t know what state it has. How shall I work with that? Sometimes it has an influence sometimes not. There is no indicator if an object has been transformed to act in worldcoords. So I cant trust the values presented in the child object transform any longer. It could be anything.
- It’s different to a defacto standard out there. So why is it different?
We are all able to think in terms of parent and child coordinates. And those who are not need some minutes to get it explained but then it’s transparent to the user.
- And there is no consistent usage of the parent inverse in blender itself. The eyedropper of the parent in relations is different to the effect in the outliner on the parentinverse.
- Blender isn’t used on its own. Many people use alot of accompanying tools to get their work done. Other modeling tools, sculpting tools, texturing tools, unwrappers and more. Many of these support hierarchies and blender should align with that.
- It’s uncommon and intransparent handled and so leads to confusion among the users.
- And why does a “change” from Relations->ParentType : Object to Object have an effect on the position?
When I use the context menu I don’t even get the three options and the dialog popping up the keep transforms seems to have no effect and does not include the three options in total.
What I find most frustrating with this, that if want to change that to local coordinates then (keep transform) is no longer a supported idea.
There are three optioninal ways for parenting ( Object, Object (Keep Transform) and Object(Without Inverse) ) And in the clear parent group theres a way to clear the parent inverse. But none of the combinations for adding a parentship allows us to get the values of the child set to local space (what is done by clearing the inverse_parent) AND update the childs transform in the form that the position that the child has in space stays intact. So if we decide to clear that parent inverse we are facing a solution that destroys positional information of our sceneobjects. Fixes have to be done manually. And that with every object that gets added again.
Maybe these things haven’t been that important for you in the past. But the new outliner, collections, drag and drop hierarchy creations etc and a big ecosystem of 3dtools that you are part of and I know no other tool that does handle coordintes this way, should make you reconsider this. Please simply let that worldcoord thing fade inside blenders hierarchy concept. Make it optional in the preferences. Embed a view mode to change the presentation between local and global. But don’t leave it like that.
Could one of the devs please confirm that this is seen by you too and will be addressed in the near future? Please don’t ignore us with this.