The Animation Mixer is a tool that allows users to layer and mix sequences in a nonlinear and non-destructive way. A user can insert clips onto the mixer's tracks and then create relations and transitions between clips, change the timing of the sequence, and apply other kinds of effects.
See Sources and Clips for an explanation of how data is loaded into the mixer from the perspective of the SDK. For more information on the mixer in general, see the Nonlinear Animation (user) guide.
This diagram illustrates what you can expect when writing scripts or programs that read mixer data. There is only one mixer per model, which means that animation in a scene can be organized by model (character). In the diagram above, the SceneRoot is at the top, but any model could be at the top.
Accessing the Mixer and its Components
The Mixer class itself is really a special kind of ClipContainer, which is in turn a kind of Clip on steroids: the ClipContainer class represents compound clips (of which the Mixer is the Ď‹ber-container). Here is a quick breakdown of the common classes you will work with while working with the Mixer and high-level animation. The table presents the following information:
Class/Object: Provides links to the OM object and C++ class in question.
Accessed via...: Gives a link to the OM property and C++ function which you can use to access each object.
Synopsis: Provides a brief overview of the object or class. The reference page will provide more details.
Type: Lists the possible return values if you test the object's type using the SIObject.Type or SIObject::GetType property.
siClassID: Gives the class id (as one of the siClassID enum values) that you can use to test with the SIObject.IsClassOf method in the object model or against the return value from any of the GetClassID functions implemented on each class in the C++ API.
What to Look Out for: Any tricks, restrictions or limitations are presented here.
Class/Object |
Accessed via... |
Synopsis |
Type |
What to Look Out for |
|
---|---|---|---|---|---|
Specialization of ClipContainer |
|
||||
Model.Mixer or Model::GetMixer ClipContainer.Clips or ClipContainer::GetClips |
Gives access to the basic elements of the mixer: clips, tracks, transitions, and clip relations. Mostly used for compound clips, but can also represent the Mixer. Both can contain other clips, tracks and transitions. |
||||
ClipContainer.Clips or ClipContainer::GetClips |
Basic building block in the mixer which gives you access to the bulk of data: tracks, transitions, clip relations, sources, clipeffects, mapped items and the time control |
any of the values in the siClipType enum |
|
||
Clip.Relations (OM only) ClipContainer.NestedRelations or ClipContainer::GetNestedRelations |
Find out which is master/slave and swap ('bout what you'd expect) |
"ClipRelation" (not a value in any enum) |
|
||
Just a conduit to clips |
siTrackType will match up with siClipType on the track's clip collection |
||||
Gives access to start and end clips. |
any of the values in the siTransitionType enum |
-- |
|||
Generic source for action, audio, and images. Gives access to properties. |
siImageSourceType (from siType) |
-- |
|||
Allows you to offload and reload sources but mostly gives access to underlying animation source items. |
siActionType (from siType) |
|
|||
Gives access to the animation DataSource (for example, an FCurve) and its target (the parameter which the animation source drives). |
any value from the siAnimationSourceItemType enum |
|
|||
AnimationSourceItem.Source or AnimationSourceItem::GetSource |
Not a true interface: basically an alias for fcurves, expressions, constraints, shape keys, etc. |
whatever the animation source's data type is (eg., an FCurve will return one of the siFCurveType values) |
does NOT match siAnimationSourceID but rather any source's class ID (eg., an FCurve will return true when tested with siFCurveID and false with siAnimationSourceID) |
|
|
Gives access to the related source, the parameter which is driven by the related source, and any clip effect items applied to the clip |
any value from the siMappedItemType enum |
||||
Gives access to ClipEffectItems. |
"" (empty string) |
||||
MappedItem.ClipEffectItem or MappedItem::GetClipEffectItem |
Contains expressions that control the clip without affecting the Source on which the clip was instantiated. |
"" (empty string) |
|
||
Gives access to the clip's Time Control property, which may be used to add extra clip effects like cycling, bouncing, or holding for fractions of the clip length. |
"timectrl" (scripting name of the Time Control property) |