You can’t make him drink without a head

Last Updated 05.07.2019

Assignment

  • Build your Head and Neck

Goals

  • Understand the basics of the head rigBlock
  • Explore what you can do with it

Suggested Reading

The following from the docs

  • Head
  • Builder
  • RigBlock States
  • RigBlocks

You can lead a horse to water but you can make him drink… if he doesn’t have a head.

Starting Point

If you haven’t done so, open up your file from our segment session. You should have:

  • The following rigBlocks at the skeleton state: master, spine
  • Any reference you want ready to go

Let’s begin.

Intro to Head rigBlock

The head rigBlock is comprised of two parts the head which is pretty basic and a segment portion for the neck.

The head setup has a number of setup options.

 

Define

Create

Let’s make our rigBlock

Open up the mrsBuilder. | cgm Top

  • Add the rigBlock to our scene | Add>head>neck long.

This will create our new rig block.

Should look something like…

Size

Use the rigblock and define handles to position your rig block on your design or model.

  • Form – You’re not worrying about the pivots here, just bounding box your frame
    • Put the rigBlock in the middle of the head
    • Use baseSize to approximately match the size of your head
    • Move the neckBase handle to the base of the neck.
      • Scale this volume to approximate your neck
  • Aim – Place the aim handle where so that he aim vector is how you want aim forward on your head is.
  • neckUp – Check your neckUp handle to make sure it’s where you want it.
  • neckRP – Ensure the neckRp handleis oriented how you want. Generally speaking the rp vector is through the main axis of rotation for that chain.

Settings

For our initial setup, we’ll leave our defaults as they’re good for our horse but there are plenty you can explore.  Check the shared attributes sections of core concepts in the docs for more info. But the ones we’d want to look at:

  • headAim | whether you want the head aim setup or not which adds a ik-ish head look at control for our head.
  • headRotate| Rotates our head proxy geo group. Not sure this will stick around with the newer direct geo selectability workflow.
  • neckControls| How many neck controls you want for your setup. For my horse I’m gonna have 4
  • neckIK| We’ll have to use the ribbon setup for now but pure spline IK is on the roadmap
  • neckJoints| How many neck joints you want. I’ll be using 6
  • neckShapers | How many main neck shapers you want. We can move this to the main/sub shaper setup like segment if there is interest on that.
  • segmentMidIKControl | If you want a mid neck IK control or just a two control ribbon.
  • spaceSwitchDirect | If on, each direct control will have space switching setup. We have some concerns on speed for this but if you want the option it’s there.

Form

Next we need to shape our spine. First, push to form state.

  • Select your head rigBlock  in mrsBuilder | 'neck long'...
  • Change state | <Form>.

Take a look at the handles you have to work with. We’ve done this before so it should be pretty straight forward.

Note – Turning on default material helps usually

  • Proxy head | We talked about this during our building from a base work.
  • Form handles | Use these to generally shape
  • Loft curves | These are used to
  • Orient helper | Make sure it goes the direction you want

Remember from our segment work that you can change your loft shape and other settings at this stage to change your look.

What are we looking for at this state?

  • Shape| You want your template to generally match the look you’re going for. If you’re not working from a mesh and just an image plane really pay attention to your various angles.
    • I rotated my head geo up a little in my setup because it was a more natural orientation to me
  • Head Handle | Make sure you like how it’s shaped to your head. This shape will be used as our head control.
  • Start Orient| Ensure the orient helper at the base of the neck is pointing where you want
  • Head Orient | Make sure it’s pointing where you want head forward to be. Our eventual headAim control will be eventually created along this vector

Prerig

Let’s go ahead and push to prerig.

  1. Select your head rigBlock in mrsBuilder | 'neck long'...
  2. Then hit <Prerig> | This pushes to prerig state

Let’s look at the prerig handles again.

Prerig handles[1]

We looked at these on segment and they are the same on the head as they were on our spine.

Prerig IK Orientation handle

Remember to pay close attention to your last ik orientation handle. This will affect the orientation of the IK control for the head (not the head aim control, the ik control)

Settings handle[2]

The settings handle is where you want the head setting to be. We tried a few procedural ways to do it but in the end it’s easier just to put it where you want it.

 

What are we looking for?

  • Handles |  Place the points of articulation where you want them. Use the jointLoft as a visual guide.
    • For my horse after some iteration and talking to some users I made the setup more closely follow the skeleton of a horse which is helpful in getting the full extension as the ‘default’ horse pose is a little folded up

Skeleton

This state may not be the most exciting but it is important. We want to pay special attention to the orientations after build to make sure they are where we expect them to be and oriented the way we want.

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

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

Remember – You can change the neck joint count just like with our spines

What are we looking for at this state?

  • Joint orients | make sure they look like we expect
  • Joint count | Make sure you have the number of joints you want to start iterating with
  • Joint parent | make sure the root of your chain is going where you expect. When we get to the head for example, we wouldn’t want that root of our neck to go to the pelvis unless we had a pretty atypical design.

Now that we have a skeleton where we want it I’m going to rig.

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_masterSpineHead_skeleton_v01.ma

You can name yours what you like.

  1. Select the master block 'horse'... in mrsBuilder
  2. Check below | to make our context include our spine
  3. Then hit <Rig> | This is to push to rigstate
  4. Wait for it to complete

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

  • rigBlock – Our rigBlock has its .template attribute turned on 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 head [rigBlock] documentation for further breakdown on these items and more info.

