1
$\begingroup$

I've linked several parts (mesh objects) of a robot arm to individual bones of an armature using the "Ctrl-P -> Bone" option. Subsequently, I transformed some of the bones in Pose Mode. Now, both the robot arm and the armature have distinct Rest and Pose Positions.

In Object Mode or Pose Mode, I can toggle between Pose and Rest Position using the corresponding buttons in the properties panel. As expected, both the robot arm and the armature display correctly in the chosen position.

However, in Edit Mode, there's an aspect I find puzzling. If my last selection was Rest Position, both the robot arm and the armature are displayed in Rest Position. Yet, if my last choice was Pose Position, the robot arm is shown in Pose Position, while the armature remains in Rest Position.

To my understanding, Edit Mode always displays the armature in Rest Position, but should not the robot arm also be shown in Rest Position? Notably, in Edit Mode, the buttons for selecting Pose or Rest Position are present but seem ineffective.

Curiously, when using Armature Deform instead of Bone Parenting, the behavior is as expected: in Edit Mode, both the mesh and the armature consistently appear in Rest Position. Why is there a discrepancy when using Bone Parenting? Could this be a bug?

Here are some screenshots for further clarification. The first screenshot shows the armature in Pose Mode, note that I have selected Rest Position from the properties panel:

Armature in Pose Mode with Rest Position selected

The second screenshot shows the armature in Edit Mode. While switching from Pose Mode to Edit Mode, I have not touched either of the buttons for selecting Pose or Rest Position, so the armature is still in Rest Position:

Armature in Edit Mode with Rest Position selected

The third screenshots shows the armature in Pose Mode again, but this time I have selected Pose Position from the properties panel:

Armature in Pose Mode with Pose Position selected

The fourth screenshot shows the armature in Edit Mode again, but this time it is in Pose Position. Note the inconsistency between how the robot arm and the armature are displayed:

Armature in Edit Mode with Pose Position selected

Here is a link to the corresponding blend file:

$\endgroup$
4
  • 1
    $\begingroup$ i would highly recommend adding some screenshots with annotations so that we can very easily understand what you are talking about. If you wanna make it really easy for us also provide a blend file so we don't have to ask for your technical settings in comments. thx. $\endgroup$
    – Chris
    Dec 28, 2023 at 9:34
  • $\begingroup$ Thank you for the quick reply, I have just edited my post accordingly. $\endgroup$
    – Rocketti
    Dec 28, 2023 at 13:06
  • $\begingroup$ Are your objects deforming with an Armature modifier cause if they are they should go back to their resting position when the armature is in Rest Pose or are they using Object constraints to parent them to the bones within the armature? $\endgroup$ Dec 29, 2023 at 4:10
  • $\begingroup$ The robot arm is bone-parented to the armature, nothing else. $\endgroup$
    – Rocketti
    Dec 29, 2023 at 22:26

1 Answer 1

0
$\begingroup$

I believe that the reason for this is that armatures don't have all the data they need to function while they're in edit mode.

For bones to work, they need to have inverses, matrices which describe their relationship to their parent. (All parenting structures have this, actually; Blender tries its hardest to hide the info from you, for whatever reason.) When you transform a bone in edit mode, that changes these inverse matrices. Maybe for reasons of performance, it seems that Blender doesn't calculate these inverses dynamically, but waits until you drop out of edit mode to calculate them for all bones in the armature. So these bones don't actually have all the information that objects need while you're in edit mode.

But if the bones aren't really usable while in edit mode, then Blender needs to decide what to do with bone-parented objects while you're in edit. And what it has decided to do is to remember their transforms at the time that you entered edit mode, and not update them until you leave edit mode. Could it instead quickly drop the armature to rest pose and remember those transforms instead? It could. It might cost a little bit of performance, but not enough to care about; and, probably, it should, to parallel armature deformation -- but, nobody's ever bothered to code that up.

Note that even when set to rest, the objects don't actually follow their (absolute) bone parents. The bones just don't work until you drop out of edit. So even if Blender switched to rest, it would still be misleading you about the objects' locations while you were editing the armature. (I strongly recommend against using absolute bone parents, in part, for this reason. Use bone relative parents instead, and edit mode armature changes will never change the rest position of your children.)

So, why is it your character doesn't remember its deforms when you drop to edit mode on its armature? This would be possible to do, although misleading, in the same way as for objects-- changes to bone orientations would lead to changed deformations that wouldn't show up until the bones were made fully functional. It would require a bit of extra code and memory in the armature modifier to hold the transforms in memory and to pay attention to the armature's state. But nobody ever has coded this (and in this case, I don't think they should: we need to position bones relative to the rest pose of the mesh.)

So instead, when the armature gets polled by a deformed object while in edit mode, it just says, "No transforms," and you get your model's rest pose.

What's the difference? Your objects need to remember something, if they don't want to just drop to world origin or armature origin or something and get totally out of whack. Your mesh doesn't need to remember anything: rest pose is just the position of the vertices as if the armature modifier didn't exist.

Are there any other potential ways to deal with it, other than those I've mentioned so far? Yes. It wouldn't be impossible for Blender to keep track of inverses dynamically, with each operation, even while in edit mode. Because edit mode bones are never scaled, inverses should be fast to calculate, although there's no guarantee that Blender is using the fast way when appropriate. And, this might be a nice, small, quality-of-life improvement for both parented objects and deformed meshes. But, also, not a very big deal, not to me.

$\endgroup$
2
  • $\begingroup$ Great answer! Thank you so much for this profound explanation of how stuff works under the hood in Blender. But I still don't understand why there are these two buttons that trick you into thinking that you can toggle between Pose Position and Rest Position in Edit Mode. They do make sense in Object Mode and Pose Mode, but in Edit Mode they should be removed or grayed out to avoid confusion. And a short note such as "bone-parented objects will always keep the position they had before entering Edit Mode" in Blender's online manual about parenting would have saved me a sleepless night. $\endgroup$
    – Rocketti
    Dec 29, 2023 at 22:20
  • $\begingroup$ Yeah, if something can't be done in a mode, the standard in Blender is to make it disappear (like bone constraints tab in Edit mode), so that would be smart. But, same thing: somebody has to make it do that, and it's maybe not a big enough deal to be worth the bother. $\endgroup$
    – Nathan
    Dec 29, 2023 at 22:24

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .