1
$\begingroup$

While I'm currently creating my first character animation within blender I failed to skin the mesh correctly to the generated rig...

I tried to generate the rig over and over again and applied the deform armature with automatic weights as well. Unfortunately, I always encounter the same issue that certain points of my mesh do not move accordingly in the pose mode. Any suggestions on how to fix my problem?enter image description here

$\endgroup$
7
  • $\begingroup$ Have you checked if there is a warning message in the status bar when you use automatic weights? The operation can fail if you have a mesh that has several loose parts or objects and they intersect. $\endgroup$
    – Blunder
    Jan 19, 2022 at 14:37
  • $\begingroup$ does this answer help? $\endgroup$ Jan 19, 2022 at 14:47
  • $\begingroup$ Thanks a lot, but unfortunately there is no error while applying the automatic weights. At first there was an error message which I eliminated by matching the scale of the character. Now the automatic weights are applied without an error. Anyways, as soon as I enter the pose mode and move the model, some meshes are acting crazy for an unknown reason. $\endgroup$
    – Fynn
    Jan 20, 2022 at 8:44
  • $\begingroup$ Automatic weights won't generate an error in some circumstances but will still assign the weights wrong. At that point you need to weight paint the model to fix the mistakes. $\endgroup$ Jan 20, 2022 at 17:42
  • $\begingroup$ You could try to duplicate the model, join all parts into one object (Ctrl+J), then remesh it with the modifier or in sculpt mode, bind this dummy to the armature and finally transfer the weights to the original model (parts). I've seen a video recently where the guy used merge by distance with a very high value instead of the remesh modifier. The goal is to have one solid mesh that works with automatic weights. The drawback is that fingers, eyes, and mouth can merge. So you still need to fix them manually. For details => blender.stackexchange.com/a/223782/107598 $\endgroup$
    – Blunder
    Jan 21, 2022 at 2:18

1 Answer 1

3
$\begingroup$

To create a good base for weight painting you can a dummy model, calculate automatic weights, and transfer the weights to the original model with the menu entry Object > Link/Transfer Data > Transfer Mesh Data (in Object mode).

This operation does the same as the Data Transfer modifier and copies the weights from the active to all selected objects. The advantage is that it's only one operation and you don't need one Data Transfer modifier for each target object.

Note that in Weight Paint mode, the menu entry Weights > Transfer Weights copies the weights in the opposite direction (all selected to active object). It's a known issue.

So when you have a model that consists of a lot of objects that have modifiers on them you can try the following:

  • make a copy of all model parts and move them to a collection
  • keep them selected and use the menu entry Object > Convert to Mesh in Object mode to apply all modifiers to every object
  • join all objects into one (Ctrl+J). That's your dummy for the bone weights.
  • open mesh areas (like sleeves, neck & bottom of clothes) can be closed with the Mesh > Convex Hull operation if you select the area of it. On more complex mesh this is easier than a fill/bridge/grid fill.
  • add & apply a Remesh modifier or use the voxel remesh operation in Sculpt mode to merge all loose mesh parts together and turn the object into one solid mesh
  • alternatively, you can use Merge > By Distance with a fairly high distance value. The result is a "simplified one-mesh model" that you can bind to the armature with Automatic Weights.
  • bind the dummy to the armature with Automatic Weights
  • clear its parent with Alt+P because we only need the weights that are stored now in the vertex groups
  • select all parts of the original model and the dummy object last. The dummy must be the active object, highlighted in orange.
  • transfer the weights in Object mode with the menu entry Object > Link/Transfer Data > Transfer Mesh Data. Then choose Vertex Group(s) in the popup.
  • in the next popup (Adjust Last Operation, F9 if you dismissed it), select Source Layer Selection = All Layers and *Destination Layers Match = By Name. data transfer options
  • note that the original model and the dummy model must be at the same location so the vertices can match (Vertex Mapping = Nearest).
  • finally, bind all objects of the original model to the armature with Ctrl+P. Choose With Empty Groups to keep the transferred weights.

A drawback is that the fingers often get merged together and need manual corrections of the weights. The eyes and the mouth also can have weight problems if you have a more complex model.

Tight clothes should work fine, but wide clothes like a skirt, dress, robe, or cloak often need extra bones on the armature so you can control it better.

$\endgroup$
1
  • $\begingroup$ This is brilliant!! Thank you so much! This produces fantastic results and only requires a separate pass of applying automatic weights for the selected finger bones on the original model. I used the Remesh settings in the Object Data Properties tab set to Voxel (size of 2 cm for my model), with Fix Poles and Preserve Volume enabled. I did a bit of custom smoothing in Sculpt mode before applying Automatic Weights to the dummy model, to get rid of a few spiky vertices (not sure if that would affect weights), but depending on one's mesh, Preserve Volume may also be unchecked for smoother results. $\endgroup$ Apr 12, 2022 at 21:54

You must log in to answer this question.

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