How to transfer animation from an unreferenced rig to a referenced rig
Kiel Figgins - 3dFiggins.com
A common technical issue in animation is getting the animation from an unreferenced character back onto a referenced character. Sometimes the character is broken, the animator started working inside the rig file and a newer rig version is available, or any other reason has caused the referenced file to be imported. Whatever the cause, the result is the same, the inability to swap the rig for another one or work with tools/pipeline that expects a namespace/referenced file. To learn more about the benefits and workflow of file referencing, feel free to check out my other write up on the topic here.
Below are the steps I use to transfer the animation in these instances. The more complex the animation or different the rigs, the harder a clean transfer is. These steps assume that the rig is the same (the one you've transferring to and from).
1. Inside the animation file with the imported rig, bake down the animation layers, constraints and any custom setups, save this as a _Baked file (for example, my_animation_v01_Baked.ma)
Img 0 - Animation layers to bake down
Img 0b - Results of baking down Animation layers
2. Create a new file
3. Reference in the character rig
File > Create Reference > Option Box
Reference Options > Edit > Reset Settings
Reference Options > Namespace Options > (X) Use selected namepsace as parent and add namespace string: char
Click Reference and locate the character rig file
Img 1 - Reference Settings
4. Reference in the _Baked animation file
File > Create Reference > Option Box
Reference Options > Edit > Reset Settings
Reference Options > Namespace Options > (X) Use selected namepsace as parent and add namespace string: anim
Click Reference and locate the _Baked animation file
Img 2 - New Rig and Animation file referenced into new scene
5. Download the kfAnimTransfer.mel tool here (Right Click > Save As). This is a small tool to help speed up the process of copying keys from one object or hierarchy to another
6. Run kfAnimTransfer.mel in your Maya scene
Windows > General Editors > Script Editor
Script Editor > File > Source Script > locate the kfAnimTransfer.mel file
In a MEL tab, run the following command:
kfAnimTransfer();
A small UI should open:
Img 4 - kfAnimTransfer.mel UI
7. In the Outliner, select top group of the anim:rig then select the top group of the char:rig
Img 5 - Selection order for Anim Transfer
8. In the Anim Transfer UI, click 'Transfer Keys (Hierarchy)`
9. Now compare the results as you may need to key unkeyed channels/offset/spaces to get the full transfer to line up.
Img 6 - Initial results of Anim Transfer
For example, in this scene I had to adjust the following:
CTRL_Kunoichi_World had an unkeyed offset on tz
Once I keyed that, I repeated the Transfer Keys (Hierarchy) again
Img 7 - Keying unkeyed channels
You may hit an issue where keys from the animation file are causing problems. In this case anim:CTRL_PropB has a 000 scale. This is undesirable, but I'm unable to change the keys since the file is referenced. With that in mind, there are a few options:
A) Fix the keys on the char:CTRL_PropB (set the scale back to 1, delete keys, etc)
B) Windows > Settings/Pref > Settings > File Refernces > [x] Allow edits on referenced animation curves
C) Update the _Baked animation file to fix the keys there, then reload the reference into the transfer scene
I personally perfer A, since editing referenced curves can be a touchy, plus the end result is a clean char: animation
10. Once you're pleased with the transfer you can remove the anim: file reference
Outliner > Select the anim: top group
Right click > Reference > Remove
Img 8 - Removing the reference from the Outliner
11. Save the file and you should be good to go
Other Opinions, Further References, Typos, and Grammar Issues please contact KielFiggins22@gmail.com