Hi PC,
I have a problem that comes from various ways:
I'm trying to assign values between 0 to 1 to some bones, let's say 0.5 for a vertex to a single bone, and only that bone. To accomplish that I have to disable Normalize for that vertex so I can assign weight values for a vertex that don't have to add 1 between the bones linked to it, but when I do the vertices deform in a really weird way (whithout moving anything) if their total weight isn't 0 or 1 (EDIT: and are weighted by more than one bone). Is there a reason for this?
Another part of the problem comes when I try to assign a value to some vertex if I don't have Normalize disabled. Let's say I have a vertex shared by the Arm bone (0,6), Hand bone (0,3) and Shoulder bone (0,1) and I want to change the weight of the Arm bone for that vertex to 0,2; how can I lock the Hand bone and Shoulder bone weight to their current values (0,3 and 0,1) so they don't get messed up randomly when I change it for the Arm bone?
I haven't rigged much so maybe I'm missunderstanding something, but this is getting me nuts because when I assign values to a bone the ones from another bone change and I don't go anywhere.
Replies
You have to balance the weight between bones so the total weight is always 1.
That's why you usually don't disable normalize unless you really know what you're doing.
Usually you set rough values manually or with enveloppes, then fine tune with blend/paint.
You don't really set manually all values for each vert.
Let's say a vertex should be influenced 0.5 0.5 by 2 bones.
Set the weight to 1 to the first bone, then set 0.5 to the second.
With normalize on, it will set both to 0.5.
With normalize off, it will be 1 0.5, so a total weight of 1.5 which is wrong : the vertex will move "too fast" compare to your bone movement.
But if you need to, uncheck normalize and set your values manually so their total is 1.
So what could I do if I want two bones to not have complete control over a vertex to create a smooth transition for both (something like 0,2 for one and 0,3 for the other)? I could add an extra bone where I throw the rest of the weight so it adds to 1, but that would be a pretty vague solution.
Here for example I only added bones in places that I know I'm going to deform, but ignored the back of the head and the kneck.
Just think about a real body. All your skin is influenced by some bone movement.
Which means, the ears for instance, must be weigthed to something. You can't let them at 0.
Besides, no idea how it could react in your engine, exporter whatever. Just don't do it.
So you need atleast a "head" bone, parent of your face bones setup. Actually you can't even move the head.
And you set 1 for the ears, back of head etc, to this bone.
And maybe 0.5 for the verts around the mouth, jaw etc...
And if now you move the head bone, everything should follow, the mesh, the setup...
Usually you have a jaw bone aswell to open the mouth.
The only case you'd need to uncheck normalize, is if let's say you want a vert to have precise values on more than 2 bones, like 0.3 0.25 .045 which would be pretty impossible to set with normalize on. But as i said, most of the time, you paint/blend the values for fine tuning, you don't set precise values manually.
Just play with it, you'll figure.