Block a leg!

Last Updated 05.07.2019

Assignment

  • Build your Legs

Goals

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

Suggested Reading

The following from the docs

  • Limb
  • Builder
  • RigBlock States
  • RigBlocks

Hard to get anywhere without legs, lets give our horse some.

Starting Point

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

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

Let’s begin.

Define

Create

Let’s make our first leg rigBlock

Open up the mrsBuilder. | cgm Top> MRS > mrsBuilder

  • Make your spine the active block by double clicking spine block | 'spine'...
  • Add the rigBlock to our scene | Add> limb> leg ungulate front.

Whoah…what the heck is an ungulate?

Glad you asked. Here’s a layout of the limb profiles.

These are all limb blocks. This is especially pertinent based on what you might be building for your project. From left to right:

  • crab | pretty straight forward
  • finger | …
  • thumb | …
  • arm | …
  • leg plantigrade | Critters that walk heel,ball,toe. We share this with bears
  • leg digigrade | Walk on toes. Cats,dogs, etc
  • leg ungulate | walk on tip toe. Like a horse.
  • leg unigrade | Peg leg

 

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 around the front shoulder
    • Move the end handle to the ankle
  • Lever- OPTIONAL | Place the lever handle where the clav will be making sure to rotate it so the arrow on that handle is pointing to the lever’s up
  • up – Check your up handle to make sure it’s where you want it.
  • rp – Ensure the rp 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. But the ones we’d want to look at:

  • attachPoint | the front will most likely be end and the rear leg will be the base
  • buildLeverBase | If you want a clavicle. This needs to be on. The initial structure as the define state. You’ll see the define handle if you turn this on.
  • buildLeverEnd| This makes it so the ball is setup as a reverse hinge to the ankle. It’ll make more sense as we get into the material
  • buildBall| If you want a ball joint on a foot/paw setup
  • buildEnd| For game work we often don’t want extra joints that don’t do anything. As an example with a finger, you don’t really need that last tip joint for skinning most of the time. This is for allowing that to be removed without affecting our setup.
  • followParentBank | This is for sub blocks if you want them to follow the parent’s banking setup. Toes and fingers for example

For more detail, explore the Limb section of docs and the core concepts shared attributes.

Form

Next we need to shape our leg. First, push to template state.

  • Select your leg rigBlock in mrsBuilder | R | FRNT | 'quad'...
  • 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

  • Form handles | Use these to generally shape
  • Loft curves | These are used to shape your look
  • Orient helper | Make sure it goes the direction you want
  • Rotate Plane | use the rp handle to define the rotate plane vector as you desire

Remember from our segment work that you can change your loft shape, increase shaper count 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.
  • Orient| Ensure the orient helper at the top of the limb is pointing where you want
  • Rotate Plane | use the rp handle to define the rotate plane vector as you desire
  • Pivot helpers | Use the main handles to approximate the pad of your critters foot. I’m doing it as the hoof
    • Pay attention to each of the pivot handles – front,back,inner,outer,center

Prerig

Let’s go ahead and push to prerig.

  1. Select your leg rigBlock in mrsBuilder | R | FRNT | 'quad'...
  2. Then hit <Prerig> | This pushes to prerig state

Let’s lookat 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 foot

 

 

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 I mainly moved the hip/shoulder forward and the knee/elbow back

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 R | FRNT | 'quad'... in mrsBuilder
  2. Then hit <Joint> | This is to push to skeleton state

Remember – You can change the rollCount per limb segment

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
  • Roll Count | Check that you have the number of roll joints you want per segment. This may be an area of exploration as you iterated
  • 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_masterSpineHeadLeg_skeleton_v01.ma

