Is weight painting broke for Windows? Set of steps to check

Hi folks,

Can you check out the video in this link, and let me know if you’re seeing the same issue or if painting the weights works first time for you?

https://developer.blender.org/T87714

I’ve noticed the same issue on more complex rigs in the past, but assumed I was doing something wrong so didn’t try to recreate a simple test case.

Thanks for your time if you get a chance to try it out!
Mal

I only watched through 50 seconds. What you’re showing in those first fifty seconds is not a bug.

First, when you’re weight painting, the actual effects of the weight painting depend on your tool settings. Default settings have falloff, which means that anytime you click, you’re doing less than the full effect of the brush. Judging this by color is impossible: a 0.001 weight will never be visually distinguishable from a 0.0 weight.

So the entire object has weights-- just not full weights. Why do the vertices move the full distance? Because Blender normalizes weights for calculating the armature modifier (a feature not a bug), and you have only a single bone. So what is 0.001 weight, in the absence of any other weights, after you normalize it? It is 1.0. Because you have only a single bone, all of your weights, any that aren’t literally zero, are 1.0.

You can’t judge weights on the basis of single bones. Weights are relationships between bones. They are the weight of each bone’s influence, as compared to each other.

Thanks for explaining what’s happening behind the scenes bandages - the normalization of the weight value makes technical sense in terms of what the code is doing.

If the weight wasn’t normalised, this would just work as visually expected by the user. Users would be able to paint partial influences ( eg 0.5 for half influence for certain vertices ) using a single bone, the current solution for a single bone based on weight normalization is either fully on - 1 - or fully off - 0. Not very flexible, or useful for a user.

As you mention, it’s a Blender “feature” rather than a bug - I’ll add it to the list.

I put a feature request on RightClickSelect, for the normalization to not occur if a vertex is under the influence of only one bone.

Just turn off the normalization…

L0Lock, Auto Normalize is off by default.

Is there another way to turn off the normalization? If you have given the quick example above a go, and managed to get it working, I’d def be interested in hearing how!

Are you talking about weight painting auto-normalization? That’s a different kind of normalization than what I’m talking about. What I’m talking about is invisible, behind-the-scenes, and I don’t think you can turn it off without changing the code and recompiling Blender.

1 Like

Hi bandages,

I added this to the original bug thread…

"One code based solution might be to not normalise totals under 1. I get why they are normalised for totals over 1, although there are cases where the user might want this to occur.

If 3 bones have weight on the same vertex of eg 0.25, 0.5 and 0.75 these add up to 1.5 and currently get normalised. That’s fine, you can assume the artist would most likely want this, so that the total control over the vertex is 1. The bones would end up with the same relative influence over the vertex.

If the 3 bones are set by the artist to have weights of 0.1, 0.15 and 0.2 to have a small influence over a vertex, the total is 0.45. This is under 1, and should not be normalised.

In the same way, if an artist sets a single bone to have a weight of 0.1 over a vertex, this is under 1 and should not be normalised. They very likely want to have this small influence over the bone.

The above change would allow an artist subtle control with weight painting. Hope that makes sense!"

Having a way to turn off the code auto-normalize would be a great solution here.

You already have that control. You just need one more bone.

Paint your <1 weights however you want. Add a bone (unparented). Add a vertex group with the name of that bone. Assign all verts at 1.0 to that vertex group. Lock all other vertex groups, then run normalize all (with “lock active” unchecked.)