0
$\begingroup$

I have 2 models: Model #1 is rigged and skinned and animated (with over 50 different animation fbx files):

enter image description here

Model #2 is not rigged and not skinned. enter image description here

I would like to use the animations of Model #1 on Model #2.

I would need to adjust the bone positions so that it would work on model #2.

How could I transfer the rig of model #1 onto model #2?

Thank you.

$\endgroup$
4
  • $\begingroup$ If you can upload a blend with decimated versions of the characters, I would prepare a step by step answer. $\endgroup$
    – Leander
    May 10 '20 at 12:31
  • $\begingroup$ @Leander Thank you, I will do that. Give me 10 minutes. $\endgroup$
    – tmighty
    May 10 '20 at 12:33
  • $\begingroup$ The prefered plattform for sharing is to upload your (small) blend to blend-exchange.giantcowfilms.com and the add the link to your question with an edit. And if there was a test animation, that would also be beneficial. $\endgroup$
    – Leander
    May 10 '20 at 12:41
  • $\begingroup$ @Leander Done, thank you. $\endgroup$
    – tmighty
    May 10 '20 at 12:50
3
$\begingroup$

I renamed the armature model1 to rig1. I suggest you adapt a naming system which differentiates between armature/rig objects and geometry/mesh objects.

Preparation

To better see the armature during the process, I select rig1, active In Front and choose Wire for the display as property. This way the rig is always visible in front in wireframe mode (less in the way but clearly visible).

x axis

Next I will create a T-Pose like action (take), to which I can always switch to if I modified some transformations.

  1. Select the rig1.
  2. Go into Pose Mode.
  3. Select all bones. A
  4. Clear all transformations. AltG, AltR, AltS
  5. Press I to open up the Insert Keyframe Menu and choose LocRotScale to insert the appropriate keyframes.

t-pose

Open up the dopesheet editor (1), and switch to the action editor (2) mode. Here you can see the keyframes we created with the I hotkey and also the action which was automatically created. Different actions can be stored independently from rigs in the blend. To preserve the action, even we do not need it, create a "fake user" for it (3) by clicking on the shield icon next to the action name. In the action dropdown, you can also see the other action Armature.001|Loco_Walk|BaseLayer which the other armature referers to.

dopesheet

I renamed both actions and made sure they both have fake users. With the Rig selected, we can preview both actions by selecting them in the action editor. They have an F next to their name, if they have a fake user.

As both actions are protected now, I delete the unused additional armature.

actions

Create the other armature

Select the armature rig1 and duplicate it by pressing ShiftD in the 3D Viewport. In the outliner, there will be the duplicated rig.001. Hide the original model and original rig, by clicking on the disable in viewport icon (TV symbol).

objects disabled

I rename the duplicated rig to rig2.

Briefly unhiding model1, I select model2 and position it as close as possible on top of the model1. I am in right orthographic view and eyeball the position while using the transform tools, G, R, S.

Then I go to the properties panel and open up the modifier section. We will use a data transfer modifier to transfer the weight groups from model1 to model2.

  1. Select model2 and add a Data Transfer modifier to it.
  2. Choose model1 as the source object (4).
  3. Enable Vertex Data and Vertex Groups (5), then choose Nearest Face Interpolated as the transfer method. (6)
  4. Make sure the evaluate in global space button is checked (7).

data transfer

Clicking on Generate Data Layers (8) will generate the needed vertex groups.

vertex groups

If all vertex groups have been created, Apply (9) the data transfer modifier and hide the original model1.

The vertex weights have now been transferred to model2 and can be examined in Weight Paint mode.

weight

Connect the armature

With the weights already transfered, we only need to connected armature. Select model2 and Shiftselect rig2 in the 3D Viewport. It is important that rig2 is the active object. Then press CtrlP/kbd> to open up the parent menu. Choose Set Parent To Armature Deform

parent

This will parent model2 to rig2 and add an armature modifier.

model2 should now move if we assign the walk action to rig2 in the action editor.

transferred

This is how far transferring the weights and armature goes, since the object vary in their shape.

The next steps are

  • manually reposition bones of the rig2 armature in edit mode
  • correct the weights of model2 in weight paint mode
  • add new bones and new weights
$\endgroup$
14
  • $\begingroup$ Wow, thank you so much! What an amazing tutorial!! Please give me so time to go through it. $\endgroup$
    – tmighty
    May 10 '20 at 13:59
  • $\begingroup$ Could you please tell me what you mean by "by selecting them in the action editor"? I don't see how I could switch from seeing the created keyframes to seeing the model to preview it. Thank you! $\endgroup$
    – tmighty
    May 10 '20 at 19:28
  • 1
    $\begingroup$ By splitting an area and opening the 3D View and the Dopesheet side by side. $\endgroup$
    – Leander
    May 10 '20 at 20:10
  • 1
    $\begingroup$ Select the vertex groups in weight paint mode. You will only see the weights of the currently selected group. If then, still, all weights are blue, maybe unhide the model1 before applying the data transfer. $\endgroup$
    – Leander
    May 10 '20 at 21:11
  • 1
    $\begingroup$ It happens when the bones axes are not set accordingly during an fbx import. Search for "fbx import, bone orientation, forward/up axis" $\endgroup$
    – Leander
    May 12 '20 at 21:06

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.