You can name yours what you like.

  1. Select the master block R | FRNT | 'quad'...  in mrsBuilder
  2. Then hit <Rig> | This is to push to rigstate. It will ask for a confirmation saying it needs to rig the master and spine to complete these request
  3. 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 limb [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.

  • R_FRNT_leg_limb(dag- cgmRigModule)
    • R_FRNT_leg_rigNull(dag)
  • R_FRNT_leg_limb_deform_grp(dag)
  • R_FRNT_leg_limb_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

  • R_FRNT_leg_limb_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 is present

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 limb. the ik start is connected to this too [2- top]
  • 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.
  • blendParam | floatDetermines how the joints follow the ribbon surface. Floating evenly or fixed to their attach point

Turn on visRoot to see something similar.

IK End

Our main IK control[2-bottom]. The options and setup for our limb IK can be very different based on rigging options.

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.
  • pivot_0/pivot_1… | enum |  Same as discussed for master.
  • autoStretch| float |  Stretch on our rp chain
  • lockMid| float |  lock the mid to the rp handle
  • spinMid| float |  twist the plane which guides the base follow for the rp handle
  • extendIK| float |  When we have endLever on we get this attribute which controls how our ballRotation control orients
  • space| enum | Setup by the dynParent System. orientTo would denote a point/Orient setup with orientTo setting the orient target and follow the position target

Pivot attributes – when we have a pivot helper we get extra options

  • roll | float |  front to back edge
  • centerBank | float |  …
  • centerRoll | float |  …
  • spinFront | float |  …
  • spinOuter | float |  …
  • spinInner | float |  …
  • spinBall | float |  …
  • spinBack | float |  …
  • bank | float |  Side to side edge

Note – we have two ball toe setups now, direct and attribute

IK Base

This control IK Base [2-top] is for the start of the ik chain

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 | …

RP Control

This rp control [3] controls our poleVector for our rp plane

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.
  • pivot_0/pivot_1… | enum |  Same as discussed for master.
  • follow| enum | Setup by the dynParent System. Only follow would denote a point only setup

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.

Ball Rotation Control

The handle [5] acts as a reverse hinge for the foot. The buildLeverEnd is what makes this setup.

Attributes

  • axisAim/Up | enum |  Settings for our aiming system. If you use raycast aiming or other systems these settings will be used per control.

Note – The orient of this control is controlled by the extendIK attribute on the main ik control

Hinge

The handle [6] is a hinge setup for our end

End

The handle [7] is an end handle

Clavicle

The handle [8] is our lever handle. You saw this on fingers and arm with our from base work.

Root Control

The root control [9]’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.

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

  • Settings
    • FKIK | 0.0

FK Controls

FK controls [1]  are for direct rotation and movement

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.

On the neck we saw cubes. Because I already verified proxy on the leg. The cube shapes have been replaced by the proxy shape.

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)

Remeber 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

  • R_FRNT_leg_limb_rig | enum | — toggle to hide/see but not touch/touch the rig guts

Exploring Options

You can experiment with other processes and options.

Options to try:

  • Test your leg
    • Try other points of articulation
  • Building with different options
    • Try with/without clavicle
    • Try different roll 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?

It would be hard to get anywhere for a four legged critter to get anywhere with a single leg. Well, we only did one leg….so after you have a leg setup you like we need to

Mirror our Leg

After we have a good setup and have thoroughly tested it we want to mirror that to the other side so we have two front legs. Let’s do it.

Go back to your pre rerigged file you like.

  1. Select the spine block R | FRNT | 'quad'... in mrsBuilder
  2. Then Mirror ---- Build

This will get us all the way to prerig state. Then just skeleton your new block and you’re good.

If you want, go ahead and do a build with both legs to try things out.

Back Leg

As we’ve done this pretty thoroughly we’ll just hit the high lights here. We’ll start with the right again. This time I’m doing a leg ungulate rear

Define

What are we looking for at this state?

  • Form – You’re not worrying about the pivots here, just bounding box your frame
    • Put the rigBlock around the front shoulder
    • end handle | around the ‘ankle’ just above the hoof
  • Lever- OPTIONAL | Place the lever handle where the clav will be making sure to rotate it so the arrow on that handle is pointing to the lever’s up
  • up – Check your up handle to make sure it’s where you want it.
  • rp – Ensure the rp handleis oriented how you want. Generally speaking the rp vector is through the main axis of rotation for that chain.

Form

Reminder – You can use the mrsBuilder Select menu to get a picker to aid in selecting components

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.
  • Orient| Ensure the orient helper at the top of the limb is pointing where you want
  • Rotate Plane | use the rp handle to define the rotate plane vector as you desire
  • Pivot helpers | Use the main handles to approximate the pad of your critters foot. I’m doing it as the hoof
    • Pay attention to each of the pivot handles – front,back,inner,outer,center

Prerig

What are we looking for at this state?

  • Handles |  Place the points of articulation where you want them. Use the jointLoft as a visual guide.
    • For my horse I mainly moved the hip/shoulder forwward and the knee/elbow back
    • Watch that end prerig handle as it affects the ik control

Skeleton

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
  • Roll Count | Check that you have the number of roll joints you want per segment. This may be an area of exploration as you iterated
  • 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.

Rig

Iterate till you’re happy.

Mirror our other Leg

After you’re happy, mirror your new leg to the other side. Check your build and save off a clean template file for this state at prerig or skeleton state.

And after that?

Let’s give our horse some ears and a tail.

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.