MRS

WIP - Not for you yet:)

Last update: 10.11.2017

Features

Puppet

Module

Blocks

  • rootJoint - Working through

Blocks

Common

Options

  • hasRootJoint
  • loftDegree
  • loftSides
  • loftSplit
  • position
  • proxyType
  • proxyShape
  • side - If none, Centre is assumed

Core Data

cgmObject

  • getPositionByAxisDistance -

RigNull

Messages

  • moduleJoints - Skin joints more than likely

cgmRigBlock

cgm.core.mrs.RigBlocks.cgmRigBlock

Static

  • _blockModule - Creation/editing module for the rigBlock
  • _callKws - Kws from call
  • _factory - RigBlocks.factory instance with rigBlock

Messages

  • moduleTarget - Link to cgmModule

Calls

  • asHandleFactory - Returns handleFactory instance

  • verify

    • blockType - change blockType for verify
    • size - set size on call
  • doName - Overload on cgmNode call

  • getControls - WIP

  • getBlockModule -

  • atBlockModule - String calling functions from block module

  • atBlockUtils - String calling functions from block utilites

  • contextual_methodCall - Function to contextually call a series of rigBlocks and run a methodCall on them with

  • string_methodCall - Function to call a self function by string. For menus and other reasons

Block Utils

cgm.core.mrs.lib.block_utils

Template

  • is_template - general check

  • templateDelete - Delete template data

    • msgLinks - Messages to check and delete

Skeleton

  • skeleton_getCreateDict -

Rig Build Steps

from cgm.core import cgm_Meta as cgmMeta
import cgm.core.mrs.RigBlocks as RBLOCKS
RBLOCKS.get_modules_dat()#...also reloads

_block = 'head_block'
b1 = cgmMeta.asMeta(_block)
b1.atBlockModule('build_skeleton')
mRigFac = RBLOCKS.rigFactory(b1)
mRigFac.log_self()#>>uses pprint

mRigFac.atBlockModule('rig_skeleton')
mRigFac.atBlockModule('rig_shapes')
mRigFac.atBlockModule('rig_controls')
mRigFac.atBlockModule('rig_neckSegment')
mRigFac.atBlockModule('rig_frame')
mRigFac.atBlockModule('rig_cleanUp')

rigFactory

Initial checks on a module to see if it is buildable and buffering data to several dicts. Once initialized, the easiest way to see the data is to use the mRigFactory.log_self() call.

It goes through several checks, any failures of which will bail the process.

RigBlock

Checks the rigBlock the factory will be using to do the rest of the build.

  • Verifies the rigBlock before we move forward to make sure all expected attributes exist
  • Buffers some block data including the module for our rigBlock type which is used extensively in the building process

Module

Makes sure our cgmModule and cgmPuppet nodes are intact.

  • cgmModule - makes sure we have one and creates one if not
  • cgmPuppet - ditto. Verfies groups for parenting work we'll need
  • Skeleton - Checks for a module skeleton. If it doesn't exist, builds one

rigNeed

Some logic checks to see if we can move forward as long as...

  • If our cgmModule has a moduleParent, it must be rigged to rig a child
  • Check build version to see if it is out of date and needs a build
  • If force new, delete existing (NOT DONE)

bufferData

Store a bunch of data we use multiple times like module colors, direction, mirror base data, global scale stuff and more.

moduleRigChecks

Verify our cgmModule RigNull is ready to roll

  • Some more buffering
  • Wire our gutsVis
  • Verify our module objectSet

deformConstrainNull

Create our deformNull for our cgmModule underwhich the bulk of our rig stuff that isn't noTransform will be put.

rigSkeleton

  • Rig joints built based on module joints
  • Depending on options
    • fk/ik/blend joints
    • handle joints
    • ik driver joints

shapes

Necessary control shapes from rigBlock

  • FK/IK handles
  • Settings

controls

Control registration. After this stage, the rig process is just hooking all our building blocks up.

  • Add attribute drivers like - FKIK
  • vis drivers - sub, direct, root. Connect to control shapes and not transforms to keep children visibile
  • Controls registered - dynamic parent groups initialized, space pivots added, mirror settings
  • Mirror registration - mirror settings and indexing
  • MetaData - controls registered back to module
  • Module objectSet extended with all controls

Frame

Build the ik/fk framework

  • Ik/FK setups
  • aim setups

deformation

Specialized spline ik and other setups

cleanUp

Clean up of base rig

  • Parent and constraining joints and rig parts
  • Lock and hide
  • DynParentGroups - Register parents for various controls and
  • Attribute defaults

special

Core calls

  • Skeletonization
    • Build - BlockModule
    • isSkeletonized - cgmModule

Core data

In general Skeleton ------------- * moduleJoints - * skinJoints - * fkJoints - main handle chain. Other chains are duplicated from this

  • Frame - frame structure for blending like fk/ik
  • Handle - Handle for segment manipulation

Log

TO DO

  • Fix single rigBlock masterControl sizing
  • Add rigPrecheck report
    • Joint estimate
    • logic
  • Is undo corrupting red9 buffer?
  • HeadIK - change to headAim attribute
  • Logic
    • if joints == handles: no direct
    • ``if handles == joints: ``
    • if joints > handles: build segment handles

October 2017

  • Generate mesh, parent to rigJoints
  • DONE - Proxymesh creation complete. Must have rigJoints to build
  • Head
    • No aim, no neck - DONE
    • Aim, no neck - WIP
    • Neck
      • Single handle/Single Joint
      • Single handle/Multiple joints
      • Multi Handle/Multiple Joints
  • FIXED Bug - master anim control sizing got broken somewhere.
  • The skeleton_getCreateDict all in one with orientation isn't gonna work as all in one. Just getting positions makes the most sense.
  • New skeleton builder - cgm.core.rig.joint_utils.build_chain . Moved from a couple of places to get it more usable. Need to link up to ui