Weight painting questions from a modeler

Hello all.

My background is in modeling, sculpting and texturing. I made the full transition to Blender over the course of last year, originally coming from studio jobs relying on Max and Maya. Even though it is not what I spend most of my time on I occasionally need to do some vertex weighting - sometimes as a rough job to prototype an asset in engine, and sometime in order to produce final refined assets.

I’ve had good success in the past doing so in Blender on lower density models where each vert can easily by tweaked individually - that is to say mostly assigning 1.0/.75/50/25 values throughout. I also find the fact that weights are stored as a simple vertex groups list extremely powerful, as it allows me to combine and modify weighted models on the fly without losing any data. Something that 3d artists not using Blender are quite envious of !

However I am running into various issues with brush-based weight painting and I thought I’d start a thread here to ask a few questions in one centralized place. As these are likely common issues and questions this thread could become useful for future reference, for myself and possibly others. I am on 2.76b by the way.


1 - First things first : visual feedback. Is there a way to redefine the color spectrum used in weight paint mode ? I understand the current one : red/hot = full weight, blue/cold = zero. But for some reason this doesn’t seem to work well for me when it comes to identifying values in the medium range. Green is an odd intermediate color, as it is not really “between hot and cold” visually speaking. Now I don’t think I have any color perception issues myself, but I feel like a greyscale spectrum going from black(none) to white(full) would be easier for me to read and work with. Like so :

(of course this is not an argument about which representation is better - to each his/her own. I’d just like to know if changing it is possible)

Thanks ! More questions to come.

2 - When navigating the Vertex Groups list (to check the influence of each group/bone on vertices), is there a way to highlight the bone corresponding to the name of the group ? Like this :

On the video below :

3 - At the beginning of the video you can see me attempt to turn vertices black (which I believe means “unassigned”) to clean up the weighting of the model using the Substract brush. However I am unable to do as intended. Is there a way to to so using weight painting brushes ?

4 - Starting at 1:0 I am moving to the Vertex Groups list to remove assignments manually. I want the top vertices (near the hips) to be assigned/driven by the b_C_Pelvis bone, but nothing else. After doing that (clicking Remove for each group that I want to remove them from) these vertices still show “blue” under these groups. Is this normal ? A visual/rendering bug maybe ?

Or … does dark blue actually means “this vertex is set to 0 for the current group, BUT is actually driven by another group” ? If that’s the case, that’s useful information … but is there a way to use another color than blue for that - maybe purple ? Or even an option to disable this feedback completely ? When I see blue I keep thinking “Oh, these verts are ever so slightly influenced by the current group, therefore I still have some cleanup to do” - which is not necessarily the case, as shown in the example.

5 - About enveloppes : can the head and tail of an enveloppe be moved away from the head and tail of their bone ? like so :

6 - And furthermore, would it be possible to use arbitrary geometry as weighting enveloppes ? Or, thinking outside the box : using geometry intersections in space to make vertex selections, and then creating vertex groups and weighting from there ?

Q1: Custom paint color range. User Preferences->System look in the lower right corner.

  1. Custom weight paint range under System in User Preferences.

  2. Not that I know of, but you can go to pose mode for the mesh and then click on the mesh and go to weight paint mode, now you can shift click to select the bones (and their vertex groups).

  3. This looks a bit strange. Anyway, if you want to completely remove the weights you can use the Mix brush with 0.000 weight and maximum strength.

  4. I think you’re using Show Zero Weights: All here where blue means that the vertex is weighted by any group. It’s used for showing areas that aren’t weighted at all in black, so you should switch it to Active instead, there you can only see the active group’s weights.

The fact that it shows up blue is pretty strange, it seems that it uses the lowest value for the color which is blue by default, but if you were to switch to black and white it would just be black instead. Even in Active mode, which is not really helpful. Maybe you should submit a bug report for this.

  1. I don’t think so. That doesn’t really make sense though. Why would you want to do that?

  2. You can use automatic weighting for bones, either by parenting the mesh to the rig again and choosing the automatic weights option, or by selecting a bone in pose mode, going to weight paint mode and pressing the specials button (w?) and choosing assign automatic from bones.

This uses a raycasting algorithm for the bones which takes into account bone size and orientation. You can read about it here: http://www.mit.edu/~ibaran/autorig/

So basically you can create bones that are only there to help this automatic weighting, for example you could add two bones, one for each side next to a chest bone because rib cages don’t really deform. Then you can parent these new bones to the chest bone, parent the mesh to the rig with automatic weights and you will have basically what you’re describing.

Q3&4: Weight paint, T-Panel->Options, options pane, Show Zero Weights. Will show black for zero weights of either active or all groups.
Also, try using the vertex weights pane in the N-Panel. It will allow working with just the group’s assigned to a vertex, or copying the active vertex weights to other selected vertices.

Thanks a ton for the help everyone, I am glad I asked.


@SkpFX : Thanks !

1 - I never noticed that this was an input for a user defined gradient spectrum. This is a huge relief. It’s interesting how such a seemingly simple change in visual feedback can affect one’s work. I am absolutely loving it in greyscale, as value (black to white) is so much easier for me to read than a heat map going through arbitrary, highly saturated colors.

3/4 - On top of that, turning the lower end of the gradient to black has the unexpected positive side effect of me not worrying about these blue verts from other groups anymore :smiley: So I’ll gladly take that !


@Cyaoeu : Thanks a lot too.

1 - Done, that’s perfect.