Dag Structure

For those that care about the rig structure


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

  • neckLong_head(dag- cgmRigModule)
    • neckLong_rigNull(dag)
  • neckLong_head_deform_grp(dag)
  • neckLong_head_animSet(objectSet)

Module Dag/RigNull

The head rig dag is a tagged mClass node of type cgmRigModule[LINK THIS WHEN DONE]. This is a special kind of dag that holds most pertinent information for the rig wiring.

  • Non transforming dag | this dag is for non-transforming dags/nodes

Deform Group

We have a deform group that is placed under the master control deform group.

  • Deforming nodes for the rig go here.
  • Sometimes I have a separate constrain group under this
  • Typically rig controls end up in here

Object Sets

Each rig Module gets it’s own animation objectSet to which all rig controls are registered

  • neckLong_head_animSet– Module anim set under the Puppet’s

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

Controls

The kinds of controls you see will depend on your rig options for the rigBlock. In our case we start with something like this.

Settings

The settings [1]  we’ve talked about on the spine. The gear is our standard settings shape when no cog i

Note – Many of these attributes would not be on this control should we have a separate settings control

Attributes

  • FKIK | float |  Blend between fk/ik mode. It controls that blend as well as the visibility of those controls.
  • visSub | bool | Whether or not the subcontrols of this rig section are visible. In our case, we only have one. If we had used more joints than controls, we’d have more of these.
  • visRoot | bool | Toggle visibility of the root control for the se
  • visDirect | bool | Whether or not the per joint controls of this rig section are visible. By default they are cube curves. When the build option of proxyDirect is checked. The proxy mesh replaces those curves.
  • blendAim | floatBlend the aim setup on or off. Also controls visibility of the aimControl
  • blendParam | floatDetermines how the joints follow the ribbon surface. Floating evenly or fixed to their attach point

FK Neck Controls

FK neck controls [2]  is the default on head setups currently so it’s what we see.

Attributes

  • axisAim/Up | enum |  Settings for our aiming system. If you use raycast aiming or other systems these settings will be used per control. If no settings are found, the global defaults will be used.

FK Head

The FK head  [3]  is the default on head setups currently so it’s what we see.

Attributes

  • axisAim/Up | enum |  Settings for our aiming system. If you use raycast aiming or other systems these settings will be used per control. If no settings are found, the global defaults will be used.

Segment Handles

The segment handles [4] control the ribbon for the segment joints. The number you see will be determined by our build options.

Attributes

  • followRoot | float|  What the control follows. Be it the root or the blend frame.
  • space | enum | OPTIONAL – Added when the spaceSwitch_direct option is on. Setup by the dynParent System. Space would denote a parent setup.

We need to toggle a few options to see some more:

  • Settings
    • blendAim |  1.0
    • FKIK | 1.0
    • visRoot | True

IK Head/IK Base

The IK head  [1]  and IK Base [2] are the ik control for the neck as well.

Attributes

  • axisAim/Up | enum |  Settings for our aiming system. If you use raycast aiming or other systems these settings will be used per control. If no settings are found, the global defaults will be used.
  • orientTo| enum | Setup by the dynParent System. orientTo would denote a point/Orient setup with orientTo setting the orient target and follow the position target
  • follow| enum | …

Mid IK

The midIK [3] is only created when that option is selected.

Attributes

  • axisAim/Up | enum |  Settings for our aiming system. If you use raycast aiming or other systems these settings will be used per control. If no settings are found, the global defaults will be used.

Root Control

The root control [4]’s visibility is controlled by the settings. As we turned it on we can see it. It is a dag under which the rig is parented and as such legs you move the whole section of the rig when necessary.

Attributes

  • axisAim/Up | enum |  Settings for our aiming system. If you use raycast aiming or other systems these settings will be used per control. If no settings are found, the global defaults will be used.
  • space | enum | OPTIONAL – Added when the spaceSwitch_direct option is on. Setup by the dynParent System. Space would denote a parent setup.

Head Aim Control

The root control [5]’s visibility is blendAim turning on or off. This was added at a client request and is optional. When on, the head will aim at the target and rotating the blend aim on it’s z axis (aliased to tilt) will tilt the head.

Attributes

  • axisAim/Up | enum |  Settings for our aiming system. If you use raycast aiming or other systems these settings will be used per control. If no settings are found, the global defaults will be used.

Direct Controls

We need to toggle an option to see some more:

  • Settings
    • visDirect |  True

The direct controls [1]’s visibility is controlled by the attribute we just changed. These are per joint controls for when the animator needs the highest fidelity of control.

The default shape for these is the cube you see above. However, when you create a proxy mesh these shapes are replaced by the proxy geo with a transparent shader set to them to make them selectable.

Attributes

  • space | enum | OPTIONAL – Added when the spaceSwitch_direct option is on. Setup by the dynParent System. Space would denote a parent setup.

visControl (ON MASTER)

Rember back on the master. The master settings has a new attribute registered with every module that builds that lets us see/interact with our rig guts.

Attributes

  • neckLongHeadRig[bool] — toggle to hide/see but not touch/touch the rig guts

Exploring Options

You can experiment with other processes and options.

Take the spine block back to skeleton state

Options to try:

  • Test your head
    • If you don’t like the points of articulation, move them
  • Building with different options
    • Different joint counts

Post Processes

Verify Proxy

Remember you can very your proxy to have geo to see while you’re moving things around

And after that?

Hard to go anywhere without legs….

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.