Take a scene with 3 objects: 1 armature (translated), 1 cube (translated, rotated and scaled) and Suzanne (not transformed:
1) Parent Suzanne "without Inverse" to the cube so that it gets perfectly aligned within the cube:
2) Clear Suzanne's parenting with "Clear and Keep Transformation":
3) Now parent Suzanne to the armature with "Object without Inverse". Suzanne snaps to the armature as expected:
4) Undo the last parenting and parent Suzanne again but now with "Object" and then "Clear Parent Inverse". Instead of snapping directly to the armature, Suzanne now gets an offset:
Why doesn't Suzanne end up with the same transformations as under point 3 ?
File is here.
This is one of the reasons you want to have your armature at 0,0,0
When you are clearing the inverse you are clearing the instructions to jump from it's starting position to the armature.
But because the armature isn't at 0,0,0, that matrix information is added to the monkey's matrix. So it will offset to the same amount the armature is from the origin of the world.
It is pretty complicated stuff, but it's possible to keep it simple.
0, 0, 0
@waylow Thanks for your answer😀! I've done four more tests:
1) If I repeat step 4 with the armature at the world origin, Suzanne doesn't snap to the armature after "Clear Inverse":
It seems that the transformations to Suzanne from the intermediate partenting to the cube are taken as an offset that is unaffected by the "Clear Inverse" command.
2) If the intermediate parenting to the cube is skipped and the instructions of step 4 are followed, Suzanne snaps directly to the armature :
3) If Suzanne is placed manually outside the world origin and step 4 is repeated, Suzanne's distance and direction from the world origin are taken as an offset to the armature:
4) If Suzanne is parented to the armature directly with "Parent without Inverse" then Suzanne's offset from the world origin is ignored:
Conclusion: "Parent without Inverse" and "Clear (Parent) Inverse" have the same result only if the parented object is located in the world origin. Otherwise "Clear Inverse" will use the parented object's distance and direction from the world origin as an offset to the armature.
@waylow Just one correction and addition to your posting here: "Clear (Parent) Inverse" uses the offset of the former child object from the world origin and adds it to the position of the former parent object in order to determine the former child object's new position. "Parent without Inverse" ignores that offset. Parenting manually using the "Relations Panel" in the "Object Properties" tab of the "Properties Editor" also applies the offset as "Clear (Parent) Inverse" does. So "Clear (Parent) Inverse" and "Parent without Inverse" do the same only if your future child object is in the world origin when parenting it. Yes, you're right keeping it simple with (0, 0, 0) 🙂👍!
Thank you, Wayne, for the hint 😀! No, I didn't know that new option.
So, do I understand it correctly if I think it like this:
If you parent an object "A" simply with the "Object" option, Blender kind of takes a snapshot of the global coordinate system for "A". Now, you rotate the parent object "B" which also rotates this "snapshot" coordinate system which is the local coordinate system for the child object "A". That's why the coordinates of the child object still look the same as they were just one step before partenting "A" to "B".
Now "Object (Keep Transform Without Inverse)": It simply copies the local coordinate system of the parent object. Am I right?
And "Apply Parent Inverse" can convert your child's local coordinate system created with the "Object" parenting option into a copy of the parent's local coordinate system so that you get the same as directly parenting with "Object (Keep Transform Without Inverse)". Correct?