Gord Goodwin aka feelgoodcomics has released very nice and useful script for weights normalization.
Normalizes the entire mesh (per vertex) by distributing all weights evenly, or preserving 100% groups based on 3 rules:
1.)If there are no 100% groups, all weights are evenly distributed.
2.)If there are more than one 100% groups, they are divided evenly, and all other memberships are removed.
3.)If there is just one 100% group, it becomes the owner of the vert and all other influences are removed.
It also provides a "mode" which allows you to update the selected/active group and normalize its weights by either preserving the weights entirely, or distributing them evenly. Non-bone groups are left untouched.
As well, the peak (100%) value can be set, and there is a tolerance setting to determine the minimum value of a 100% weight.
14 Comments
This sounds like something that would be extremely useful to code into the 2.5 release.
Yay! Thank you. This may be helpful when I begin rigging soon.
Cool, as i can see this script can be used after bone heat weighting to fill vertices that does not filled by first method?
Yes, this is extremely useful and may safe riggers from headaches, so I hope this will be at least officially bundled script in Blender. Or more over have it directly coded into Blender 2.5.
Blender comes with a normalize script in the weightpaint menu.
I'd really like to see an option for normalized weights displayed as such in real time while weight painting. It seems to me that if I have two bones, A and B, and the mesh is entirely fully weighted on A, then if I paint B at full weight and opacity, the mesh should turn yellow/green for both bones. That would represent how the influence is actually acting on them. Instead painting full opacity on a mesh for a given bone will turn the mesh red, regardless of how many other bones act on the same vert, which actually doesn't mean anything in terms of actual influence of the bone on the vert.
I looked at the normalize script in the weightpaint menu by the way. I can't quite figure out what it does, but it doesn't seem to work as I'd expect. If I paint a mesh fully red with two different bones, and run the normalize weights script, the mesh remains fully red when either bone is selected. I would expect it to normalize the weights so that each bone got a 0.5 weight for all verts.
I'm not sure really what "normalize" is used to mean in this article, either. My meaning is that all weights on a vert should be made to add to one while their proportions to each other remain the same. The functionality of these scripts seems to be more oriented towards cleaning up and smoothing values.
@ Campbell Barton :
The difference is this script can allow for a currently selected bone to take precedence ( during normalization) over other bones, and its interactive. I don't believe the bundled script allows for that.
@Tony: Yes, that is the meaning I took as well. The script will (or atleast should) make all overlapping influences total 1.0 The script allows you many options and was designed to be easy to use. It does provide the behaviour you describe - overlapping 100% groups are evenly distributed to total 1, influences less than 1 are scaled up, influences more than 1 are scaled down proportionally.
I had a hard time explaining what I meant by normalize so I made a video. I also provided a practice file so you could try the script out and see what it does. These are all linked in the release thread.
Cheers!
I'll definitely have to give both of these scripts a try. If they work as advertised, I may even start using Blender's weight paint tool!
how to download this script?
Click on the link 'BlenderArtists Discussion'. There's a download link available. This script is almost 3 years old though, so it may not run in current Blender versions anymore.
thanks.... ya im using old version so might be helpful for me.