Home Technical Talk

Problem when disabling normalize in Skin modifier and Stop Max from redistributing vertex weights?

polycounter lvl 6
Offline / Send Message
Ruflse polycounter lvl 6
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

  • Noors
    Options
    Offline / Send Message
    Noors greentooth
    A skinned vertex MUST always have a total weight of 1.

    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.

  • Ruflse
    Options
    Offline / Send Message
    Ruflse polycounter lvl 6
    Noors said:
    A skinned vertex MUST always have a total weight of 1.

    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.

    But Max lets me have vertices with a total weight of less than 1 if they are weighted by a single bone. When I add more than one is when they mess up:



    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.
  • throttlekitty
    Options
    Offline / Send Message
    In this case, add more weights to your Head or topmost Neck bone if you don't have a Head. This way you have the partial control of a local bone, say Eyebrow_L, but the affected vertices still move with the head when animated. Since Head is a parent of Eyebrow_L, anywhere a parent goes, the children go with it.
  • Ruflse
    Options
    Offline / Send Message
    Ruflse polycounter lvl 6
    I feel like I'm thinking in skinning the wrong way and I shouldn't even be trying to weight a vertex to more than two bones without having to add 1. Should I add bones to some parts even if I'm probably not going to animate them, but so its vertices have some bone to be weighted to and make a smooth transition?
    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.

  • Noors
    Options
    Offline / Send Message
    Noors greentooth
    All verts should be influenced by atleast 1 bone and have a total weight of 1 (hence normalize is handy, because it always keep the total weight at 1.
    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.
  • Ruflse
    Options
    Offline / Send Message
    Ruflse polycounter lvl 6
    Oh okay, I was thinking it wrong. But I still have the problem where I've correctly assigned weights for one bone, but when I try to assign or correct them for another the first one gets mess up and I end up wasting hours trying to correct a couple of bones to make others work wrong. For some parts of a body this doesn't give that much trouble, but for something like a face where I have vertices being weighted by more than two bones I can't know how Max is going to redistribute the weight. Is there a way of locking the weights of a bone so they remain the same until I unlock them?
Sign In or Register to comment.