The way we’ve set things up is that the metaClass cgmRigBlock (cgm.core.mrs.RigBlocks.cgmRigBlock) is our template object for rig creation. These are used to generate the controls, wiring and structures of our rigs. At the end of the rig process, the rig itself can be exported off to keep all the extra data and nodes out of production assets.
That’s great and all but what does that actually mean? Great question.
- Rig block types are not subclasses. Instead each block is tagged with it’s type which then tells it which module it uses.
- After experimenting a lot over the years with subclasses and dealing with specific reloads
- At build how a given rigBlock of a type is setup is specified by two on creation flags which will both have their own core concept sections:
- blockProfile – This is what helps specify a spine segment rigBlock from a tail for example.
- buildProfile – This mainly affects joint/roll counts
So, we start with a the dag. A few basic concepts
- The actual rigBlock as maya sees it is a dag node with a curve shape – currently using a shape we call locatorForm
- This dag has the core attributes of the rigBlock. There are some attributes that are shared among the different rigBlock types and many that are only on those given rigBlock types.
- State Nulls are dags that hold the dags,shapes and other bits for a given state of a rigBlock. States are covered in another fundamentals sections.
- No transform nulls are state nulls that hold those items for a given state we don’t want to be transformed in anyway. Things like – track curves, curve/surface track dags and more
Let’s talk about the current rigBlock spread and their profiles which let’s you specify what sub type of block you’re dealing with. When you start messing with these you’ll see other options in the ui that we’re playing with. I’m only going to talk about the ones that are more tested for now.
- neckLong – Multiple neck controls
- neckShort – Single neck controls
- Nub – Single joint limb we use for props. Using the limb works well because it gives us the curves to shape a proxy. The pistol and holster on mDrake for example are this as well as other belt stuff we’ve done for gigs.
- EarUp – Currently using for cat or other long ears
- Brow | [early alpha]
- Eye | [early alpha]
- Muzzle | [early alpha]
Currently the profiles don’t have specialized shape templates. This is something we have ideas on but haven’t gotten to yet. If this is something that interests you it’s definitely something that’s worth exploring.
- attachPoint – Where the rig should attach to on it’s blockParent’s rig
- Base – Attach to the base of the parent block
- End – Attach to the end of the parent block
- Closest – Attach to the closest joint of the parent block
- Surface – Planned but not implemented
- baseSize – The stored base size values on a given rigBlock
Each state adds shapes for you to move around and manipulate to define the various pieces of information we’ll be using to actually build our rigs.
There are different kinds of helpers
- Bank and other special types
There’s a few concepts we need to talk about in regards to the ui for things to make sense.
The active block is the rigBlock that is loaded to the ui. Several calls require an active block or it can be a point of context via the Push menu. Also the active block blockDat section works off the active block and has no function without it.
You can set the active block a couple of ways.
- Top bar of setup – There is a button
<<which when pressed with a selected block will set that block as the active block
- Right click menu – right clicking a selected rigBlock in the scroll list will provide an option To Active which will make that block the active block
Utilites - ContextualSection – There is a button
To Activethat does the same.
We use the term context in several places in our tools. Simply but it is those things which will be affected by any given action.
selected— Only that selected block will be affected by contextual actions
active— Only the active block….
below— Selected and children blocks
below— Gets root from selected, then root below