40
$\begingroup$

I cant figure out why I get problems rigging this mesh.

I get an error stating

Bone Heat Weighting: Failed to find solution for one or more bones

enter image description here

Blend file

$\endgroup$
3
  • $\begingroup$ Please, can you describe more precisely what is the problem? I can't help you because I don't know what is the issue here... Is it about vertex groups and weight painting? Or about the armature and hierarchy of the bones? Please clarify your question. $\endgroup$
    – Polosson
    Sep 17, 2014 at 21:55
  • 2
    $\begingroup$ @Polosson I think the OP tried to parent their mesh to an armature with automatic weights, but it gave an error. $\endgroup$
    – gandalf3
    Sep 17, 2014 at 22:15
  • 1
    $\begingroup$ Hey guys! I'd post an answer but I can't. Took me a while to figure out why i was experiencing this. I am targeting UE4, so my scale is super small. This was the issue. I scaled up 100x and the weighting was able to succeed when re-parenting... $\endgroup$
    – Brad Goss
    Apr 22, 2020 at 4:55

5 Answers 5

73
$\begingroup$

I know 2 situations where this problem raises:

  1. When the Object consists of 2 or more separated (not connected) meshes which intersect. This could be solved by fixing the mesh topology, like connecting the intersecting meshes into one single mesh, and by fixing your model to avoid the intersecting areas.
    Or try to separate mesh by loose parts (P ⇾ by loose parts) and parent it one by one.

  2. When the object has duplicate vertices. This can be solved by removing doubles in Edit Mode M ⇾ By distance (W ⇾ Remove Doubles in Blender 2.7x)

I do not know the exact reason why the algorithm fails in these cases, and if there are other cases as well where it fails. However, it must be related to ambiguities while calculating the weight ratios for the involved vertices.

I took a quick look into the blend file that was provided by the OP. I found the head of the character has many duplicate vertices (about 320). Removing doubles solved the issue in this particular case.

$\endgroup$
6
  • 1
    $\begingroup$ As well as duplicate vertices, non-manifold geometry can cause this too. $\endgroup$
    – Sazerac
    Mar 12, 2019 at 0:48
  • $\begingroup$ "Remove doubles" fixed the problem for me $\endgroup$
    – Jayesh
    Jun 28, 2019 at 14:32
  • 10
    $\begingroup$ Blender 2.81 => Edit Mode / Select / Mesh Menu / Clean Up / Merge by Distance $\endgroup$ Jan 20, 2020 at 0:17
  • 2
    $\begingroup$ Cheers OP and @AlexNolasco that saved me. Blender 2.8+ users, "Remove doubles" is renamed to "MERGE BY DISTANCE" as mentioned above! $\endgroup$
    – Joehot200
    Apr 14, 2020 at 13:28
  • $\begingroup$ For the 1 case, solution may be in separating by loose parts. $\endgroup$
    – Crantisz
    Oct 11, 2022 at 11:39
10
$\begingroup$

I removed two duplicate verts from my model and it helped.

When that alone did not fix it, I also removed the Subdiv Modifier and was able to generate automatic weights. I had been able to assign envelope weights beforehand.

$\endgroup$
1
  • 1
    $\begingroup$ you have enough reputation points to edit posts and improve them $\endgroup$
    – user2816
    Jun 8, 2016 at 19:34
10
$\begingroup$

A few extra things that I've seen cause autoweight failure:

  1. Non-manifold geometry. In particular, edges that connect 3 or more faces. These can be found by using the "select non manifold" operation in edit mode on vertex or edge mode and changing it to operate only on "multiple faces" (but really, you should be fixing anything non-manifold, with the occasional exception of "boundary" if you know what you're doing.)

  2. Degenerate quads. By this, I mean quads where three or more verts are collinear. This usually happens from somebody being overzealous with advice to make everything a quad, and not having a great idea how to do that. If you have 3 collinear vertices, just dissolve the center one and live with a triangle. A triangular quad is worse than a triangle anyways.

  3. Vertex density. You see this when people, usually beginners, try to weight dynotopo sculpts. The reality is you shouldn't try to rig a dynotopo sculpt to begin with! Even if you manage to get weights, a dynotopo sculpt is too vert heavy to pose. If you want to rig a dynotopo sculpt, do it via mesh deform from a low poly, or bake its normals to a low poly. I consider 100k verts to be a generous upper limit for vert count in a mesh I want to autoweight. (Saddle shapes seem to be especially vulnerable to vertex density-related failure.)

  4. Scale. And by this, I don't mean object transforms of the mesh or armature, but literally, how big your mesh is in Blender units. If you make models to the "recommended" scale of 1.0 unit = 1.0 meter, you will regularly encounter autoweight failure. If you instead make models to something like 10 units = 1m, your autoweights will work. Of course, if you're having trouble with this and don't want to change your scale, you can always scale up (armature + mesh), autoweight, and then scale back down. I can see no reason why actual world scale should cause problems with autoweights, but it does. I believe it's linked to vertex density in 3) above, as denser meshes seem to require larger scales for autoweights.

