Page MenuHome

Bone offset between Rest Pose and Edit mode
Closed, ResolvedPublic

Description

In the blend file you'll find two bones that in edit mode are perfectly overlapped but in pose mode they have an offset, even if the rig is in Rest Position.

The only reason I find for this to happen is the use of the "Apply Pose as Rest Pose" operator. If you run that operator multiple times you'll notice that the offset between the two bones gets even worse.

Even though the Apply Pose operator could be the cause of this undesirable offset, I've found out that this started to happen only after blender 2.71. If you open the file with Blender 2.70a, you'll see that if you toggle between Pose mode and Edit mode, the offset is fixed!!

Event Timeline

Juan Pablo Bouza (jpbouza) created this task.
Juan Pablo Bouza (jpbouza) raised the priority of this task from to Needs Triage by Developer.

Can you show a method to let it reappear in armature of simpler structure?
I can confirm a reported phenomenon, but do not understand a concrete procedure to produce it.
For example, can you reproduce it in Armature with three bone?

Mmmm, no actually I don't know of a method to do so. Some time ago I spoke to Zanqdo about this and he also told me that he had seen such behavior with the Apply Pose operator, like if it messed up some things.

I just tried with a simple armature and it didn't happen, I wouldn't know how to reproduce this.

Anyway, I have the feeling that the solution for this is in the 2.70a to 2.71 transition. As I said, if you open the armature in 2.70a or previous versions, Blender automatically fixes the issue when toggling Edit Mode. So, my guess is that in those versions of Blender there were some kind of checks that didn't let Pose mode to be different from Edit mode... but well I'm just guessing here.

bone of the parent of two bone which you pointed out is different.
It shows that it is arranged based on a different coordinate system.
If you change connected of bone of the parent of bad_offset-bone to ON, this phenomenon does not occur.
I do not know whether this is a thing by the difference in version of blender.

Oh man I'm so sorry, I thought I had deleted the rest of the bones!!!

Ok, here it is, new blend "apply_pose_bug_2", just 4 bones. No constraints or drivers or anything. The hierarchy is as follows:

1 parent of 2. 2 parent of bad_offset.

Now, the problem is still there, although I noticed something important... If you move 1 or 2 in Edit mode, the offset changes. It seems that when you move them closer to bad_offset, the offset decreases....

I know that this is a pain, cause it's something you cannot reproduce, but this armature is definitely bugged in 2.71+ and it wasn't in previous releases.

I calculated a position of bone in pose mode, but values seem to be different.

2.75(sub4)
== Pose ==
[bad_offset] world location: 0.59950 -0.01245 1.10259
[good] world location: 0.59950 -0.01245 1.10259

2.70a
== Pose ==
[bad_offset] world location: 0.59858 -0.01245 1.10260
[good] world location: 0.59858 -0.01245 1.10260

2.75(sub4)


2.70a

I attach the script which I used for calculation.

The position that slid seems to be right by the calculation.

Bastien Montagne (mont29) triaged this task as Confirmed, Medium priority.

Actually, it’s 3Ddrawing of non-parrented bone ('good') and editmode which is bad - if you place 3DCursor on head of those, you get x = 0.59858, when head of those bones (as reported by their matrix) is x = 0.59950

I would suspect some issue with our 'minimum bone length' enforcing (we do not allow zero-lenght bones), since diff seems to be only along X axis, which is also orientation of the parent "2" bone, a very short one.

Ok, can confirm this is the shortness of bone "2" which is causing that issue - in Edit mode, move its tail along X axis by -0.002 and its child matches expected position nearly perfectly (the longer you make bone "2", the smaller the gap).

I’m going to see whether we can aliviate that, but afraid this will be just another float precision issue… :/

Bastien, but why is this corrected by 2.70a? At least from a user point of view

So, what do 2.70a and previous versions do differently from 2.71+ ?

Mmmm well I don't know if this helps but if you unparent 2 from 1, the offset is solved.

Also, I tried changing bone 2 values and I can say that if you perfectly align head and tail, the offset if gone. Well, the same happens if you rotate the bone randomly, at some positions there is no offset. Ok, this could be related to floating precision as Bastien says, but again, I don't understand why 2.70 doesn't have the issue. Really, I had never seen this inconsistencies between Edit mode and the armature in Rest Position before 2.71.

Found issue and fixed - my bet re 2.70 would be that we were handling roll nightmare differently by that time iirc - yes, all our Armature issues are related to demonic bone roll one way or the other, it seems. :(