The following page provides an overview of the various major components of the 3ds Max CAT animation system, their Function Publishing Interfaces, and possible MAXScript access approaches.
The CATParent Helper Object stores the common shared information about a character rig including the name of the rig and the [CATUnits Ratio] value.
It also holds the layers system details including the name of each layer and its global weight.
It provides some useful arrays listing all controllers and all nodes used in the rig for fast iterations through all components using MAXScript.
The CATParent exposes the following two Function Publishing Interfaces:
Interface: CATParentFPInterface
Interface: LayerRootFPInterface
To create a new character using a pre-saved Rig file, you can simply create a new CATParent Helper and call the LoadRig()
function of the CATParentFPInterface:
EXAMPLE
theParent = CATParent()--create a new CATrig parent:
$Object:Character001 @ [0.000000,0.000000,0.000000]
theParent.LoadRig (GetDir #plugcfg +"\\CAT\\CATRigs\\Marine\\Marine.rg3")
true
theParent--note that loading a rig deletes the original parent!
<Deleted scene node>
Every CATBone requires a valid reference to a CATParent (the .CATParent
property on the TMController
for that bone). There are situations where this reference can become undefined / invalid, such as when the CATParent has been deleted, or parts of a rig are xrefed or merged into another scene without their CATParent. If this happens, selecting the bones and opening the modify panel can crash 3ds Max. You can inspect suspect bones using this method to see if they have a valid CATParent reference by selecting them and running:
classof $ -- verify it is a CATBone
$.TMController.CATParent -- see if reference is defined
-- if this returns 'undefined' there is an issue
3ds Max CAT can be described as a hierarchy of controllers and nodes. Each bone is represented by a controller (CATControl) managing the bone's behavior, animation and functionality, and a CATBone scene object used mainly for display, Skin Deformations, and rendering.
Every bone controller in the CATRig structure exposes the CATControlInterface. This means that every bone can return the CATParent and a name and can be used to save or load clip files or paste a layer.
You can use the .CATPatent
property exposed by the CATControlInterface to access the CATParent from any CATBone. For example, if you have a pointer to a finger or an arm bone, you can easily find out the CATParent and perform all the loading, saving, and layer operations using it.
EXAMPLE
theParent = CATParent()--create a new CATrig parent:
--> $Object:Character001 @ [0.000000,0.000000,0.000000]
rig_path = GetDir #maxroot + "\\plugcfg_ln\\CAT\\CATRigs\\Marine\\Marine.rg3"
theParent.loadRig rig_path
--> true
theParent--note that loading a rig deletes the original parent.
--><Deleted scene node>
Each bone controller also exposes the CATNodeControlFPInterface interface that provides properties and methods related to arbitrary bones management, transformation matrix access in various coordinate systems, ans so on.
The ExtraRigNodesInterface lets you add and remove extra rig nodes and access the array of extra rig nodes.
You can always access the corresponding scene node of a bone controller by using its .node
property:
EXAMPLE
If you select a bone that has extra bones added to it such as, a head bone that has facial bones, you can use the following:
theHeadCtrl =$MarineHead[3]--get the Head's controller:
theArbBone = theHeadCtrl.GetArbBone 1--get its first arbitrary bone:
theArbBone.node--get the scene node of that bone:
You will now have the node of the first extra bone that is attached to the head bone.
Internally, an "Extra" bone is called an "Arb" (shot for "Arbitrary") bone.
An ArbBone has no predefined use, unlike digit, limb, spine, or tail bones that provide respective built-in behavior to simulate fingers, arms, legs, spines, and tails.
The Hub is a special bone where multiple specialized bone groups such as, limbs, spines, and tails can be connected to the rig.
The Hub bone exposes a unique HubFPInterface for features available only to Hubs. This includes the adding of spines, arms, legs, and tails.
Limbs are bones dedicated to the creation of arms and legs.
All Limb Bone controllers expose the following Interfaces:
Interface: CATControlInterface
Tail bone controllers are dedicated to the creation of tails.
The TailTrans controller exposes the following Interfaces:
Interface: CATControlInterface
Interface: CATNodeControlFPInterface
Interface: ExtraRigNodesInterface
All CATBones use a CATObject to display their geometry in the viewport.
The CATObject exposes the CATObjectFPInterface that provides control over the custom mesh display.