Give that horse a master!

Last Updated 05.06.2019

First a bit a bit what the master rigBlock is for – it is our root rigBlock. It serves a variety of needs:

  • Sets up our dag structure for our overall rig
  • Provides our root joint should we  have that option
  • Creates other nodes – objectSets, displayLayers etc for our rig

Assignment

  • Build your master rigBlock

Goals

  • Understand the basics of the master rigBlock

Suggested Reading

Check the sphinx docs

  • Master block
  • Builder
  • RigBlock States
  • RigBlocks

Define/Form

In this section we’ll be working in the form state as the master rigBlock skips the define state at creation.

Create

If you haven’t done so, open up your file from our planning session. Since we have an object we can get the base size from that and tweak it. For master blocks you skip the define state as there’s currently nothing we need to hit in define state so we bypass it at creation.

  • Open up the mrsBuilder. | cgm Top Menu>MRS>mrsBuilder
  • Select the image plane for a sizing reference
  • Add the rigBlock to our scene | Add > master.

This will create our master block at the base of our image plane.

  • Select the block in mrsBuilder in the rigBlock list
  • Then Utilities > Select to select the dag. You can do this in the viewport but this is a valuable skill when things start getting dense.
  • Change the baseSize in the channel box . It will be zero if you used the image plane.
  • Work with it till you get something you like.
    • My baseSize was: 72.801, 196.813, 266.67

Currently you must reform to get the shapes to resize. So you can freely hit the form button in the UI as you test to resize.

Settings

The master Block only has a couple of settings we need to check on. This will get a lot denser as we move to the other rigBlocks. So, select the master block. And let’s look at what we have.

controlOffset

float | Master rigBlock only.  This is a very important setting. This is our puppet’s offset value for all of it’s rigBlock shapes. It is used at many points during rig creation. The main effect is how far off of the proxy surface your control shapes will cast themselves.

Go ahead and change the value. You’ll notice that there’s a little line around the circle at the base that will move as an offset. This is a visualization of what this setting does. Think of the interior circle as the surface and the lighter curve as your offset.

addMotionJoint

float | Master rigBlock only. This designates if our master will have a motion joint which is an extra root joint to move an animated skeleton around in game engine.

We’ll be using this option for our build.

numSpacePivots

int  | This is a pretty common attribute. Just specifies the number of space pivots you want. It can be zero.

Build Profile

We looked at this in the core concepts section of the docs but let’s put it into practice.

  • So selecting our master block in mrsBuilder
  • Profile > unityMed
  • Double click the rigBlock in the list picker to set it as the active block and see more info

unityMed is our current default. The other options and more will be available going forward.

You can play with changing the profile but at this point it doesn’t do much other than store the data on the master. Make sure you’re back to unityMed before moving forward.

Name

Let’s give our asset a better name than ‘master’.

There’s a set name call that can be accessed in a couple of different ways. Several functions in mrsBuilder can be accessed in multiple ways.

  1. Right click the block in the picker, then Set Name
  2. Bock > Names > Name | Set Tag

Either method will give us a prompt.

After I hit okay. It will do it’s thing and name our master rigBlock and any dags.

NOTE – The masterBlock name you set will be what our master anim curve uses at the rig state.

Prerig

Let’s go ahead and push to prerig.

  1. Select the master block 'master'... in mrsBuilder
  2. Then hit <Prerig> | This is to push to preig state

For our master rigBlock the only thing added will be our motionJoint helper. The current shape of which is an arrow pointing down. The joint would be created at the dag of this prerig helpers.

Skeleton

Again with Master this state isn’t going to be super exciting. But it’s simple so we’ll do a little experimenting to see how we can change options and get different results.

Go ahead and push to to skeleton state and you’ll see a joint added.

  1. Select the master block 'master'... in mrsBuilder
  2. Then hit <Joint> | This is to push to skeleton state

If you move or rotate the motionJoint helper, then push to skeleton state again, you’ll see your joint update.

Now, let’s select our block and change so having no motionJoint helper.

  1. Select the master block 'master'... in mrsBuilder
  2. Then hit select | To select the dag
  3. Turn addMotionJoint off | This will just hide that curve with this setup
  4. Then hit <Joint> | This is to push to skeleton state again

If we do that you’ll see we no longer have a joint.

Important Note – Some options we change are only affected by rebuilding a current state or going back to a previous state.

Sweet, let’s add back our helper and go to skeleton so we can get our quadruped going.

Rig

Save off your file as to be safe we’re not going to be saving rigged blocks in our working file. In my case my file is: horse_master_skeleton_v01.ma

You can name yours what you like.

Go ahead and push to rig state on the master block. After a few seconds you should see:

  • Your rigBlock display name in mrsBuilder should change to green and have a [RIG] tag
  • And in the viewport…

