Display and manipulate local coordinates of child?

I would like to be able to manipulate the local coordinates of a child object (not its global coordinates). As far as I can tell, Blender only displays the global coordinates of a child object in the Transform menu.

Any help would be appreciated.

Why would someone want to do this? Here’s a couple of answers off of the top of my head:

  • Working in the rotational space of the parent object can simplify orientation of objects.
  • Animating and tweaking the curves of a character or object that is riding on a vehicle is significantly more easy to do if it is relative to the vehicle rather than the world.
  • The same goes for touching up the animation of an object being held in someone’s hand.

It is a technique I use heavily for complex animation and layout in Maya and I would love to be able to do the same thing in Blender.

1 Like

scratches head With 2.56a I’m seeing local coords in the transform panel in object mode with the child object selected; in edit mode I can toggle between local & global with a vertex selected.

EDIT: and seeing the same under 2.49b

EDIT 2nd: Perhaps you’re wanting to work in the local coordinate system of the parent object, and I’m just dense?

To clarify, I’m trying to get this to work in Object mode. I want to work in the local coordinate system which should be defined by the parent object. As far as I can tell, I am only see the local coordinates for a child object as if its entire world had been combined with the parent, not its local coordinates as though the parent is the new origin (how I’m used to seeing local vs. world working).

However, i don’t seem to understand how Blender deals with local vs. global coordinates. If it were displaying local coordinates and I were to parent an object to another, I would expect the coordinates on the child to update to show its new coordinate space. But they don’t change from the world space.

The odd thing, and why it seems I don’t get what Blender is doing, if I move the parent object, the child object’s coordinates don’t change unless I remove parent and keep transforms.

So, does Blender display “local” coordinates as if the whole world has been parented? If so, it’s not really local, but a weird local/global hybrid.
Is there a way to emulate how Maya (amongst others) view world/local space, where the parent object is the new world origin (or center)?

Ah! Blender uses “local coordinates” as the frame of reference carried by the object itself before any transforms. http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/Coordinate_Spaces_in_Blender#Coordinates_of_child_objects might make it clearer.

Let me try a couple of things and see if there’s a quick way to reference a child by the parent’s local coordinate system …

EDIT: Oi! Now I see what you’re talking about; the numbers in the transform panel aren’t behaving as expected. It’s well into my night here, but I’ll look into it more tomorrow.

Apologies. I should have noted the version as well. I am working on OSX and 2.56a.

Thank you for trying to help. I appreciate it.

Ok. So I went back to 2.49 to double check that it wasn’t a bug. It doesn’t seem to be (at least from Blender’s perspective). Ideally, I’d be able to parent an object to another, and then be able to ‘zero’ it out (setting all transform values to 0) in order for two objects to share not only their transform, but rotation (and scale if necessary). It’s particularly handy for complex animations without needing to resort to layered animation curves or complex constraint setups.

Perhaps if I put it into a bug format it might make it clearer for anyone else looking in here:

Description of problem: When parenting an object to another, the child’s transform info in the Transform window gives the world numerical values of the child’s position, rotation and scale at the time of parenting. Further, these values don’t change when transforming the parent object (position, rotate, scale), retaining the values of original world values, now representing a combined offset from the parent and world centers.

Expected: On parenting, the values in the transform window should update to show the child’s transform properties relative to its new space (the parent).

Actually, as I look at it, the “Child of” constraint works like what I’m talking about. The value of the transform window reflects the relationship to the parent even though it still exists in world space. I believe that logically these two states should be reversed.

Expected: On parenting, the values in the transform window should update to show the child’s transform properties relative to its new space (the parent).

I can only look at this in extremely simple ways.

When parent objects move, child objects are moved along, but DON’T move themselves. Therefore their local coordinates shouldn’t change either.

When a parent object rotates 90 degrees, the child’s rotation remains unchanged, because it didn’t rotate itself. The child’s final rotation is it’s local rotation + parent’s rotation.

You are correct that they shouldn’t change when the parent moves. However, they are no longer located in the world space, so the world values no longer retain any meaning. These values are now in relation to the parent. The values presented as they are now only reflect where the child was when it was parented.

By your reasoning, what do these transform values represent? They no longer represent world space as they don’t update when the parent moves. Nor do they represent local space, as the local space origin is now the at the parent’s center.

Try using the ‘Child of Constraint’. This behaves as a child normal parent child relationship should be expected to behave. That is, the values represent the offset from the parent’s child. However, even this is flawed, as the values no longer represent the world space that the object resides in.

Think of it like this. World space represents the universe and 0, 0, 0 represents the center of the universe. Say someone sitting on a chair resides on Earth. You can look at its location in terms of the universe (which would be fine, and constantly moving as the Earth hurdles through space). Such a value would be measured in astronomical units to scientific notation. Or, you can look at their location in terms of a parent object such as where they are on Earth (longitude, latitude, and height). A much smaller value. Or where they are in the house. Or as a child of the chair itself. But you wouldn’t revert back to an astronomical unit based on where the Earth was when they sat down.

