Transformations, deltas and offsets

A while ago, there was a thread in bf-committers about parenting offsets and whatnot. I was thinking about this tonight and it got me wondering: if we exposed the offset to the user, could we rethink how applying transforms works? When you apply location, for example, blender moves the origin of the object to the world origin and just moves the mesh data where you expect it. However, when you try to rotate or scale the object from there, it defaults to moving from the origin, which then makes it difficult to further transform without the cursor or resetting the origin.

My issue with this is that it moves the origin back to world origin. Honestly, this bugs the hell out of me. If I want to move the origin, I’ll do that manually.

I am proposing we expose the offset to the user in a way that is separate from the object’s transforms. Perhaps it can be in a collapsible panel directly under the transforms and labeled “Offset from Parent” to differentiate, or perhaps under “Relations” with the parent selector. The way I see this functioning is always relative to its parent object (or in the case of no parent, the world/scene), hence putting it under “Relations.”

This differs from delta transforms because delta transforms are relative to the object’s current position, not to its parent. While they can both be used to the same ends, the purposes and underlying math are fundamentally different. The values would be non-keyable and lockable. I’m not entirely sure how rotation offset would work, since this is based on the parent, not local space. Delta rotations already follow the mode of normal transforms (ie quats or eulers), so perhaps it could function similarly.

I hope to start a discussion with this. What are your thoughts? If this is technically unfeasible or impratical, why? If you think it should be implemented, do you have any suggestions to make it better?

Hi, I second this! I would also like to see some discussion on this.
The projects I use Blender in need (millimiter) precise positioning, while using parenting. The non-transperant way that Blender handles offsets/origins/location with parenting has always made it prone to errors when working with coordinates. And the way Alt-G and Alt-O work.

In fact, I don’t completely understand what the “Location” values in the “Transform” panel mean. It is certainly not “Location of the object” as the tooltip says. It seems to be the offset from the parent minus the location of the parent at the time of creating the parent relationship. Or can someone explain it better? Why does it depend on the timing of creating the parent relationship??

An arbitrary example to show what I mean:

  1. go into top view
  2. move the default cube up (in Y) 5 units --> the “Location” will be = [0;5;0]
  3. Make another cube and move it to the right 8 units and up 1 unit --> Location = [8;1;0]
  4. Parent the second cube to the first cube. The “location” of the second cube remains the same with 8;1;0. This is however neither it’s offset from its parent, nor its location in world coordinates!
  5. Move the FIRST (parent) cube 3 units downwards to [0;2;0]. The “location” of the second cube will still say = [8;1;0]. It’s real location in world coordinates is however [8;-2;0] and in the coordinate system of its parent (ie: offset from parent) will be [8;-4;0].
    –> That means, once the parent has been moved, the “Location” of the child object does not mean anything, it seems to be an offset from an arbitrary point in space.
  6. For more fun: clear the origin (Alt-O) and clear tranform (Alt-G) of the second cube. It jumps to [-8;1;0] and reads “Location=[0;0;0]” ???

I would find it VERY helpful to add a panel with the absolute (world) coordinates and another one with parent coordinates (offset from parent). These could be called “Location”. The old Location panel schould be called “delta transform” or similar.

one thing for the delta transform
this is normally use with animation

and in general you don’t use it to move object

now in object mode you always see the Loc Rot Scale as their Global values
to see local values you need to go into Edit mode!

adding the parent constraint means that the child will follow the parent in a certain way
if you want to understand better how it does that read magazine #31 if I remember well on animation

happy bl