MRS Update – 05.03.2019

Current Sprint: Class Build

    • Finaling
  • mrsAnimate
    • Speed optimization
    • Bugs/workflow
  • Workflow
    • Continuing to iterate

Big Picture


  • MRSWORKSHOP branch is now current for class
    • I’ll be hitting bug fixes here as the batch of students works through the material
  • MRSDEV merged to MRS

Important Changes

MRS Branch Update –

If you’re currently using MRS you’ll wanna look at these until I get a chance to update the docs.

  • Tech
    • Wiring rework | Change dhow some main data sets are stored and called. There is a fast call method on by default if the wiring is there mControlsAll for example is a multi message connection to all the controls of a module or puppet. The speed increase over walking the data sets was a lot.
    • Mirror verify rewrite | Mirror verify wasn’t getting all the controls. Rewrote it.
    • Label wiring | Added wiring for hiding/showing joint labels
    • Docs updated
    • Took a pass on simplifying the setup to make things read better
    • Reworked how some things loaded to make the add menu in particular not hang on load. The initial data gather for that happens on ui load rather than on menu button press
    • Top Menu Rework
      • Split out the old contextual menu to 3: Block, VisAdvanced
      • Added new Select menu
    • Vis > Labels | added new Joint label toggling
    • Removed old contextual attr set in the ui because we never used them and we have new ways to edit the items we used to want to there via the name list tech
    • Factored out the block list tech to a more reusable format
    • Advanced
      • Added Form> Resize handles to fix weirdness in rebuilds.
    • New scene picker scroll list for use with other systems.
      • Initial connecting to context via new context list mode
    • New global MRSDat global for MRS animation functions. Rewrote the time context and context callers
    • Major speed increases for context work
    • Push | new call for pushing current values in time context
    • animFlip | Direct connect to  red9 call
    • Core | new context core for using shorter lists of module controls to speed up some functionality when you don’t need every one processing.
  • General
    • Moved  rp handles to go to the joint chain at prerig for LIMB, SEGMENT, HEAD
    • Size change for motion joint helper
    • Added simple profile to replace box. Box is now sizable
    • Added cylinder profile
    • Bug fixes
  • LIMB
    • BaseIK shape | This now hides with the visRoot toggle at user request
  • Segment
    • IK End/Chest Shape | This should conform better to your form mesh
    • Pelvis proxy | This should conform better to your form mesh
  • CORE
      • cgmScrollList | NEW | factored out the first new blockList stuff to a resuable format for other stuff. Acts as a regular mNode ready obj list now
      • uiStatePickerMenu | General block component picker generator. See section below
      • rebuild | New call to possibly replace update which hasn’t worked as intended
      • connect_jointLabels | temp call for wiring up old templates
    •  CGMUI
      • cgmGUI
        • Added base progress bar to see load prgress
      • get_uiModuleScollList_dat | Modifying rigblock call for post rig work
      • get_scene_module_heirarchy | Modifying rigblock call for post rig work
      • get_puppet_heirarchy_context | Modifying rigblock call for post rig work
    •  TRANS
      • relativePos_get/set | trying a new method for storing/pulling positional data for rigBlock work

Block Picker

As I was working through the new intro module for the class I was playing with some of the ideas we’ve been doing with this new picker stuff and came up with what will be useful for selecting block items. Especially when you don’t know the system.


What we’re doing initially is:

  • Taking the selected blocks in the blockList
  • Per block, running a new general picker ui and attaching those to our main top menu

I’m sure we’ll iterate some but eventually this could be a good road map for control specific picking on mrsAnimate.

Scene picker

As we’ve been looking an improving mrsAnimate and trying to get some sort of picker in, taking the scroll list work from mrsBuilder and adapting it for animation work seemed an economic use of tech to meet a need.

Took a first pass on implementation then sent a call out to users to see what they’d want it to do exactly.


Better wiring

When we added the time context to mrsAnimate it got rather slow. So we’re retooling things to get some speed.


First thing I did was take some bench mark calls on an asset see what kinds of speed increases I was seeing.

First pass

My initial pass was simply to buffer all contexts initially. This solution was less than ideal

  • Walking a dense asset took a good while – ~ 90 seconds on a 4 armed asset
  • Processing improvements with this along weren’t very exciting so… went back to the core of what the bottle necks were

New wiring

  • New direct wiring for all sets connected to modules and puppets as mControlsAll multimessage connections
  • The controls_get calls have had added rewire kws added to rebuild lists and reconnect to these plugs for when things change. The speed pickup here was considerable.

Changed calls

  • puppet_utils
    • controls_get
    • modules_get
  • module_utils
    • controls_get
    • controls_getDat

Global anim dat

  • Factored out context calls to a new module to be able to work on this better and more easily allow user or other of our own calls to pick up the contextual data better
  • The idea here is that once a context is buffered it should be able to recall that context almost instantaneously

We want to work on buffering a few ways

  • Control lists by part
  • Contexts


This is a global data object for sharing between tools and calls. Note – reloading the module, clears the global.


  • d_context | the current buffered context data
  • d_buffer | buffereing contexts
  • d_parts | This is for processing to time stuff
  • dat | dict | main buffer of data. Items are stored as nested lists
    • mPuppets
    • mModules
    • mControls


  • context_get | Call to get the current context. The modes used can be specified by kw or it will use the global optionVar mrs is using. Change at the top of mrsAnimate for example
  • contextTime_get | Get time context
  • snapShot_get | Call for pushing values. Built to expand upon
  • snapShot_set | …
  • puppet_get | Register a mPuppet if not stored, if so, return dat
  • module_get | ……………. mModule …..
  • control_get | …………… mControl …….
  • report_contextDat | report context
  • report_timeDat | report time


import cgm.core.mrs.lib.animate_utils as MRSANIM
reload(MRSANIM)#...note, the reinitialized our global cache. Don't use it willy nilly if you're using context

mDat=MRSANIM.MRSDAT#...links to the global
mDat.clear()#...clears dat
mDat.get_context()#...get's current context. Controlled by the mrsAnimate panel or you can specificy modes by kw
pprint.pprint(mDat.dat)#See what's stored



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.