$\endgroup$
4
  • 4
    $\begingroup$ Scaling was my problem. My model was too small. I did a 10x scale up. then applied the scale transform. It worked ! $\endgroup$
    – Tom
    Feb 17, 2022 at 13:37
  • $\begingroup$ Scaling up solved for me too. $\endgroup$
    – Antonio
    Mar 21, 2022 at 15:10
  • $\begingroup$ Brilliant. I had removed-by-distance on a rather high-density mesh (killed off 4000+ verts) and even with some non-manifold geometry was still able to generate a rig using your suggestion on scaling, Nathan. $\endgroup$
    – RobinsSea
    Mar 31, 2022 at 5:44
  • $\begingroup$ Scaling did the trick. Thank you so much for your tip! Was messing around with non-maniforld verts and stuff until finally just scaling the model up solved the whole issue. $\endgroup$ Nov 17, 2023 at 3:13
5
$\begingroup$

I found that my vertices were too close together once I used the relax option twice from the W menu, right click bottom option in 2.82a, my rig and model paired perfectly, only a little tweak on the head and jaw bone.

$\endgroup$
5
$\begingroup$

As an update to this very useful question, in 2.92 I often run into this after a major sculpting session, when I'm trying to attach my mesh to an armature. Sculpting with dyntopo can give you a crazy vertex count that is easy to screw up, but we have a few new features that can come to the rescue.

"Magic button" methods like the earlier ones tend to come with a price—while triangulation and quads-from-tris works for the most part, sometimes I'll have an irrevocable count of additional triangles in my mesh which it just can't merge into quads. Remesh works reliably, but destroys the sculpture and again, gives me an absolutely unreasonable vertex count.

The Duplicate, Remesh, and Transfer Method

To begin, duplicate the mesh (Select and ⇧ Shift + D in Object mode). Then, apply Remesh to the duplicate, on sharp, with just enough iterations to cover the region of your armature's control.

Don't worry about what it does to your duplicate's geometry. (Feel free to play with the other settings if they work better in your situation.) You will now have a mesh which will reliably animate, but loses all of the character of the original.

The next step is to parent the armature to the new mesh. (Select the mesh, then the armature, then Ctrl + P). Select With Automatic Weights. You're now almost done, the new mesh should animate with your armature well.

Go back to your original, and add a Data Transfer modifier. (It should be in the top left corner for 2.92.) What this does is transfer features of a different mesh to their best match in the host mesh. You'll want to check Vertex Data and Vertex Groups, on Nearest Vertex for mapping mode. Since ultimately bone weights are just vertex groups, and we've created automatic ones for our duplicated mesh, this will copy them over to our original.

Click Generate Data Layers so it does its job. Go make a coffee, it's probably going to be a bit before it's finished. You can verify that it's doing its job afterwards, but expect significant delay, as we still need to do the next step to make it efficient—apply the modifier. Go back to your modifiers in Object mode, select Data Transfer, and hit Ctrl + A to apply it. (Again, expect a wait on this; it's just the result of your very detailed mesh, it is working.)

Once Data Transfer is applied, you can delete your new mesh and work with your original. In my experience, no matter how bad your mesh topology might be, this will do the job for animation.

For as long as the link works, I go over this in detail on my blog.

And if that doesn't work...

You can still get your hands dirty.

The other option is to pick apart your mesh by selecting part of it in edit mode, ⇧ Shift + D-ing it, and parting by selection ( P); and then trying to animate the chunk you duplicated off until you've found the location of the offending geometry. It can take a while, but it will allow you to efficiently identify the problem and make a manual change to fix it. (Remember that there are often multiple issues, not just one.) The remesh-and-transfer method above works in most cases.

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .