Prepping Drake for Alpha Release

Current Focus

  • mDrake – Prepping for Full Release
  • Facial Module iteration
    • Branch – features/faceModules


This push is about getting mDrake ready for public release. We have a number of items to work through.

  • First full alpha asset
  • Beta
  • Full Release
    • Pistol Rig
    • Final Single Mesh

Full Alpha Asset Build


We made notes along the way of working through our last build so we have our final notes for this one.

To fix…

  • All controls aren’t being grabbed for mirror flipping
  • Some controls not getting grabbed by ui
    • Master look
    • lids
  • Radius attr not getting hidden on
    • Lids
  • Brow controls
    • Move shapes out a little
  • Muzzle
    • Lips – orient handle more vertically rather than along the surface
    • Lips – even up the handles
    • Try bigger mouth move orb
  • Body – add a blendshape bridge for testing tweaks.
  • Geo –
    • The normals on that ring of bridge faces need to be set
    • Fix the lip geo uvs you hosed Josh
Working through it…

Build body

Limbs breaking….sigh. Must have broke something this week. Will step through…

  • Breaking at rig_frame
    • It was my attribute_utils work this week.
      • I’d run into a bug and  I converted my has_attr check to attributeQuery rather than objExists which is was not a great initial use but actually works better  in some edge cases.
      •  I have a function called get_positionPlug which checks a node for a series of plugs. attributeQuery fails because it only checks the dag and you’d need to check every shape whereas objExists works.  That or maybe I’ve just been very lucky a long time….
  • Proxy Geo
    • My caps are flipped. Thinking when I was doing work on Rael I changed some of the reversing there. Not a big deal but should address.


  • Lid
    • Not getting mirror indexed – this was a bit of a bugger
      • Missed the lid handle on the first pass
      • Data_buffer –
        • store the lid
        • faceSet
        • moduleSet
      • Rig_skeleton –
        • Check wiring
      • Rig_controls
        • Register to module
  • Getting face mirroring working
    • module_utils.controls_getDat
      • Need to resolve controls not in a message list.
      • controlTag
        • cgmControlDat – jsonDict – just to make it easy
        • Need to refactor but for now:
        • mHandle.addAttr(‘cgmControlDat’,”,’string’)
        • mHandle.cgmControlDat = {‘tags’:[‘ik’]}
      • Added a new face section we need to hook up to the ui…making a note
  • mrsAnimate
    • Modified how the primeAxis was resolving. Previously I’d used the setting off of the module however with face controls having left/right/centre in both I’m trying just using the first object selected
      • If that failes I use from the module


Get base skinning working

  • Face
  • Body
    • Focus on hands
  • Shirt
  • Pants

With that working, look at what I have time to look at before I have to get this up on the site for

  • Losing holster for this build –
    • We haven’t decided on gun setup and it’ll just be odd for everyone to have it without the gun when testing.
  • Fist – I’m a stickler on decent hand posability
    • Skinning pass
    • Blendshape tweak while posing
    • New base pose
    • Pushing back to base
  •  Teeth
    • Rough teeth in
  • Arm – rotating down by default is a little odd. Going to change the base setup to make it feel better
    • Pushing back to base


  • Had a second thought on the holster till we figure out how we wanna do the pistol for unity  stuff. So did a temp shirt texture as the other one had some shadows baked in.
Finishing Up

There were a few tweaks I wanted to make while I was working through final prep and some posing. I made the changes by blendshape and translating some controls I want to be the new ‘base’.

Doing the positional changes are easier with the rig mirroring as I can:

  • Put things where I think they’ll work, lock those attributes and try getting to good poses without translation
  • Then mirroring those changes back to the other side

So, I need to get those changes back to my base. Let’s do it.

  • First I’m going to export by skin data replacing my old files with my skinDat calls.
  • Then I’m going to dup my body changes mesh and verify the symmetry before moving forward to make sure I didn’t muck something up.
  • Cull out the double geo under the shirt on the body


Next we need to get our template lined up with these changes.

  • Open up our template file
  • Reference in our new mesh
  • Take a look at what we have to fix

  • Group our hand blocks for easy moving and get them close
  • Paying close attention to the pivots on the finger joints
  • Move the arm handles, making sure to re-snap the rp plane

  • Push the template changes to the other side
  • Rebuild arms and fingers skeletons
  • Push the blocks to rig state. Go get a coffee as it takes a bit.

Sweet, we have our rig, not we need to get our mesh in our file and everything skinned up.

  • After done, run our post processes.
  • Connect the rig to the bind skeleton
  • I’ve got that proxy bug I need to resolve

Flipped the vector…

Now to skinning…first we need our mesh

  • First clear out our references
  • Then clean out unused nodes in the hypershade
  • Start with the face to make sure  everything is working
  • A few skinning tweaks
  • Changed the shirt tint a little and changed the logo on the back

Final Prep

  • Setup new project
  • Fix texture paths
  • Make a pose for post


  • Rig page
  • cgmRigs Post
  • This post
  • Facebook plugs
Revisiting skinDat

Back during Morpheus 2’s development I wrote a skinDat format to transfer skinning data between rigs. I’m going to see if it works. The benefit originally of this system was that I could use it irrespective of the Morpheus mesh moving things around because it could work just off vert id. We’re going to try to make use of that.

Doesn’t help I’ve not looked at the module in like a year plus…

Okay. so we’ll save off the good skinning data files and come back to it in a bit.

import cgm.core.lib.skinDat as SKINDAT
reload(SKINDAT) off a weight file based on selection
_dat = a skinDat object off selection a skinDat object off file prompt
_dat ='Body_Full_rework')#...initialize off arg obj data - NOTE there's a LOT of data.
_dat.write()#...write data to file data to file from selection

…I’ll come back in a bit and test bringing it back in

It’s a bit finicky but with a ui and some work down the road I think it might be worth coming back to this.

In the end I was able to just load the config on a mesh in scene without manually skinning anything.

import cgm.core.lib.skinDat as SKINDAT
mSkin =
mSkin.applySkin(influenceMode = 'config', nameMatch = True)

The config influence mode assumes not having a skin cluster on a target mesh or an exact match for influences.


To Come back to…

  • Optimization
    • rigNode connection is pretty slow. Look at way to fix that
  • Face
    • Resolve better breakdown of setting attributes so we can cull down number of gears
  • LIMB – end twist skin joint. Look at an option to have a twist only wrist
    • Reverseable spine would be great for flying/swimming stuff
    • Template
      • Flesh out lids more for better proxy
      • Figure out how to to iris/pupil setup and proxy
      • Roll in new methods from brow/muzzle
      • Add a span specification to the lid curves
      • Try cluster setup
      • Add pulling the new data back to the define handles when deleting template
    • Add full lid setup
    • Master eye
      • Do a better dynParent setup. Did a patch fix for drake build. eyeLook_verify
  • BROW
    • Roll in latest curve/surface stuff from lip setup
    • Do offset for joint depth and same proxy setup as muzzle or parent the brow curves so they track
    • Add
      • Snout setup
      • Tongue
      • Teeth
      • Lip/nose variants
    • Look at possible other template setups – maybe a simpler one or other variable method
    • Prerig
      • look into splitting joint handle numbers
      • Check other control counts
    • Joint
      • Add support for split joints
  • HEAD
    • Aim head
      • subs blocks aren’t attaching to the aim head
      • Head aim not driving twist
  • mrsAnimate
    • Make use of the face control filtering in the ui
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.