How to remove the influence of all bones other than the currently selected one ?

Hello all - I am relatively new to weight assignment in Blender. I am running into an issue when assigning weights, which I will try to explain as clearly as possible.

Let’s assume that I am working on a model made of multiple elements, with some elements in need of being maintained as hard, non deformable parts (like a metal shoulder pad). The whole model has to be maintain as one mesh, therefore splitting such parts out is not an option.
After an initial weighting pass coming from automatic weighting or weight transfer from another model, I am (expectedly) ending up with a shoulder pad receiving influences from multiple bones (let’s call them bone1 and bone2). Also let’s assume that my skeleton is setup in such a way that the proper bone supposed to drive the shoulder pad is “bone1”.

My expected way of dealing with the issue consists of :

  • going to edit mode
  • selecting all the verts of the shoulder pad
  • going to weight paint mode with “vertex selection masking” enabled
  • going to the vertex group list
  • highlighting bone1
  • assigning 1.0 to it.

However after doing so I notice that bone2 is still influencing the shoulder pad with the same weighting as before. Therefore I am looking for a way to remove such influence, because I do not want any unwanted deformations to happen after export, and I do not want the total of bone influences to be superior to 1 for any vert of my model. At the moment what I do is to go through the whole vertex group list bone by bone (with shoulderpad verts selected), manually clicking Remove each time so that these verts do not get influenced by unwanted bones - but this is of course an inefficient method that I wish to automate.

Therefore my questions are :

  • How do I remove the currently selected verts from all groups/bones influences other than the currently active one in the Vertex Groups list ?
  • Is there a way to tell Blender to remove all other bone influences when assigning 1.0 to a given bone ? I would naturally expect the weighting to normalize everything while doing so (therefore removing the influence of all other groups when assigning a value of 1 to a given group) but I must be missing the option.
  • More generally : I want to be able to type in a definitive weighting value for a certain bone influence (not only 1.0, but anything else really : 0.25, 0.5, and so on), and have all the influences of the other bones be normalized accordingly to accommodate for it.

(Also note that in the scenario of the shoulder pad I would like to avoid any usage of the weight painting tool, since I need to be sure that all verts are without a doubt set to 1.0. Organically painted weight assignments are therefore not acceptable.)

I hope this makes sense ! Thanks a lot for your help on this topic.


[edit] : it seems like clicking “normalize all - All Groups - Lock Active” with shoulder pad verts selected does remove the influence of “bone2”, so that seems like a good fix for after the fact. However the question of automatically removing such rogue influence as soon as 1.0 is given to a given bone remains. Thanks !

You shouldn’t worry about normalizing weights. Blender already does it internally. Thus, two bones affecting a vertex at 1.0 both, affect that vertex at 0.5 each.

If you have some elements that are hard surfaces and do not need to be deformed, make those pieces separate elements. Select the separate object in Object mode (Make sure all transforms are applied. Loc ,rot and scale, 0,0,0, 0,0,0 and 1,1,1), shift select the bone you want to parent to (the armature should be in pose mode and the bone need to be visible.), CTRL-P and select Bone.

This will parent the object to the bone directly, no weighting needed. It will follow the bone like it’s weighted 100% to that bone and no other bones or vertex groups will deform it. Delete any unwanted/unneeded vertex groups currently on the object.

Good luck!

Thank you for taking the time to share your thoughts on the issue.

@Ovnuniarchos : I see what you mean … unfortunately this is not exactly related to the workflow quirk I am trying to avoid. For two reasons :

1 - my need is to have the described part (the “shoulder pad” in the example above) be affected at 1.0 strength by bone1 and 0.0 strength by bone2 ; not 0.5 each.
2 - from what I have seen, while Blender does “act” as if the weights were normalized (for instance : two bones with a 1.0 influence on the same part seem to visually act as two bones with a 0.5 influence when an animation is played), the fact that the numbers are not being normalized remains an issue when dealing with file exporters which might treat this data in unexpected ways.

To be more clear, here is what I am experiencing :

As you can see, from a user point of view I am asking vertex group 73 to fully drive the selected verts, by assigning a 1.0 weight to it ; but in practice, I still have to click Normalize all in order to really remove the influence of other unwanted bones. If possible I would like to find a way to avoid that last step. Of course clicking “Normalize All” is a decent workaround already and I am glad I ended up finding it, but it would be nice to not have to do rely on it in the first place …

@DanPro : I totally see what you mean, but unfortunately this is not an option :frowning: I probably should have mentioned earlier that this is not just for animation within Blender but rather for game export, in a situation where multiple objects are not possible. (additionally and similarly, this specific export scenario does not allow me to remove arbitrary bones/vertex groups influence for a model)

Still scratching my head on this one !