Weightpaint Bone Limitation Issue

Hi everyone,

i just rigged a human body and animated it. Then i loaded it into Unity and saw, that certain vertices where not properly bound to their bones anymore (they just did not move or did not move correctly. After that i found out, Unity only supports vertices bound to maximum 4 bones (UE4 supports up to 8 bones - but with a slight perfomance drop if you use more than 4 bones per vertex). After that i used the “Limit Total”.-function of the Weight Tools in Blender. After that the mesh-deformation was also strange in blender - as expected … So far so good but now my question:

Obviously i have to fix this strange mesh-deformation issues after i limited up to 4 bones for each vertex but if i begin to weight paint it by hand to fix it, vertices are put in multiple vertex groups again (due to the weight painting) and i end up with nice deformations but again with vertices that are assigned to more than maximum 4 vertex groups …

Does anyone know how to get around this problem? Maybe Blender has some smart tools are there is a best-practice to avoid this problem.

Perhaps this might work for you. In your weight tools panel paint tools is a entry for Limit Total. This will purge the lowest weight paints from say selected bones vertex groups to a maximum number of groups you set. For example you could select all deform bones and them limit the groups to 4. It will leave you with four highest groups left.

So first of all, I’m really glad I read this, because I’d wondered how Unity handled this, and exactly how many vertex groups it could support.

Unfortunately, if you have a complicated skeleton to start out with, it can be difficult to get this limited.

To directly answer your question, Blender won’t let you paint a vertex unless it’s been assigned to the active group, and limit total removes the vertices from the groups. So you don’t have to worry about it very much-- in order to add a vertex to a group, you pretty much have to do it explicitly, so if you don’t do that, you’re fine. (This can be a bit of a pain in other situations, but here it serves you.)

The right way to limit groups is to think about parents. When you limit total, what needs to happen is that the weights of dropped groups get dropped onto their parents if present. What ends up happening is that those dropped weights get evenly distributed among all bones, which overweights major bones without a lot of children. Like when you drop your detailed facial weights, your face/head bone should be getting all that weight, but instead your neck bone gets some of it, and your neck gets overweighted.

Doing this better might be automatable, if you’re a Python whiz, but otherwise, it’s just tedious. I would instead recommend just doing them from scratch with fewer bones. Keep two copies of your mesh, one with a lot of bones, used for making shapekeys in Blender, and one with few bones, used for doing Mecanim or whatever in Unity.

The best way is to limit total and fix the problems with the remaining vertex groups only, if it’s possible. I haven’t thought of this as a problem in UE4 as 8 is usually a lot more than you need but 4 could be tough. You could also try lowering the amount of bones if you’ve got lots of bones close together. Or just using other methods like shapekey animation instead of bone animation for the face for example.

Blender won’t let you paint a vertex unless it’s been assigned to the active group

I don’t know if i understand you right but you actually can weightpaint vertices that aren’t in any vertexgroups: I create a cube and a single bone. Then i parent the cube to the bone with empty groups. Then i switch bone to pose mode and go to weightpaint of the cube. It is possible to paint weights to vertices. If a vertex-weight becomes bigger than 0 it gets added to the bone-related vertex group. Or did i understand you wrong?