3ds Max Animation
Every property of every object in 3ds Max can be exposed by the developer as animatable - there are few properties that do not make sense to be animatable like the "Generate Texture Coordinates" checkbox in geometry primitives, but these are the exception. In general, almost every property can be animated. 3ds Max uses a special object class known as animation controller to manage animation data (similar to Houdini's CHOPs). Animation controllers are plug-ins that can be assigned to any animatable track and can either manage keyframes in various ways (like Bezier, Linear, Boolean controllers), generate animation data procedurally (Noise, Expression, Script, Waveform controllers) or read data from external sources (Audio, Motion Capture etc.)
Controllers can be assigned to tracks by the user if needed or will be assigned by the system automatically either at object creation or at first animation change using a list of default controllers. For example, when a Box is created, its Position, Rotation and Scale properties will have default controllers already assigned since it is assumed that these properties will be most likely animated. At the same time, the Box base object's properties like Width, Lenght, Height etc., while animatable, will have no default controllers assigned until the user tries to animate them - by default, they will be assigned a Bezier Float controller.
Controllers can also be stacked using compound controllers - for example, a Position_XYZ controller has 3 sub-controllers managing the data of the X, Y and Z position of the object; the Float List controller can have an arbitrary number of Float sub-controllers which can be blended using Weights in various ways and so on. This means that 3ds Max allows multiple controllers to be assigned to the same track and mix animation data on the fly without any intermediate null objects - for example, to make an already animated camera shake a bit, the user can assign a List controller on top of the existing Position controller and assign a Noise controller to generate additional random shakes on top of the keyframe data.
All controllers in 3ds Max can be assigned optional Ease and Multiplier curves to manipulate the final value over time. An Ease curve changes the time the final value is taken from. The Multipler curve multiplies the controller's value with the multiplier's value. These curves can also be stacked, allowing Eases of Eases and so on.
3ds Max provides two main animation modes - Auto Key and Set Key. The Autokey mode was the original and only option in the earlier versions of the software up until 3dsmax 5 and was initially called simply "Animate". When Auto Key mode is on, any changes to animatable properties cause a new animation key to be generated automatically. If there are no keys in the track and the time is different than 0, a default key with the original track value will be generated on frame 0. (in 3ds Max 2008 and higher, this feature can be turned off or changed to create default keys on frame 1 instead of 0).
When using the Set Key mode, changes to animatable tracks will be recorded but not applied until the user presses the Key button. Keyable tracks can be specified using filters and flags in the Track View.
Keys can also be set manually outside of the animation modes - to keyframe position, rotation and/or scale only, the user can move the time slider to the desired frame and right-click the time slider to open a dialog. Right-clicking on one frame, then holding and sliding to another frame will copy the values from the initial time to keyframes on the new time.
Spinner values of animatable properties displayed in the command panel, material editor etc. can be keyframed manually by holding down the SHIFT key and right-clicking the spinner's arrows. Keyframes will be displayed as red brackets around an animated spinner.
3ds Max provides multiple ways to drive values with other values: The Wire Controller is a simplified version of a Script controller where the user can select between one-directional or bi-directional wiring and provide MAXScript expressions for both sides. The Reaction controller (similar to Set Driven Key in Maya) allows the user to set the values of the driven controller based on values of the driving controller, while providing curve controls to adjust the interpolation between these states. The Expression controller allows the user to define variables which can be connected to object tracks and calculate a new value using these variables and a set of useful mathematical functions (including an IF statement). Finally, the Script controller can use the full power of MAXScript to calculate the final value of the animated track. In addition, due to the fact that the animation of each parameter is managed by a dedicated controller object, controllers can be instanced between tracks of compatible type, for example the radius of a sphere could share the same controller as the height of a box, thus linking the two in an absolute fashion. Using instanced controllers inside List controllers allows this absolute relationship to be mixed with other controllers for varying results. Instanced controllers have been available since Release 1.0 and are the most stable way to connect two parameters' values in an absolute way. The instancing can be performed inside of Track View or by right-clicking value spinners in the UI and using the context menus to Copy and Paste Animation.