I see there’s a Local and Global button in edit mode, but none in object mode. Is there not a way to see Global or Local space in object mode of a child?

Please someone correct me as to the usefulness of these numbers, but as far as I can tell, the transform numbers of a child ONLY represent its offset from the origin on parenting and nothing more. I haven’t used Max before so maybe it uses a child/parent relationship like this, but I can say out of a number of other 3D software programs I’ve used, none of them have worked like this.

Ultimately, they aren’t a representation of Global OR Local space. So what is the reasoning behind this? I think understanding what’s going on here would really help me transition to Blender more smoothly.

1 Like

After testing several things in Blender, I think I see where the values in the transform location come from. Bear with me through the description.

Create two objects, arbitrarily move, rotate and scale both in object mode. Select the first object. Transform location shows the coordinates in the current world (global) 3D frame of reference. Parent it to the second. The location values don’t change, but the current reference frame is saved with the parenting info as the local parenting frame (not the same as the local parent’s frame). Take note of the second object’s location, rotation and scale then arbitrarily change them. The first object obligingly comes along. Select the first object; the transform location hasn’t changed (it’s in the local parenting frame reference, which moved with the parent). Change one of the location values and the first object moves – in terms of the parenting’s local frame of reference, not the local frames of either child or parent nor in the global frame. You can restore the second object’s location, rotation and scale to confirm this.

Changing the location of the parent moves it in global space, not its local space.

Think of it as a hierarchy of frames of reference. At the top is global space, then the parent’s local frame, the the parenting local frame, then the child’s local frame.

With that, it’s apparent what the values in the transform location are – they’re the coordinates in the next higher frame of reference relative to the selected object. (Now, how to distill that down to make it a note in the manual wiki …)

I think there were two points of confusion. First, there’s that extra frame of reference for the parenting link. Second, the actual origin (0,0,0) of a local frame of reference isn’t necessarily what Blender refers to as the origin of the object. Before 2.5, Blender used the term center instead of origin, but neither really fits.

That still doesn’t help with manipulating the child in terms of the parent’s local space, though.

1 Like

Thank you. Yes. I agree with your diagnosis on Blender, even if I don’t believe it is a logical method of thinking of local vs. global space.

Perhaps a bit of my background may be useful (or not). I am a layout and matchmove artist by trade. A good deal of my professional career has been based on understanding how the parent child relationship works and ‘manipulating it for profit’, if you will. That is, I understand a good deal of how parent child relationships in heirarchies work in other software (Maya, Motion Builder, Zeno, etc). Even though I understand what is going on, I still don’t understand why Blender treats the heirarchies and their associated transform values like this.

Let me put our findings in different words and see if you agree:

  • When you parent one object to another, the transform values reflect where that child object was in space at the time of parenting. They do not (directly) represent an object’s offset from its new origin (now the center of the parent), even though it no longer resides in world space but instead in a local space base on its parent. It is essentially a snapshot of where the object was at the time of parenting.
  • When you use the “Child of” constraint, the transform values of the child object now represent the offset of the child from the parent object. Zeroing out it’s transform attributes will match the child’s transforms to that of its parent’s, even though it still exists in world space.

Logically, this is completely backwards. It seems as though the transform values are almost entirely arbitrary as to where an object is in the heirarchy or whether it has a constraint on it. Transform values should be an accurate representation of where an object is, either in local or global space. These values, with true parenting or “child of” constraint, are currently neither.

  • When creating a “Child of” constraint, you are not changing a child object’s position in the world heirarchy, where it is in realtion to the parent object (as far as transform values go) is meaningless outside of offset values inherent to the constraint alone. Therefore, its transform values should not change their meaning either.
  • When parenting an object to another, its definition of space HAS changed, so the transform values have a different meaning now. 0, 0, 0 should now represent the new center of the child object: the center of its parent. Or, the very least it should still represent Global space. Not ideal, but it would at least remain consistant. Currently, it is a relative snapshot taken at the time of parenting, rather than holding any true meaning to its position in the heirarchy.

Ultimately, I have a feeling that I’m about 10 years too late to bring up this and Blender will always have an awkward way of dealing with Global and Local space. Otherwise, redoing this would take a major update for everyone who has been using it in production…

Either that or maybe someone with some super programming chops may be interested in writing an updated transform window… :smiley:

Again I can only see and explain things in a very very simplistic way. But maybe this helps me to understand these kind of functions.

