Post Processes

MRS : Landing | Members | Queue | Forum | DocsLibrary | How

Generally speaking there are a number of post process we want to hit after we do a rig build. Let’s walk through them.

Most of what we do will be done via MRS Builder.


These items work on a puppet wide basis where as the contextual menu items work by selected rigBlock and context.

Gather Rig Blocks

mrsBuilder>Post>Gather Blocks

Use the post call to group all the rig blocks we’ve got laying around in our scene under an easily hideable group. You’d want to delete these for any rig files.

I try to keep my template files at the skeleton state and don’t keep them in the built rig files.

Mirror Verify

mrsBuilder>Post>Mirror verify

If you want mirroring to work, you need to run this. This call walks our rig and maps our mirror setup following Red9’s mirror setup. It does this by:

  • Walking our module/puppet setup to get our hierarchical relationship
  • Maps mirror modules/controls it can figure out
  • Indexes Controls to follow this order
  • Verifies all controls have the Red9
  • Gather Space Drivers
  • Grabs and space driver objects that aren’t where we want them and puts them in the hierarchy. This is for our dynParent setup. Target objects don’t know where to go at creation and need to be collected at the end.

Up to Date?

mrsBuilder>Post>Up to date?

Rudimentary call at this point. Eventually we’d like this to do more than what it does. What it does do is:

  • Check each rig module’s version against the stored __version__ dat on the rig Module
  • Let’s you know what isn’t up to date.

Much room for expansion here.

Gather Space Drivers

mrsBuilder>Post>Gather space driver

Clean up call to gather world space dynParent group drivers to our puppet.



  • Bake set – makes a bake set (currently targetting Unity workflow)
  • Delete set – Same but for deleting stuff
  • Export Set – Implemented in Dec 2018. This attempts to gather geo and joints in an export set


mrsBuilder>Post>Is Historically Interesting>

We’re experimenting with this one on Brad (Rigging Dojo) recommendation. We turn off the ihi attribute on all nodes in our scene which makes our channel box much much cleaner. This is our first implementation and could use some work.

WARNING: Current implementation is scene wide


mrsBuilder>Post>Puppet Mesh>

An idea we’re playing with. It generates an part-based or unified mesh to use for modeling ref or a skinning frame

  • Unified – Creates a unified mesh from all of the prerig loft meshes of the entire puppet so you have one mesh
  • Unified[Skinned] – …skinned to the bind skeleton
  • Parts Mesh – Creates a separate mesh per part…
  • Parts Mesh[Skinned] – …skinned to the bind skeleton
  • ProxyMesh[Parented] – …parented
  • Delete – Delete whatever we have stored as the puppet mesh

Utilities – Contextual

Remember contextual items work per rigBlock based on context. Not puppet wide unless you’re in a masterSelect/below setup.

Verify Proxy

mrsBuilder>Utilities-Contextual>Rig ----------- Verify Proxy

Creates the proxy mesh you’ve seen. It also replaces the direct control shapes of the rig with transparent proxy mesh shapes for easy selection

You can modify the root geo option on some rigBlocks by the proxyGeoRoot attributes. See shared settings for more info.

Reset Controls

mrsBuilder>Utilities-Contextual>Rig ----------- Reset Controls

Reset all the rig controls of the puppet.

Query Nodes

mrsBuilder>Utilities-Contextual>Rig ----------- Query Nodes

Another thing we’re playing with. During rig creation all the nodes created during the rig process are wired to the module so that we can cleanly delete them.

You can query them though note, there are a LOT of nodes. This will be very helpful information as we dig into rig optimization.

Here’s an example report on a leg rig module.

# cgm.core.mrs.lib.block_utils : ---------------------------------------------------------------------------------------------------- # 
|rigNodes_get| >>  aimConstraint : 22
|rigNodes_get| >>  blendTwoAttr : 9
|rigNodes_get| >>  clamp : 3
|rigNodes_get| >>  closestPointOnSurface : 12
|rigNodes_get| >>  cluster : 2
|rigNodes_get| >>  clusterHandle : 14
|rigNodes_get| >>  condition : 67
|rigNodes_get| >>  curveFromSurfaceIso : 4
|rigNodes_get| >>  curveInfo : 3
|rigNodes_get| >>  dagPose : 4
|rigNodes_get| >>  distanceDimShape : 6
|rigNodes_get| >>  follicle : 44
|rigNodes_get| >>  group : 95
|rigNodes_get| >>  groupId : 11
|rigNodes_get| >>  groupParts : 11
|rigNodes_get| >>  ikEffector : 3
|rigNodes_get| >>  ikHandle : 3
|rigNodes_get| >>  joint : 53
|rigNodes_get| >>  locator : 30
|rigNodes_get| >>  materialInfo : 1
|rigNodes_get| >>  multiplyDivide : 31
|rigNodes_get| >>  nurbsCurve : 429
|rigNodes_get| >>  nurbsSurface : 12
|rigNodes_get| >>  objectSet : 12
|rigNodes_get| >>  orientConstraint : 14
|rigNodes_get| >>  parentConstraint : 12
|rigNodes_get| >>  phong : 1
|rigNodes_get| >>  plusMinusAverage : 32
|rigNodes_get| >>  pointConstraint : 9
|rigNodes_get| >>  pointOnCurveInfo : 12
|rigNodes_get| >>  poleVectorConstraint : 1
|rigNodes_get| >>  rebuildCurve : 4
|rigNodes_get| >>  setRange : 3
|rigNodes_get| >>  shadingEngine : 1
|rigNodes_get| >>  skinCluster : 4
|rigNodes_get| >>  transform : 65
|rigNodes_get| >>  tweak : 5
|rigNodes_get| >>  unitConversion : 19
|rigNodes_get| >>  Total: 1063 | (node: 'L_leg_limbBlock' | mClass: cgmRigBlock | class: <class 'cgm.core.mrs.RigBlocks.cgmRigBlock'>)

Connect/Disconnect Rig

mrsBuilder>Utilities-Contextual>Rig Connect ---------- [Connect][Disconnect]

Because we have a separate rig structure from the bind one, this connects and disconnects that setup

Other bits

Here’s a running list of other stuff we do.

  • Delete rigBlock group
  • Shaders
    • Delete duplicate shader nodes.
    • Check paths for relative pathing

And after that?

  • We’d skin in a final mesh if we had one
  • Throw it to some animators for testing and iterate
  • Generate a proxy mesh for a modeler to work from and tweak our template when we got the final mesh and rebuild.

After we rig, we’re done. Right? Right?!

After we think we have everything how we want it, we should check our controls again.

When we think we have it all, then it’s best to do a little test animation or throw it to an animator to get some notes for the inevitable next iteration.

Josh Burton

[MRS Project Lead | CG Monks] Josh is an animator turned TD who hails from Oklahoma, pre-undergrad in the Marine Corps, animation basics at Savannah College of Art and Design, cut his teeth in gaming and commercials before co-founding CG Monks and more recently the CG Monastery. The Morpheus Rigging System is a culmination of years of R&D and he is now thrilled to see what users can create, collaborate and expand on with this open source MRS platform.