Softimage SDK Programmer's Guide > Working with the SDK > Animation >

# Animation Levels

In Autodesk Softimage, there are basically three types of animation, generally grouped into the following animation levels:

- Low-Level (Parameter-Based) Animation

- Character Animation

- Nonlinear Animation

## Low-Level (Parameter-Based) Animation

This type of animation involves some kind of data directly attached to a parameter driving its value. Since it happens at the parameter level, which is the lowest customizable element in Softimage, it is generally called low-level animation.

Typical examples of low-level animation are:

- FCurves (keyframing)

- Constraints

- Linked Parameters

- Expressions

- Custom Operators

Note

These types of animation form the building blocks of the third type of animation, Nonlinear Animation.

### Basic Animation Tasks

Basic animation tasks involve working at the parameter level. For example, setting keys on an FCurve. The following table provides links to the reference pages for many of the SDK tools you can use to help accomplish these tasks:

Type of Task | Commands Available | Object Model | C++ API
--- | --- | --- | ---
Keyframing (setting and removing keys, working with fcurves) | SaveKey SaveKeyOnKeyable SaveKeyOnMarkedKeyable SaveKeyOnPath SavePivotKey SetKeyUsingMarkingSet SetKeyableAttributes CopyKeys CutKeys GetKeyInfo PasteKeys SaveActionKey KeyAllBoneRotations RemoveKey RemoveKeyOnKeyable RemoveKeyOnMarkedKeyable | FCurve FCurveKey FCurveEditor | FCurve FCurveKey
Locking parameters and objects | Lock Unlock InspectLocks | Parameter.IsLocked Parameter.SetLock Parameter.UnSetLock Parameter.LockLevel Parameter.LockType ProjectItem.IsLocked ProjectItem.LockOwners ProjectItem.SetLock ProjectItem.UnSetLock ProjectItem.LockLevel ProjectItem.LockMasters ProjectItem.LockType FCurve.Locked FCurveKey.Locked | Parameter::IsLocked Parameter::SetLock Parameter::UnSetLock Parameter::GetLockLevel Parameter::GetLockType ProjectItem::IsLocked ProjectItem::GetLockOwners ProjectItem::SetLock ProjectItem::UnSetLock ProjectItem::GetLockLevel ProjectItem::GetLockType FCurve::GetLocked FCurveKey::GetLocked
Tagging parameters | Tag Untag TagObject | Parameter.Tags ProjectItem.TaggedParameters | Parameter::GetTags ProjectItem::GetTaggedParameters
Ghosting animation (onion-skinning or lightboxing) | ToggleGhosting UnghostAll | n/a | n/a

## Character Animation

Character Animation involves building skeletons and enveloping them, setting IK/FK constraints on their joints to simulate natural movement, and then keyframing their movement. Some issues pertaining to Envelopes are covered in this chapter.

When creating more complex characters, usually control rigs are used. You can make your own character rigs using the SDK's Character Development Kit (CDK).

## Nonlinear Animation

Nonlinear Animation is another layer of abstraction: it basically involves wrapping low-level and shape animation in a special container called a source and then using that source to instantiate a clip in the Animation Mixer. That is, a version of the source animation that can be modified independently of the original source. The other benefit of the mixer is that, as its name suggests, you can use it to build transitions between clips, apply weighting, cycle and warp clips, etc.

### High-Level Animation Tasks

High-level animation tasks are often related to the Animation Mixer and its basic components, Sources and Clips. For example, creating clip effects. The following table provides links to the reference pages for many of the SDK tools you can use to help accomplish these tasks:

Type of task | Commands Available | Object Model | C++ API
--- | --- | --- | ---
Copying and pasting animation | ApplyDeformKey ApplyShapeKey ReplaceShapeKey SaveDeformKey SaveShapeKey SelectShapeKey StoreShapeKey | ShapeKey ShapeClip ActionSource | ShapeKey ShapeClip ActionSource
Clip effects | SaveOffsetKeys CreateOffsetEffect OffsetValueMap ResetOffset SaveOffsetKeys | ClipEffect ClipEffectItem MappedItem | ClipEffect ClipEffectItem MappedItem
Merging animation (copies only existing keys into action) | MergeClips | Clip ActionSource FCurve | Clip ActionSource FCurve
Plotting (or freezing) animation (creates one key for each frame in the action) | PlotAndApplyAction PlotConstrainedTransforms PlotShape PlotToAction FreezeAndReplaceClips FreezeClips |  |

## Radians vs. Degrees (Rotations)

Something important to remember when working with rotations is that scripting commands process rotation data as degrees whereas the object model and the C++ API process rotation data as radians. To help cope with converting between these systems, the SDK provides some conversion functions:

- XSIMath.RadiansToDegrees or XSI::MATH::RadiansToDegrees

- XSIMath.DegreesToRadians or XSI::MATH::DegreesToRadians