Skip to content

Weight Transfer in Blender

Weight Transfer in Blender

Weight transfer technique can provide much better results than automatic weighting, especially in cases when you have already skinned mesh similar to your model. For example, weights from base body model are transferred to a t-shirt model, or you’ve already skinned another model with similar apparel. Many steps are the same as for automatic weighting described in the previous section.

Import models

  • Align the asset with the reference model as accurately as possible using translation, rotation and scale. If you’re using reference body meshes and would like to leave them as occluders make sure meshes do not intersect. Minor intersections that can be removed with further pose alignment are fine.

Align models

  • Bake transformations into the target mesh: select your model in Object mode and use Object -> Apply -> All Transforms.

  • Some tips on how to prepare mesh for more accurate skinning:

    • Remove holes in the mesh - make sure all the vertices on your mesh are welded/merged together. You can use Merge By Distance tool available in Modeling mode (Mesh -> Merge -> By Distance).

    Remove holes

    • Recalculate normals. In Modeling mode, select all vertices and use Mesh -> Normals -> Recalculate Outside

    Recalculate normals

  • Now it’s time to fit pose of reference mesh with the target model.

Align pose

  • In Pose mode rotate bones to align armature with the model.

Rotate bones

  • Apply current pose modifiers to reference models:
    1. In Object mode select each reference model.
    2. Go to its modifiers and apply Armature.

Apply armature modifier

  • Make current pose the rest pose:
    1. Pose -> Apply -> Apply Visual Transform to Pose.
    2. Pose -> Apply -> Apply Pose as Rest Pose.

Rest pose

  • Set Armature modifier back for all reference models.

Armature modifier Armature modifier

  • Transfer weights from the reference mesh to the target.

    1. Go into Weight Paint mode.
    2. Select models to transfer weights from (reference).
    3. Then lastly, select the model to transfer weights to (target).
    4. Transfer weights: Weights -> Transfer Weights.

    Armature modifier

    1. In the menu select By Name in Source Layers dropdown.
    2. Select Vertex Mapping method. We recommend to try Nearest Face Interpolated first. Other methods may provide better results depending on geometry of reference and target.

    Armature modifier

  • The only thing left is to add Armature modifier to the target. After that current pose will influence vertices of the target mesh.

  • Optionally you can make Armature the parent of the target model to reflect scene hierarchy.

Armature parent

  • Check skinning in Pose mode. Make sure meshes deform correctly.

Test pose

  • Weight transfer may not provide 100% accurate result. You can use Weight Paint tool to correct weights and achieve higher accuracy.

Weight Paint

  • Remove meshes you don’t need, Armature is required part of a model.
  • Export your model (optionally with body mesh to be used as occluder).

Export gltf

  • In your app use one of body pose plugins to add model to a scene.

In general, weight transfer, if applicable, provides better skinning than automatic weighting. If you used pre-skinned body model as the reference, target model after skinning deforms correctly in different poses, and you will use the reference as occluder - everything should work fine in AR. If model behaves well in Pose mode but still renders weird in AR using the SDK, consider tunning PoseTuneParams as per their documentations.

You can find more materials about weight transfer and painting in Blender docs: