I know this is basically the same problem as I described in this post (Vertices move when a weighted bone has been repositioned?), and I know there is an entry in the issue tracker (Weighted mesh compensation doesn't adjust bind pose · Issue #63 · EsotericSoftware/spine-editor · GitHub), but I encountered an instance of this problem yesterday that I think is more serious, so I thought I should mention it.
Description of the issue:
It is possible for a user to permanently screw up a weightmap for a mesh, by getting the mesh into a deformed state, without it appearing that the mesh is deformed. The deform is "hidden" or invisible. There is no way to restore a mesh to its undeformed state without resetting the entire mesh, which destroys the user's weightmap.
Repo:
In Setup mode:
- create a mesh
- bind 2 bones to the mesh: bone_A and bone_B
- weight all vertices to bone_A at 100%
- weight a single vertex to bone_B at 100%
- enable image compensation
- change the transform of bone_B
At this point, the single vertex influenced by bone_B will not appear to have moved, however, an "invisible" change has been made to the mesh vertices. In order for image compensation to "work", the vertex influenced by bone_B has actually been translated. So now, effectively, the mesh is not in its original state, but is instead in a deformed state.
This becomes a problem if you do either of these things:
- change the influence of bone_B on the vertex in any way
- delete bone_B from the mesh's weightmap
The second case (delete the bone) is especially bad, because now the mesh is in a weird deformed state, and there is no way to properly undo the translation that was applied to the vertex. The only way to get the mesh out of a deformed state and back into its original state is to reset the mesh, which will remove ALL weighting that has been applied.
So, effectively, if a user accidentally changes the transform of any bone attached to a mesh while image compensation is enabled, they will have potentially messed up their mesh. If they don't realize the error immediately and use UNDO to fix it, then they have no option to fix the issue later except by deleting the entire weightmap and starting over. Needless to say, that is a crappy situation to be in, especially for a super-complex weightmap.
Observed in Spine Professional 3.4.02