There’s a lot of things happening when we rig.

  • rigBlock – Our rigBlock is formed so that it’s easier to not inadvertently select it post rigging
  • Dag structure – created and setup for all our rig setup for both this block as well as others
  • Shapes – Different nurbs control shapes are generated
  • Rig wiring – The rig is wired so that we can get all the information we need once the rigBlock is removed from the scene. Remember it is a frame to build the rig and  designed to be removed once we have our asset completed
  • Dynparent setup – Based on our settings, the master will have our dynParent setup added as well as spacePivots for that system

Please refer to the master section of the docs for further breakdown on these items and more info.

Dag Structure

This will be more important to some of you than others. But our structure for a rigged asset begins with our master. Our master rigBlock creates a lot of nodes which you should have some understanding of in order to amend and modify your setups. All our subsequent rigBlocks will put their guts in this structure.

I’ll lay them out and then discuss them briefly.

  • NAME_puppetNetwork (network – cgmRigPuppet)
  • master(dag)
    • rig(dag)
      • noTransform(dag)
      • parts(dag)
      • worldSpaceObjects(dag)
    • geo(dag
    • skeleton(dag)
    • NAME_masterGroup(dag)
      • NAME_anim(dag – cgmRigMaster)
  • control_displayLayer(display layer)
  • main_displayLayer(display layer)
  • all_animSet(objectSet)

PuppetNetwork

The puppetNetwork is a tagged mClass node of type cgmRigPuppet. It is our core puppet wire source and target and has a large number of calls associated with it. We’ll get more into that in the MRS Workshop on making your own module.

Master

The Main dag group in the outliner. This is our master null for the given puppet. We’ve named it ‘master’ assuming any referencing will ‘tag’ it such as ‘horse:master’.

Groups/Nulls

Let’s talk through our groups and what they’re used for.

  • rig – general group for the groups below it to keep that first level of children smaller
  • noTransform – General noTransform group to stuff stuff when needed
    parts – each sub module added will add their own structure here. So for example, adding a spine that is rigged would add a spine null here and other dags at build time.
  • worldSpaceObjects – collector for our dynamic parent group system to add it’s dag targets to
  • geo – Watch group for various calls where they’ll be looking for geo.
    This is wired to the geo off/lock/on toggle so any children will get those settings
  • skeleton – Null to put our bind skeleton.
    This is wired to the geo off/lock/on toggle so any children will get those settings
  • masterGroup – Our master control’s master group under which our rig structure will be that will be transformed by the main control.

Display Layers

Currently we build two display layers per asset.

  • Control – this should pretty much only affect controls so you can hide them on playback
  • Main – this is for the whole rig

Object Sets

There are a number of objects sets supported by MRS. Some are created initially. Some by post processes.

  • all_animSet – Master anim set for puppet controls. Sub modules have their own sets added to this one
  • bake_tdSet
  • delete_tdSet

Our object sets are created as cgmObjectSet mClassed nodes which extends their usability in code.

Controls

master

The master control [1]  is the large square/rectangle with lighter offset curve and curve text of our character name

Attributes

  • visControl [bool]  — visibility of the vis control
  • settingsControl [bool] — visibility of the settings control
  • pivot_0…  [enum] — visibility for each spacePivot as created by the setup
  • space [enum] — dynParent space toggle (when optioned)

settingsControl

Gear shape [2] at the base of our master. This is where we have some settings for our puppet. We plug in more items as we add sub modules.

Attributes

  • skeleton [enum] — off:lock:on
  • geo [enum] — off:lock:on
  • proxy [enum] — off:lock:on

visControl

Eye shape [3] at the base of our master. Not really using this much now but it’s a place to plug stuff.

Attributes

  • rootMotionControl [bool] — visibility for the root motion control

rootMotion

Our same down arrow [4] as before. Used to move that joint.

spacePivot

PIVOTS! From Space

Let’s talk spacePivots as this concept will come in play at many of our sub modules down the line.

Let’s try it.

  • Select the master control horse_anim | Or whatever yours is called
  • Turn pivot_0 to on. | This will make the pivot visible
  • If you move it around, nothing happens to our master because our master’s default space is set to rig which is world in our case.
  • Change the space attribute on your master control to world_pivot_0
  • You should see the master snap to that pivot
  • Now if you move the pivot the master will follow


A few items of importance:

  • That spacePivot has a constrain group above it so you can constrain that to something else and then still have the spacePivot to move and animate and still have your master control have clean animation channels for yet another transform should you need it.
  • You can snap switch between spaces as you animate via the markingMenu or mrsAnimate. Generally we do a one frame switch to avoid interpolation popping

Exploring Options

You can experiment with other processes and options.

Take the master block back to skeleton state

Options to try:

  • Building with multiple space pivots -You’ll get multiple space pivots. Each with a option to toggle and to have as an option to space switch to
  • Building with no space pivots – With this option you won’t have pivots and instead you will get a constrain group for the master
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.