0
$\begingroup$

I need to transfer weights from one mesh to another but only for a select few bones. The whole armature is a total of 72 bones, but I need to transfer the weights from only 30 of those bones.

The vertex group names are identical on both objects, but the weight is wrong for 30 of the bones that I need to fix.

Currently, I'm going about it like this.

  1. Select Source mesh
  2. Select Vertex group with correct weight
  3. Shift Select Destination mesh
  4. Select vertex group with incorrect weight
  5. Go into weight paint mode and then transfer weights for active layer.
  6. Since I select a different vertex group on the source mesh as it's not the active mesh in weight paint mode;
  7. Go back to object mode.
  8. Start the whole process again for the next vertex.

There must be a less tedious way of doing this.

Is there a way to create a 'collection' of vertex groups that was be selected to transfer weights? Or perhaps have 2 different 3d viewports one with each mesh where the outliner and properties panel responds to the 'active' viewport so you can have different active objects in the different viewports.

I don't know if there is anything else I could do.

$\endgroup$

1 Answer 1

1
$\begingroup$

In Blender 3.0, the shortcut Alt+Q switches objects when you hover the mouse over the target object. This works in all modes, including the Weight Paint mode.

When all the vertex groups that you want to transfer have an identical name on both objects, you can transfer weights in one go:

  • duplicate the source object (=work copy) and delete all vertex groups that you don't need. Keep the 30 that you want to transfer. You can lock vertex groups and delete all unlocked in the dropdown menu of the vertex groups.
  • in Weight Paint mode, do the Transfer Weights operation and select By Name for Source Layers Selection and All Layers for Destination Layers Mapping in the popup that appears in the left bottom corner (Adjust Last Operation F9).

The menu entry Weights > Transfer Weights in Weight Paint mode transfers the weights from the selected objects to the active object (=highlighted in light red).

screenshot

There are 4 ways in Blender to transfer weights/vertex groups:

  1. the API operator bpy.ops.object.data_transfer does all the work and allows to specify the direction of the transfer (active object <-> selected objects). It's called by the menu entries

  2. in Weight Paint mode, the menu entry Weights > Transfer Weights uses use_reverse_transfer=true and transfers the weights from all selected objects to the active object

  3. in Object mode, the menu entry Object > Link/Transfer Data > Transfer Mesh Data transfers the weights from active object to all selected objects

  4. the DataTransfer modifier transfers the weights of one source object to the modifier's owner. If you want to transfer the weights to several objects then each of them needs a modifier.

$\endgroup$
3
  • $\begingroup$ Alt-Q is new to me.. Thanks! very handy! I had to try it straight away.. works in all 'mesh' modes, but not Object Mode, for me. $\endgroup$ Mar 12 at 5:34
  • $\begingroup$ Oh wow, thank you very much for this! Learned a lot from this answer. $\endgroup$
    – Altered
    Mar 14 at 14:57
  • $\begingroup$ But this doesn't work in 3.0.1 if you have bones also selected. In weight paint mode you can switch between bones if you select your armature first, and then a rigged submesh. But the Alt-Q shortcut doesn't work in this mode, which is very bad. $\endgroup$ Jun 3 at 9:17

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.