Reverse skinning computation?

I’m trying to take a skinned pose and reverse it to get the original model (before deformation). However, I can’t seem to get it to work!

6661186--761833--21278900e600632e93cd53a5029bef52.gif

Here you can see two models - a skinned model to the left (which I’m affecting using the rotation gizmo), and an “unskinned” model to the right. The one on the right is computed from the deformed left model. (There’s also a third model at the same location as the one on the right, that I’m using to compare what the unskinned model “should” look like.)

However, if you look closely, you can see the waist of the right model gets really weird as the left model is deformed. The upper body and head etc works fine, but for an area with multiple weights influences, it seems like my method is not working and I don’t quite understand why.

While working fine for most parts, it doesn’t seem to work in the areas where multiple bones are influencing the result! (The waist in the example picture above.)

What am I doing wrong exactly? Are matrix multiplication and bone weighting somehow destructive? I.e., there’s loss of data and you cannot undo it?

Is it possibly because when animating the order of application matters?

I presume they start at the root and traverse down each bone through the hierarchy during the normal skinning.

I think you would need to do the reverse, ie., de-transform the most-leafy bones, then move up to the root.

I’m just thinking rotations are not commutative, so maybe this is why??

Or would it be that rotations are not associative… ? Hm.