Animation transfer from B to B.

Hello everybody, I was wondering, if it is possible to transfer animations from one blender rig to another rig in blender ? I have a fair bit of animations I would like to give to another model, I understand you can individually copy the keyframes if needed, but is there a way to transfer animations, rotations, locations from one bone to another. For example, my first bone is called “neck_old” and there are rotations done in x-axis, but my new bone is called “neck_new” and my bone roll is different, i would like to assign new rotations to the second bone, to match my original animation.
Thank you for reading.

Assuming the rigs are the same, you can import the action into your file and then select the rig, select the action in dope sheet and you should be good to go.

I’ve been working on this and wanting to do this for a long, long time, but the answer is that it seems that it’s a fairly complex issue that requires an understanding of quaternions, Euler rotations, and matrix rotations.

Because the way Blender registers rotations and displays them in the UI is based on the orientation of the bone in the rig(as opposed to the world’s coordinate system), without more tools it’s virtually impossible to move animations between rigs. Differences between rigs such as bone roll and head>tail vector can create huge differences in posing, much less animation.

For example, try making a pose on a bone. Now go into edit mode and move the tail around. If you go back into pose mode, you’ll find that your pose has changed. This is because the axis used for registering the transforms is based on the head>tail vector(and roll). By extension, this means that in order for a pose or animation to be transferrable between rigs, as the above poster said the rigs must be the same, although this wouldn’t be a problem if we could instead register by global coordinates.

There are a couple of workarounds in existence: exporting an animation to BVH can help, as animations baked to BVH(according to my tests) are baked to global coordinates. Unfortunately, as I said, this is baking, so you’ll lose all your interpolation curve data and gain a mess of keyframes. Another method would be simply to make sure your rigs are consistent with each other, of course. However, you can probably imagine this isn’t the easiest thing ever unless you have some experience and know exactly what you’re changing, as any change to the head, tail, or roll of a bone at all will alter the way the bone receives animations. Additionally, if you don’t use [0,1,0] coordinates for your head>tail vectors and 0 roll, your animations won’t easily work on anyone’s rigging but yours, or between programs.

I should mention there are some cheap workarounds, like parenting nulls to your bones and then transferring information from that. However, that pretty much requires Python scripting to do efficiently.

The short answer is, as the poster above me said, if your rigs are COMPLETELY the same, including all the head>tail vectors and rolls of all analogous bones involved in the animation, yes, your animations are transferrable. If not, get your Python ready to do some mathematics or(probably easier) completely revamp your rig if you want to keep your keyframes and interpolation curves.