Rigify: Is it possible to have a base meta-rig that, when modified, gets updated automatically acros

Hello,

I’m a new Blender user and have previously been using Maya, mainly for rigging.
At the moment we are trying to move our rigging pipeline from Maya to Blender, but I’ve hit a roadblock.

To give some context: We previously used mgear in Maya and are now using Rigify in Blender. They seem to be similar in the way you build rigs.
We have a lot of characters that all share the same base rig. This is how we currently do it in Maya:

  1. Base guides (base meta-rig): this holds the basic modules that are used across all our characters, legs, arms, spine and face. When something is updated in the base guides it gets automatically updated in the other characters’ rigging files, with the help of referencing (Linking).
  2. Character rig scene: references the base guides. The guides are then fitted to the character and any additional modules are added to the base guides referenced guides, like hair or clothing joints.

So far I’ve tried making a similar setup in Blender but have been unsuccessful. When linking a meta-rig, I can’t seem to add new modules which doesn’t seem to be solvable using the Linked Overrides functionality in Blender.
Another thought was being able to dynamically update an existing meta-rig using a metarig.py file, but I haven’t been able to find information on this.

In short, what we want to achieve is:
Have a base/universal meta-rig, that can be used across multiple characters. We want to be able to update the base/universal meta-rig and have those changes update automatically on the other characters’ meta-rigs. An update could for example be adding a new face joint, correcting a joint chain to use another module, etc.

I’m a little unsure where to look for information on this topic as the Rigify docs doesn’t seem to cover updating meta-rigs like how we want to do.
Anything that could help point me in the right direction would be greatly appreciated.

1 Like

Not sure that I am following you 100%…

So in maya, you have a base guide (base meta-rig) and you change this base - like adding in a 3 bone chain for a tail - then all other character files that use the same base, automatically have the 3 bone chain for the tail added to them?

After making changes to the base, then do you need to re-fit the base to the character?

Here’s what I think you can do…
You create a meta-rig and say you want to add in a tail bone chain. In edit mode, under the Armature Properties in the Rigify tab, there’s a Samples tab. This will allow you to add in other Rigify ‘building blocks’. Select the ‘limbs.simple_tentacle’ type and hit the Add Sample button. That will add in a 3 bone chain. Position the chain where needed.

Still in edit mode, in the header of the 3D view are some menus. One is Rigify, under that menu, choose Encode Metarig Sample. This will generate a python file that can create this metarig. You can save this python file to disk.

Then in the character file, to add in this new custom metarig you created, add in a single bone armature. Open the generated python file in the text editor and execute it. This will give you a metarig with the custom tail bones added in. You will then need to resize/fit the metarig to the character, and then generate to get the full armature.

Maybe this will work for you, IDK.

Randy

Thank you for your response!

I can see I made an error in my original post, highlighted in bold.

The character-specific guides are not added to the base guides, but to the guides that are referenced into the character scene. Hope that makes more sense.

In regards to:

Yes, If I were to add a 3-bone chain, to the base guide (base meta-rig), it would automatically be added to the characters using those same guides. After those changes have been made I do not need to re-fit the guides to the character.
The referencing system in Maya is very powerful in that regard. I could make a bunch of changes to the character’s guides, like adding an extra arm and changing proportions. Then when making a change to the base guides those changes will automatically be added to the character, without needing to re-fit the guides or worry about it messing up any of the character-specific guides.
Hope this made a little more sense.

In regards to your suggestion, I considered something similar, but wanted to see if I could find a more automatic solution like the one I had in Maya.
I appreciate your suggestion and might end up doing something along those lines.

Unfortunately, the library-linking system in Blender isn’t.
I understand what you want to do and it would make for a really powerful rigging system, especially over multiple characters, but based on what I know about Rigify and Library Overrides, I doubt it’s doable, especially easily.

I suspect the bigger roadblock is Library Overrides more so then Rigify or really, the general armature/bone system, which Rigify is very much built on.
Off the top of my head, the only real initial advice I can give is to maybe have a look at the Blender Studio. I know they do somewhat build their characters in a modular way (or at least some characters, Sprite Fright comes to mind), where mesh/rigging/materials I think are all done and updated in difference files and they have a script that on pressing a button pulls it all together and results in a complete character, fully rigged, etc.

1 Like

You can save a metarig with the Encode Metarig option (Only available while on an armature’s Edit Mode)

So the process is something like this:

  1. Create your metarig, and do all the changes/fixes/modifications you need.

  2. With the metarig selected, go to Edit Mode and select all the bones, then go to the menu Rigify / Encode Metarig
    image

  3. Blender will generate a python script with all the settings you created for your custom metarig.

  4. Now go to the text editor and open the newly created metarig.py (this script isn’t saved anywhere yet, it only exists on the text editor)

  5. With the script open on the Text Editor, go to Text / Save and search for the folder where Blender has all the Rigify metarigs files and save it with the name you want

The route of the folder should be something like:
C:\Program Files\Blender Foundation\Blender 4.2\4.2\scripts\addons_core\rigify\metarigs

  1. After saving the .py script on the metarigs folder, close Blender, and the next time you open the program the new metarig will appear on the list (we have one called Human Tail, as you can see)

Now to share it with other co-workers, it depends on your file management setup for the studio, but we currently have a shared Google Drive folder that everyone at the studio can access, so everytime we change or add a metarig I upload the .py file to this shared folder and it’s just a matter of copying it on the install folder of Blender, and that’s it.

Thanks a lot for your detailed answer. However, this isn’t exactly what I looking for.
I was looking for a way to automatically update a child meta-rig, when it’s parent/base meta-rig has been changed.

Thank you! I’ll have a look at how Blender Studio does things and see if I can get any workflow tips from them. I’ve only had a look at their CloudRig system, but as you said, it’s not so much the rigging system but rather the Linking/Library Overrides that’s the issue.

I’ve sketched out a pipeline that could work, however, it’s also going to require some work in regards to the script that needs to be made.


I hope it makes somewhat sense.

Yup, Rigify, CloudRig, Auto Rig Pro, etc doesn’t really matter, it’s all built on the Armature/Bone system and then dependent on Linking. So basic upshot is the same.

I can see how that pipeline should work. Basically take any changes to the BaseMetaRig and combine with local character specific metarig changes to then build the final control rig.

As you say, the python will get interesting, most likely in trying to handle any potential conflicts between the BaseMetaRig and the Child MetaRig.

2 Likes

So, according to the image, what you call meta-rig child is just a modified version of the base meta-rig?

If that’s the case, then using linking and library overrides is in my opinion a bad idea. You can only propagate changes made to the original linked file if you don’t make the object (an armature in this case) a single user to edit it locally. And that’s exactly what you need to do with a metarig, so linking it to then make it fully local defeats the purpose of linking in the first place.

The problem with trying to create a workflow that depends on the base meta-rig being saved on a linked .blend file, instead of encoding it, is that Blender doesn’t have a (easy) way to check if there are any differences between the original file and whatever changes you made to the linked object after it has been made local and single user. At that moment the reference to the original linked file is lost.

I’d still suggest to use the encoding feature, this way the custom base meta-rig doesn’t depend on a specific blend file, no linking or library overrides are needed, and it is instead kept as a .py script (let’s say it’s called base_metarig.py) that you can save directly on the rigify install folder.
So, if you make changes to that base_metarig.py file, or create a new version, you would still need a custom script to check the differences between the two versions, but that would be easier to setup, because it’s just comparing two text files, basically.