Blender’s automatic weight rigging system works really well ! How does it works?

(Bracer) #1

Coming from other 3d packages, I must say that Blender’s automatic weight system for rigging seems to almost work too well, now I am not complaining, and it is not perfect…but it works so well from the get go !

I couldn’t help wondering “how”.
Does anyone knows what is Blender doing behind the scene to achieve this magic ?
Heat map search ? Volumetric voodoo ? What’s going on ?

I know it’s not envelope since there is an option to use that instead of the automatic weighting system.

1 Like
(Metin Seven) #2

Yes, I also think Blender auto-rigging is impressively effective, and would also like to know more about the technique(s) behind it, although I’m not a coder, but an outline would be interesting.

(Zuorion) #3

Via https://docs.blender.org/manual/en/latest/rigging/armatures/skinning/parenting.html#with-automatic-weights

[…] It calculates how much influence a particular bone would have on vertices based on the distance from those vertices to a particular bone (“bone heat” algorithm).

So its “bone heat” algorithm. I didn’t find and doc explaining it.

I’m not sure if this is that algorithm, but it may be this: http://people.csail.mit.edu/ibaran/papers/2007-SIGGRAPH-Pinocchio.pdf

Since Blender is open source we can look our self how excacly it is implemented works:
https://developer.blender.org/diffusion/B/browse/master/source/blender/editors/armature/armature_skinning.c
function ED_object_vgroup_calc_from_armature and add_verts_to_dgroups
https://developer.blender.org/diffusion/B/browse/master/source/blender/editors/armature/meshlaplacian.c
function heat_bone_weighting

BTW i found doc that cailms is better than bone heat:
Bone Glow: An Improved Method for the Assignment of Weights for Mesh Deformation
It would be interesting to have this implemented if it gives actually better results.
@ideasman42