Look for collaborators for metadata rigging system

Hello-

I’ve been working on a metadata driven rigging system for retargeting and building. The general idea is to connect rigs to a network that can be accessed through its own interface. It’s similar to David Hunt’s metadata network he showed in his GDC talk, but instead of storing metadata on rig nodes, I want all of the information to live in the network so it can be exported into a json and be read by other DCCs and engines.

I’ve built the core functions that builds network nodes from json files, connects the network to a rig, and queries the network to get info from the rig.

I really want this to come to fruition but with work I haven’t had time to consistently develop it. If anyone wants to help out, let me know. It be awesome to be able to work together on a regular basis to put this together.

Thanks,

Thomas

when you say this, do you mean connect rigs to a maya network node?

because that is precisely the system David Hunt describes. Maya network nodes connected to rig elements via message attributes. Maya Network nodes “have their own interface” in as much as MEL/maya cmds constitutes an interface

If you mean some other network, then what kind?

In the gdc video he has joints with attrs on them that their tools read. If I’m understanding correctly, the network is setting the attrs on the joints. How I currently have this network set up is by sending the message attr from a joint/ctl on the rig to a user defined attr on the network node. (UpperArm_jnt.message —> meta_arm.jnt_upper_arm). I wanted to do it this way so I can connect rigs without having to add attrs on them. The downside of doing it this way is that you can only interact with the rig through the network.

How I’m accessing the rig from the network is by using cmds.connectionInfo(sfd/dfs = True) and/or cmds.listConnections(). The process of retargeting animations is rig1 node —> metadata network —> json with dictionary of transforms, then json —> metadata network —> rig2 node. The meta data node is the router. Again, the issue is none of this works without tools that allow the user to interact with the network. The benefit is that rigs don’t have to be edited.

You may be referring to the use of Joint Labeling , which is built in to maya’s joint objects.

If I recall the GDC talk correctly, the bungee rigging system used both messages and joint labels. It’s how the pipeline knows “this joint chain is the left arm, and that joint is the elbow” etc

I will say that writing metadata in an external sidecar (json) file has some nice advantages vs having all the metadata “in Maya”

Yeah, thats how they do it. Their user defined attrs are for ik tags, regions, etc. Its really cool. I think the coolest thing they do with it is temporarily deconstruct fk finger chains and rebuild them as ik so they dont have ik chains slowing down the rig while they wait to be used 5-10% of the time.

Below is the basic structure of what I have. I can explain more, but I start by getting module templates saved in a json and converting them into maya network nodes. Then i connect the network to the rig with 2 methods, “best guess” which gets info from a ton of json maps i quickly made with common naming conventions (humanIK, unreal, biped, etc) and by inheriting connections from the parent. Querying the network is via connections, and once I can query it, I can use it. One “limitation” is that the best guess connection system kind of is hard coding the json, but the purpose of this (for me) is primarily to create a bridge between naming conventions. Once you make the map file, every rig with that convention is part of the network. In the picture I imported a human IK skeleton and auto connected it.

any ideas of where this can be improved? I originally got the idea from something you posted like 10 years ago, haha

Just some immediate thoughts, more general rigging system concerns, which you may already have addressed

How does it handle unusual, custom rigging situations? A tail, wings, backpacks? Components that may not match between rigs.

How easy is it to find FK joint associated with a specific CTRL, and vice versa? (mocap transfer)

Can it export and/or communicate higher level rig data to the game engine ? like IK systems, simulation, etc.

Most importantly : any rigging system needs to support updates to the incoming assets. The model change somehow, joints need moved, added. The director says ”make that guy 120% bigger”

just some areas I have had to grapple with over time.