When parenting an object to another, its definition of space HAS changed, so the transform values have a different meaning now.
I like to see parenting as a parent holding his child with a retractable leash (around the torso to keep it child friendly). The moment the child is parented, there is NO change in position and location; since transform properties show the movement done by the child alone, this shouldn’t change with parenting. Wherever the parent goes, the child is DRAGGED along (no change in transform). Wherever the child wishes to go, the parent will give it all the leash it needs.

With parenting, the child’s point of origin is dragged along. But never changed in relation to the child. It would cause problems with other transform tools (try to rotate or scale with an offset point of origin).

I could be complete wrong, or totally missing your point. But this simple way of thinking helps me to understand it :wink:

A question for Kdad: what problems is Blender’s implementation of this feature causing in your work? Coming to Blender from Cinema 4D, I see exactly what you’re saying. But since the parenting feature does work, is the initial world offset of child a big problem in what transforms you apply later? I’m only getting started with Blender, so I haven’t played with it enough to find this out myself.

First off, as I realize I may come off a little touchy about this, I want to say I really enjoy working with Blender, and really appreciate everyone trying to help. Thank you.

Correct, parenting and animating the parent does transform an object as expected. However, the offset values in the transform window make it difficult/impossible (without having to do math) to fully understand the relationship to a parent. Actually, they don’t represent the relationship to the parent at all (at least without having to backtrack through the heirarchy and offset all the values). Except in the constraint, which is totally bizarre, since they should represent where the object is, not where it is in relation to the parent, those are offset values to be adjusted in the constraint settings since the object’s position in space hasn’t changed.

I believe my problem is thinking that Blender shows us what the local space of an object is in relation to its own origin and center. Instead it is always thinking in terms of an object’s UNIVERSE. So when you parent an object to another, you have parented its entire universe. Again, it’d be like knowing where everyone was based on their placement in the universe (not just on Earth) at the time of their birth. These kinds of numbers are not useful to humans.

The problem is that the numbers are completely illogical. They don’t represent the offset from the parent in a parent/child relationship. And they don’t represent an object’s position in their specific local space. This in turn makes it difficult to operate and fully take advantage of what these tools are capable of doing.

For instance, a common technique I use for creating a variant on camera animation for a matchmoved shot is far more complex with this awkward way of working. This method is particularly handy when notes come back on where to adjust the camera:

  • Parent a new camera to the original animated camera.
  • Zero it out (not easily or accurately done) so that it is now functionally identical with the matchmoved/animated camera
  • Now you are free to animate the camera (Pan and zoom) without breaking the matchmove to alter the shot based on notes, while retaining the original animation on another channel. You can also see EXACTLY what the difference from the original is, often important when telling others what you’ve done. Instead those numbers represent some offset snapshot of where the camera was when you first parented it.

Or, if I’m working in a particularly large scene and want to animated someone parented to a vehicle and parent them when the vehicle is a large distance from the origin of global space, those numbers then become increasingly abstract.

I’m sure there are a number of workarounds to this particular problem, I’ve even figured out one that involves parenting an object to an empty at the origin and then parenting the empty. However, this methodology works very well for many types of animation offsets, and only really works well if the numbers accurately represent and translate for a human what space an object is in. That is some of the most important information available for doing precise, technical animations.

As I’ve said, I have never seen a program use parent/childs like this. Does Max? That’s the only other major software I’m not familiar enough with to compare it to and perhaps what they based their work on when setting it up this way…

In my opinion it is this sort of thing that continues to make my professional colleagues roll their eyes and say “Blender is just a toy” when I tell them I’m really enjoying using Blender. I think it will likely be one of a thousand tiny cuts that continue to keep Blender from being picked up by any major VFX houses without them having to mod it out with their own R&D team. In other words, this ‘feature’ would prevent me from considering to use it professionally (though I will continue to use it as a hobby).

Don’t get me wrong. I’m loving using Blender, know and have seen first hand that you can do amazing things with it, and find that I myself using Maya as if it were Blender at times, but man do I wish this was different.

1 Like

I think the workaround you’re looking for is the ability to set the world grid zero position (“0,0,0”) to the position of the object that will be the parent. Then your child object’s offset from parent will equal it’s world offset. I’m too inexperienced in Blender to know if this is achievable, hopefully one of the gurus will step in to explain.

1 Like

That is correct. I am looking for a way to use the transform values as though the parent object were the new world space (which it is) and have the numbers reflect that information, so 0,0,0 is the center of the parent object.

Again, the simple abilities this allows for complex technical animations (and polishing them) without the need of constraints is EXTREMELY useful.

From my limited expirements, I believe that it is possible by creating an additional node between the parent and child, but it is a very hacky work around.

1 Like

This is a really old topic but I have encountered the same issue and spent some time to understanding.
So, in actual versions of blender ~3.0.0 the key point is Parent Inverse Matrix which is used to avoid child coordinates changes on parenting. Exhaustive info can be found in docs https://docs.blender.org/manual/en/latest/scene_layout/object/editing/parent.html

1 Like