CAT Question


#1

Hey guys,
I’m using CAT for this job, and I need to know how to animate the Base Human control or something similar. Basically I’m looking for a control that allows me to Move the entire character through the world by moving a single object.

It would appear that the Base Human control only works when I am in Setup mode and NOT in animation mode. Also Linking the root and the IK controls to a new controller object doesn’t sem to do anything! Any help would be much appreciated! Thanks!


#2

There’s the layer transform gizmo that you can active on/off in the CAT motion panel when the animate mode is on. Here you go:

http://download.autodesk.com/esd/3dsmax/cat-help-2010/files/WS7af5cac11814013a75af40b111fde8bf657-7fc2.htm


#3

You can also create an Arb Bone off of your pelvis, parent that bone to the CATParent object, then parent your pelvis (and any IK targets) to this bone. I prefer that method over the layer transform gizmo.

If you’re using Max 2013, do NOT use the Extract Motion Node as it is woefully and obviously broken. (It’s amazing to me that a company as large as ADSK doesn’t appear to have a QA department large enough to catch obvious and glaring bugs like that.)


#4

The big thing is the float_layer() controller - basically it exposes all of CATs layer system to any float controller essentially allowing you to custom rig with CATs layers. The only thing you need is one CAT bone/hub in the rig from my testing.

Animation can be saved/loaded now with it - with 2011 is was broken.


#5

Great tip eek, we’re using CAT on a large scale project at the moment and are having a few headaches - both your suggestions could save us some pain I think - I’m especially interested in the layer_float() controller

Cheers

Duncs


#6

Did a quick look at the float_layer() controller. I’m not sure I’m going about it the right way. I’m simply using the Add Extra Controller via a right-click interface in CAT’s setup mode to add a transform of, say, a teapot. This appears all well and good inasmuch as the teapot’s XYZ transforms now use the CAT layer system. BUT…the affected curves in the track view are ALL colored cyan, which quickly makes this less than useful when trying to edit key data. I.e. instead of inheriting RGB values of the respective transform tracks, the curves are all treated as floats.

Is this just the way it works? Or is there an easy way around this?


#7

hi eek, thanks so much for the reply! that helps a heap!

I too am interested in hearing more about this float_layer() controller you speak of. Right now the only way I can figure to link an object to any part of the CAT rig is to use a Link Constraint, which isn’t really ideal… is there a better way to go about doing this?


#8

Ok so CAT basically follows the paradigm of a base transform with additional transforms existing as layers. This is synonymous with its ‘setup’ layer and ‘animation layers’ - the only controllers that get keyed, saved as animation etc are the ones treated as layers.

This ‘treatment’ is by allowing a float controller to have internally multiple sub-controllers i.e the animation layer, relative/absolute layer.

The CreateLayerFloat function of a hub node creates the controller on itself, and then gets instanced onto a target float controller. Here’s how:

(
        -- first off lets build a CATParent & add a hub
        [B]local[/B] p0, root, null, layerController

        p0 = CATParent()
        null = point()
        root = p0.AddHub()
        root = p0.RootHub
  
        -- now we create the float controller and instance it
        layerController = root.CreateLayerFloat()
        layerControllerr.setupVal = null.pos.controller[1].controller.value
        null.pos.controller[1].controller = layerController
)

So the createLayerFloat (as the name implies) only allows it to be instanced onto float controllers.

Now currently this is instanced onto the base controllers of the null. But what if we need to add some custom scripting or a base transform that doesn’t need to exist with in the layers paradigm i.e. what if we want to give the null a base constraint e.g. a position_constraint:

(
	[B]local[/B] p0, root, null, layerController
	
	p0 = CATParent()
	null = point()
	
	root = p0.controller.addHub()
	root = p0.rootHub
	
        null.pos.controller = position_list()
	null.pos.controller[1].controller = position_constraint()
	
	null.pos.controller[1].controller.appendTarget root.node 100
	null.pos.controller.available.controller = position_xyz()
	null.pos.controller.setActive 2
	
	layerController = root.CreateLayerFloat()
	layerController.setupVal = null.pos.controller[2][1].controller.value
	
	null.pos.controller[2][1].controller = layerController
)

Now this null follows the root hub, but its own x position controller inherits the layers system.

Now sometimes you’ll want to get the value of layer on the float controller of the null, we can call this:

null.pos.controller[2][1].controller[currentlySelectedLayer]

And to get the current selected layer we have to get the CATParent - something sadly we cant pull from the layerFloatController (unless we embed it into an attribute or something):

root.CATParent.SelectedLayer

-- or

p0.SelectedLayer

You’ll need to do this for variables that you have to pull out of custom attributes for example. And you’ll have to check if the animation mode is on etc…


#9

This thread has been automatically closed as it remained inactive for 12 months. If you wish to continue the discussion, please create a new thread in the appropriate forum.