2 - Very interesting. I can indeed select a bone in pose mode, then go to weight mode for the model and the previously selected group/bone is indeed the active one. However I don’t know how to select other bones from there without exciting weight painting mode first - not sure if this is a limitation of my interaction settings or if I misunderstood you on that detail : I am stuck with the brush circle, with no access to a selection cursor.

3 - Would the mix brush also remove this vertex from the group ? Or just leave it in it, as 0 ?

4 - Agreed : blue is a strange choice, and confusing too. It doesn’t really seem like a bug to me though, maybe more of a design oversight ? But by all means switching to black and white solved that issue indirectly. And indeed, putting Show Zero Weights to None does that too.

5 - I would like to do that … in the example above :slight_smile: As you can see this is a rather complex skeleton (for a specific game) and because of file conversions the bones are rotated and not covering the usual distance between parent joint and child joint. The armature is fully functional though (it exports perfectly fine to the game), that’s just a quirk to work with.
But regardless I can think of other cases when shifting an enveloppe away from it’s bone can be beneficial : hip joints, elbows, knuckles, and so on. I certainly ran into these in a past life when working with enveloppes in Max.

6 - Ok, that just gave me a Eureka moment. Nothing prevents me from using a proxy/temporary armature, with modified bone placements and even a reduced number of bones just for the sake of automatic weighting and/or enveloppes. Since the weighting data is just numbers in a bone table, these should carry over back to the original armature. Very interesting … [edit] Just tried it … and it worked ! Extremely useful.

Now for something that has definitely been bothering me and slowing me down :

7 - Surface continuity while weight painting. In the video below you’ll see me attempt to paint weights on parts of a model that overlap or occlude others :

Unfortunately and unlike a 3d painting app like 3DCoat, vertex painting doesn’t take into account surface continuity (i.e. where on the surface of the model the paint stroke starts from). Everything seems to be projected in screen space meaning that a lot of other front-facing areas are unexpectedly being painted.

This is quite a major issue as it makes painting weight data very unsafe. Is there a setting somewhere to avoid this behavior ? I understand that one can filter out vertices by making a vertex selection first … but that kind of defeats the purpose of weight painting intuitively, and that’s not sustainable if required every time. Not to sound overly dramatic, but I don’t really see how one can paint weights cleanly if this keeps happening … Am I missing something ? It is problematic when using add/remove as shown in the video,but especially dangerous when using the blur brush.

Interestingly enough the soft distance tool in mesh edit mode has the option to work with or without taking surface continuity into account, so surely enough weight painting could/should too …

  1. I don’t think it removes the vertices for the group but you can use the Clean function in the weight tools if you need to remove them.

  2. I don’t think you can at this time, either you select vertices or try not to mess up. :stuck_out_tongue: It could be a good addition to the GSOC quick hacks thread though.

A nice bonus if you’re selecting vertices is that you can use the Smooth tool, it smoothes weights out and also has some interesting options like expand/contract. You can probably use this along with the proxy armature thing and get good results pretty fast.

3 - Gotcha, makes sense.

7 - Ah, that’s a shame ! Respecting surface continuity is what I would naturally expect by default, this is a rather large oversight from the devs. I will try to push it as a bug report as I believe the video above makes it quite clear that there are barely any situations in which the current bleeding behavior is desired.


That said … I cannot thank you enough for mentioning the Smooth tool ! I had no idea about its existence and this is exactly what I was wrongfully expecting the Blur brush to be (the Blur brush really only acts as a “painting” tool but doesn’t have any concept of deformation solving). The Smooth tool is the missing piece of the puzzle. Here is how I solved my practical example :

  • On the far right, an edited armature with bone count reduced to a minimum, and bone orientation eyeballed into place so that it conforms to what Blender expects, for proper raytracing ;
  • This was automatically weighted, with barely any need for edits ;
  • I was then able to rely on the weight data to link the asset back to the original armature (with many more bones, all at odd orientations) ;
  • The pants data was then transferred to the outer surface of the trench coat using weight transfer ;
  • All the kinks were smoothed using the Smooth tool ;
  • And the result was transferred to the inner surface, which was then re-attached. There is a little bit of twisting at the back/bottom but at this location realtime cloth simulation will be taking over anyways.

This is incredibly powerful. Without a doubt I will have more questions on weighting going forward, but the Smooth tool is going to take care of a lot the trickiest scenarios I am running into. Great stuff.

You might know this already,

Another good trick I use with selecting vertices is combine that with auto weighting then you can limit the influence of the auto weighting nicely to specific bones.

For example, if I wanted to auto rig a mouth/face, vertex select the lower lip for the area you want the bones to influence, hide all the deform bones except the ones you want to use in the auto weighting, go to weight paint mode select the masking option and with the bones selected chose auto allocate from bones then it will only weight allocate the area you have masked just creating groups for those bones selected. Hiding the other bones stops them influencing the selected bones. Straight away you now have the bottom lip moving independently, repeat for the top and just work your way around the face like that.

Doing that with smooth as well makes it pretty quick to get stuff like face rigs weight painted nicely then tweak and helps you really target the auto weight painting nicely to get predictable results.

You can also use smooth and other weight tools from edit mode as well and there’s a display option to show weight paint in edit mode as you select specific vertex groups, that along with the vertex data copy options in edit mode you can do a lot of the work just from there as well.

Very interesting stuff Umii ! I will try it out as soon as possible. As a matter of fact I might have some facial setup coming my way soon.