Introduction
-
This document describes the Granny Animation Studio program in
detail.
- See the QUICK START GUIDE to get up and running
quickly!
Time
Scrub Tab
- Click
the time scrub
tab to enable time scrubbing.
- While time scrubbing the state machine cannot be edited. It
will be grayed out.
- Drag the hash-marked timeline back and forth to scrub
time.
- Press space-bar while scrubbed back to play forward from a
historical point at normal speed.
- Click hide
scrub to resume normal playback.
File
and Character Tab
- Load...: Load a saved state machine.
- Save:
Save the current state machine.
- Save As:
Save the current state machine under a different
name.
- New:
Start a new, empty state machine.
- Set Model...:
Choose the gr2 file that will contain models for
the currently-loaded state machine.
- The dropdown lets you select a model from the loaded gr2 file. If the gr2
contains multiple models, select one to work with from the
dropdown.
- Retarget...:
Choose the gr2 file that will contain models that have a skeleton from
which to retarget. This is the skeleton to which your animations were
authored, if differen from the one in Set Model above.
- The dropdown lets you select a model from the loaded gr2 file. If the gr2
contains multiple models, select one to work with from the
dropdown.
- Animations...: Open the Animation
Set Manager.
- The dropdown lets you select which animation set to display.
Camera
Controls Tab
- Sample character motion: Apply root motion deltas from the
running state machine to the display character.
- Camera track:
Make the camera track the character's root if
it moves away from the origin.
- Render character skeleton: Turn off mesh display and
instead render lines connecting the bones of the character skeleton.
- Texturing: Enable textured rendering.
- Snap Camera
to Character: Move the camera to the character
and point at it.
- Reset Character Position: Move the character to the origin.
User
Macros Tab
- Because
the Animation Studio UI is largely written in lua, it is
possible to implement custom UI elements in lua.
- This menu is a place to put custom UI elements.
- To start running custom lua commands in the Animation
Studio:
- Create a file called user_macros.lua and place it next to
anim_studio.exe.
- Add 'function UserStartupCallback(command_line)'.
- Use the Edit_* commands defined in
statement_editstate.cpp to control the Animation Studio.
- This is an advanced feature of the Animation Studio.
Contact Granny support for more details.
Controller Tab
- This
menu is an interface
for
driving the state machine with an Xbox 360 or Xbox One controller (use
of an Xbox One controller requires the appropriate drivers).
- +:
Add a new controller scheme.
- -:
Deletes the current controller scheme.
- Assign
the controller buttons to the functions listed in the dropdowns.
Options Tab
- Debug Text: Draw debug text to the character pane about the state of the current container
- Conditionals: shows the value of conditionals.
- Show false conditionals: if disabled, hides false conditionals for a cleaner display.
- Parameters: shows the value of all parameters on parameter nodes.
- Scalar outputs: shows the value of scalar outputs.
- Scalar inputs: shows the value of scalar inputs.
- Event outputs: when an event output is triggered, it will show for a few seconds.
- Event inputs: when an input event is triggered, it will show for a few seconds.
- Morph channels: shows the weight of each morph channels.
- Show zero weight morph channels: if disabled, hides zero weight channels for a cleaner display.
- Debug Draw: Draw debug bars to the character pane about the state of the current container
- Animations: Shows when animation and pose nodes begin and end evaluation.
- Events: Shows when events occur.
- Time Window: How far back in time to display debug draw for.
- Draw Highlights: Highlight edges that feed into selected nodes in the blend graph display.
- Editor Settings: Control the behavior of the editor
- Auto-link blend node outputs:
if true, when you connect a pose in a blend node, the editor will
attempt to do a name wise match of the non-pose output automatically.
- Auto-add blend graph child outputs:
if true, when you add an output to a blend graph, it will automatically add that output to all its children.
- Add corresponding inputs: Also add corresponding inputs to the children that get outputs added above.
- Load last file on startup: Load the last gsf automatically.
- Logs: Path to a directory to store a text log of the current run.
- Browse: Set the log directory with the browse dialog.
- Explore: Open the current log directory.
- Open: Open the current log.
Quick
Slots Tab
- Quick
slots is a searchable list of animation slots.
- Click a slot
name to add it to the current container.
Animation
Set Manager
- Dropdown:
The current list of animation sets.
- +:
Add a new animation set.
- -:
Remove the current animation set.
- Add
Animation...: Add a gr2 source file containing one or
more animations.
- Rebind:
If the animation is not bound, click 'rebind' to re-bind that
animation if possible.
- Add slot: Add a new, unbound
slot.
- Rebind: Attempts to bind all unbound slots.
- Sort:
Sort the slots alphabetically on the slot name.
- Add all: Adds slots for all animations.
- Remove all: Removes slots for all animations.
- The Source File list shows the gr2 and the animations it
contains.
- Drag a single animation into the slot pane to add a single
animation.
- Drag the entire gr2 to add slots for all the animations in that gr2
at once.
- Mouse over a bound animation slot to show that animation in the
preview window.
- Click the x next to an animation slot to remove it.
- Right-click an animation binding to un-bind it.
Hotkeys
- Global
- ?: Show the help page.
- Esc: Dismiss the help page.
- Character
- F: Frame the character in the viewport.
- Time Control
- Space or Play/Pause: Toggle playback in the preview
window.
- Left: Run time backward (when scrubbing).
- Right: Run time forward (when scrubbing).
- Esc: Dismiss the time scrubber.
- Hierarchy
- Alt-Left or Back: Go back one level.
- Alt-Right or Forward: Go forward one level.
- State Machine
- Left: Align the selection left.
- Right: Align the selection right.
- Up: Align the selection up.
- Down: Align the selection down.
- Backspace/Delete: Delete the selection.
- Esc: Close all edit dialogs.
- Quick Slots
- Q: Open/Close Quick Slots tab.
- Application
- Ctrl-N: New machine
- Ctrl-O: Load
- Ctrl-S: Save
- Ctrl-Z: Undo
- Ctrl-D: Duplicate single node
- Ctrl-C: Copy single node
- Ctrl-V: Paste node
- Ctrl-A: Animation Set Editor
- `: Activate Console
Node
and Blend Graph Editing
- Double-click anywhere on a blend graph or state machine to enter it.
- Use left and right mouse buttons to go back and forth in
containers, or left-click the target container in the navigation bar.
- Right-click anywhere on a node to edit its properties in the node properties dialog.
- To rename a node, select it and press the F2 key, or right click it to bring up its properties dialog and edit it there.
- To close the node properties dialog, press the escape key, click off of the dialog or click the 'X' close button.
- To delete a node, press the delete key or right click the node and press the delete button.
- Note:
You can also edit the properties for a blend graph or state machine by descending into it
and right-clicking its name in the navigation bar.
- In a state machine:
- Left-click the icon on a node to activate or play that node.
- Note: Unlike at runtime, if a defined transition
does not exist to a node, activating that node it will force a pop to that node.
- Right click the node and click the "Make Start" button to make that node the start node for that state machine.
- Create a transition
between nodes by left-clicking on the darkened border of one node and
dragging a transition arrow to another node.
- You can also create a transition even faster by holding down the control
key and dragging from anywhere in a node to anywhere in another node.
- Delete transitions by right-clicking to highlight the
transition, then pressing the delete or backspace keys.
- Edit a transition's properties by right-clicking the
transition.
- Left-click a transition to follow it.
- In a blend graph:
- Create a connection by clicking on the output of one node
and dragging it to the input on another node.
- Remove a connection by right-clicking on the input it is
attached to.
- It is possible to send one output to multiple inputs by
drawing multiple lines.
Nodes
- State Machine Node
A container
for state nodes. From within a state machine node, ctrl-left-click its
name in the navigation bar at the top of the screen to re-activate it
or right-click
to edit its properties:
- Always use anim events:
- This option is global, and is shown only on the root state machine.
- It specifies whether every animation in the state machine
will generate the default animation
events), rather than having to activate them on each
node.
- This option overrides the per-animation setting for Anim
Events.
- Events triggered by Always Use Anim Events only show up on the first Event output channel, so that they are not duplicated.
- Retarget animation sources:
If a retargeting model is set, retarget at each animation evaluation,
rather than once at the end. This is a little slower, but required if
using any sort of node in the graph that relies on absolute positioning
(like IK).
- TransExit:
Allow
transitions to this state machine to be interrupted by another transition.
- AnyTrans:
Allow
a transition request to this state from any other state to
succeed.
- See Transitions for a description of the options for the 'any' transition. These options apply to the generic 'any' transition to this state.
- Any transition conditionals: If the conditionals are met, the 'any' transition to this state will be triggered automatically.
- Use last state on activation: When this state machine is activated, make its start state the active state it was in when it was last left.
- If the state has never been entered, it will use the
default start state.
- If the state was in a transition when it was last left,
it will use the destination of that transition as its start state.
- A transition to this state can override this option by setting the End Start State.
- Use random state on activation:
Randomly select a state in this state machine as the start state each
time the state machine is activated. This tries to avoid a repeat of
the last few states chosen (but will allow the occasional, rare repeat.
- Add Scalar: Add a named scalar output channel.
- Add Event: Add a named event output channel.
- Add Morph: Add a named morph output channel for a given
shape
weight.
- The output name (left edit box) can be anything
- The mesh/track name (right edit box) name must match the name of the mesh that the
above weight will apply to.
- Morph
shape weights are set to the output channel by binding an animation
node's event track to that output name with
the dropdown in the animation
node.
- Auto Link All Outputs: Does a name wise match of all the blend nodes in the graph.
- Add
Conditional: Add a logical conditional that conditional
transitions
can sample.
- There are three types of conditional:
- Scalar
Compare: Compare a scalar parameter to a fixed
value.
- The scalar compare can contain multiple comparisons.
- Checking all must be true will require all
the scalar comparisons to succeed before triggering the conditional.
- Event
Triggered: Trigger the conditional if the specified event is triggered.
- Conditional output goes on the specified output node if the state machine has an output node.
- External Condition: For using conditions defined in other state
machines in the current state machine.
- State Machine:
The name of the other state machine in the graph on which the
condition is defined.
- Track
Condition: The name of the condition to track
from the above ancestor.
- Node State: A condition suceeds if any of the the selected state information about the selected node is true.
- Node: The node to consider.
- TransitionTo: If checked, condition will succeed if Node is being transitioned to.
- Active: If checked, condition will succeed if Node is active.
- TransitionFrom: If checked, condition will succeed if Node is being transitioned from.
- See Node and Blend Graph Editing for more information on editing state machines.
- Blend Graph Node
A container
for animation blends. From within a blend
graph, ctrl-left-click its name in the navigation bar at the top of the screen to re-activate it or right-click
to edit its properties:
- TransExit: Allow
transitions to this state machine to be interrupted by another transition.
- AnyTrans:
Allow
a transition request to this state from any other state to
succeed.
- Duration:
Set the duration of the AnyTrans transition.
- Inside a blend
graph there are inputs on the left and outputs on the
right.
- Inputs
appear if the container for the blend graph has input generators (like
a Parameter node or Event source).
- Outputs in addition to the pose output appear if the
parent
container has named scalar, event or morph outputs.
- See Node and Blend Graph Editing for more information on editing blend graphs.
- Animation Node
An animation data source.
- Anim:
The animation slot this node will play.
- Looped:
Make the animation play repeatedly. If not checked, animation will play once until
the end, then freeze.
- Speed:
Scale the playback speed of the animation.
- TransExit:
Allow
transitions to this state machine to be interrupted if a
transition out of this state machine is requested or becomes conditionally activated.
- AnyTrans:
Allow
a transition request to this state from any other state to
succeed.
- Duration:
Set the duration of the AnyTrans transition.
- Scalar and Event Tracks
- These appear if there is a scalar, event or morph
event output set on the parent container.
- Use the dropdown to link the named output to a float or
text track in the animation.
- Set the event track to the entry marked <Anim.
events> to make an animation event get generated when the
animation starts
and when it loops.
- Parameters Node
Numerical inputs from the game to the
state machine
- Add Parameter: Add a parameter to the node.
- Integers Only: restricts this parameter to an integer.
- Max Speed: prevents the parameter from changing faster than this many units per seconds.
- Acceleration: caps the acceleration of the parameter.
- Cyclic:
if true, the parameter wraps around. For a timer, that will make the
timer run over and over again. For accelerating parameters, it will
properly handle wrapping the accelerated parameter around to the
beginning.
- The dropdown lets you select what kind of parameter it is:
- Random: A new random number is returned every time it is sampled.
- Timer: A timer that counts down from the max time to zero.
- The timer can also take a range to randomly pick a max time from.
- The timer starts when its parent container is activated.
- Value: A parameter driven by slider or by code.
- Drag the slider to set the value.
- Code can drive the parameter node by finding it then setting
the value:
parameters* Params =
GSTATE_DYNCAST(CharacterInstance->GetStateMachine->FindChildRecursively("Path|To|Params"),
parameters);
if( Params )
{
for (int Idx = 0; Idx
< Params->GetNumOutputs(); ++Idx)
{
if (strcmp(Node->GetOutputName(Idx), "MyParam") == 0)
Params->SetParameter(Idx,Value);
}
}
- Event Source Node
Input for edge
events triggered from the game.
- Add Event: Click Add Event to create a new event.
- Code drives the event node by finding it and setting the
event:
event_source* EventSource =
GSTATE_DYNCAST(CharacterInstance->GetStateMachine->FindChildRecursively("Path|To|Events"),event_source);
if( EventSource )
{
EventSource->PokeEvent("MyEvent");
}
- Comment
Drag a comment box around
nodes to describe them.
- Blend Node
Blend or select
between animations.
- Parameter:
The value used to decide what inputs to sample. This can be 0-1 or some
other range (maybe 0-5 if there were 5 inputs to map to
integers). The blend node will split up the values evenly. Use linear equation, linear remap and custom remap nodes to
get more
detailed control of the input.
- PoseIn:
Input pose.
- PoseOut:
Output pose.
- Phase
locked when possible: Scale the speed of
the
animations that are being blended together so that their phases match.
This assumes once cycle per loop of each animation.
- Use
neighborhooded blend: Turn off the rest-pose quaternion
blend
heuristic. Normally when two local poses are combined, the
quaternions are brought into
the same hemisphere as the rest pose. This decides what is
supposed to happen when you have rotations that are closer to each
other than they are to the rest pose. Use neighborhooded blend makes
the blend always take the short way around. The first rotation
sets the hemisphere for the quaternion blends, and then every rotation
after that is brought into the same hemisphere as the current rotation.
- Choose on
activation: Only sample the parameter when this
node is activated, rather than sampling it continuously.
- Circular blend:
Parameters map the inputs circularly, so that a parameter value close
to 1 (but less than one) will blend between the nth input and the first
input. This is useful for blending for 2D movement, for example.
- Additive Blend Node
Additive
blend nodes add an animation to a base animation, with an optional mask
layer. See the Additive Blending discussion in granny2.chm in the
Advanced Animation section for an in-depth discussion of
Granny's
additive animation approach.
- Amount: How much of the additive animation to contribute.
0 is no contribution, 1 is full contribution.
- Into:
The animation we will add onto.
- Base:
The animation that the delta (additive) animation is relative to. This
is often the rest pose, but could also be an animated input.
- Delta:
The animation to add.
- Mask:
A mask input for applying the additive
animation to just part of the character.
- Masked Combine Node
Combine
two incoming animations. - From
Pose: This affects
bones that are not specified in the bone mask
- To Pose: This affects bones that are specified in the mask.
- Mask Source Node
Node for selecting a subset of the bones in a skeleton.
- While selected, the triangles of the character in the preview
window that are affected by the mask are drawn lighter, and the
triangles that are not affected by the mask are drawn darker.
- Shift-click the "+" sign next to a bone name to expand all the child bones under that bone.
- Note: If you select a bone without its children being expanded, all of its children are selected to be part of the mask.
- Mask Invert Node
Invert a mask source.
- Bones that don't occur in the mask source will
contribute to the output.
- Mask Union Node
Perform a union
operation on two mask sources.
- Bones that occur in either mask
source
will contribute to the output.
- Constant
Velocity Node
Output a constant root motion velocity.
- Mirror Node
Mirror selected joints of the input pose across a given axis.
- Axis To
Mirror: Axis to mirror across. For a character this is typically the left/right axis (not the facing axis or up axis)
- Name Swap
Pairs:
Joints to mirror (left_hand and right_hand
for example). These can be prefix strings as well, so if you create a swap
pair with "left" and "right", it will swap any joint that starts with
"left" and "right" in the name if the rest of the name matches, so it
will catch left/right_hand, left/right_shoulder, etc.
- Time Shift Node
Scale and offset the sample time for an animation. The equation is
NewTime = Time * Scale + Offset.
- TimeScale:
Amount to scale the sample time by.
- TimeOffset:
Amount to offset the sample time by.
- Offset Is
Relative: If true, the offset is scaled by the
duration of the input: NewTime = Time * Scale + Offset * Duration.
- The time shift node can time shift scalar, event and
morph edges.
- Time Select Node
Set one specific time to sample an animation at.
- Time is relative: If true, time is scaled by the duration
of the input.
- The time select node can select time for scalar, event
and morph edges.
- Time Clamp Node
Clamp the time that an animation is sampled by to a specific
range.
- MinTime:
Minimum time to allow.
- MaxTime:
Maximum time to allow.
- Range is
relative: If true, the range values
are scaled by the duration of the input.
- The time clamp node can clamp scalar, event and morph
edges.
- LOD Protect Node
Turns off LOD for the input to this node.
- Linear
Equation Node
Modify parameter according to a linear equation: Output = A * Input + B.
- Linear Remap Node
Modify parameter according to a piecewise linear, continuous curve.
- Custom Remap Node
Modify parameter
using custom ranges.
- Modes:
- Direct:
Input -> Output, values in between
adjacent inputs output the value associated with the smaller input.
- Direct
Strict: Input -> Output, but will trigger
a GStateWarning if the inputs don't match exactly.
- Integer
Interpolated: Input -> integers in
between outputs.
- Float
Interpolated: Input -> continuous floats
between outputs.
- Direct
With Fallback: Input -> Output, but will use the Fallback value if the inputs don't match exactly.
- Add as many ranges as needed to control the
inputs.
- Clamp Value Node
Clamp a parameter to a range.
- Event Mixer Node
Combine two or more event outputs to a single edge. If either event
triggers, the output event will trigger.
- Event Renamer Node
Rename events to keep them distinct.
- The dropdown list shows any events that are valid in this
container.
- Select an event and type in a new name next to it rename
it for its outputs.
- 2-Bone IK Node
Hip/Knee/Angle IK system for foot placement.
- Foot
Effector: The foot joint that the IK will try to move into place.
- Knee Joint:
The joint, connected to the foot effector, to bend.
- Hip Joint:
The joint, connected to the knee joint, to rotate.
- Knee
Plane: A normal perpendicular to the plane within which the
knee should rotate
(in a human knee this would come out the left or right side of the
knee).
- Code keeps the desired foot position up to date by
finding the node and setting the position:
twobone_ik* ik =
GSTATE_DYNCAST(CharacterInstance->GetStateMachine->FindChildRecursively("Path|To|IKNode"),
twobone_ik);
if( ik )
{
ik->SetFootPosition(pos); //pos is a float* pointing
to an array with 3 float elements.
}
- Position IK Node
IK system to move the end effector of a joint to a position in space. - Target:
- Note:
The target is a character-relative Mat4x4, not a world-space Mat4x4.
GState uses a full Mat4x4 because it is possible to offset the end
effector using target's frame of reference using the From Target Offset Type. If you're not using the offset, you only have to set the position row of the Mat4x4.
- Bone Name:
Target specified using the name of a bone in the current skeleton. Your
runtime must cache a transform with this name per frame using
GStateCacheMat4x4.
- Custom Name:
Target specified using a user-supplied name. Your runtime must cache a
transform with this name per frame using GStateCacheMat4x4.
- User Specified:
Target position can be set with sliders on the node in the tool, or
with SetDefaultTargetMat4x4() from your runtime. Note
SetDefaultTargetMat4x4 assumes a character-relative transform, not a
world transform.
- X, Y, Z:
The position to move the end effector to.
- Range: Sets the range of values for the position sliders on this node.
- Offset:
- X, Y, Z:
The offset position. Exactly what type of offset depends on the Offset Type (see below)
- Range: Sets the range of values for the offset sliders on this node.
- Offset Type:
- From
Target: offsets the position the is from the target position or target
joint (depending which is active). The offset is in the space of the
target joint (or the position and orientation set on the node if the
joint name is not active).
- Note: If you are combining
a Position IK node with a later Orient Match node on the same chain,
you should use a From Target offset, so that the Orient Match does not
move the target off the object Position IK is trying to hit.
- From End Effector: offsets the end effector position by this much (in the space of the end effector joint).
- CCD Iterations:
How many iterations of the Cyclic Coordinate Descent solver to run while solving.
More iterations will be more accurate, but take more CPU time.
- Add Joint: Add a joint to the joint chain
- End Effector: The end joint in the chain that will be moved to the target position (or moved as close as possible if it cannot fully reach)
- Chain Joint N: The N'th joint away from the end effector in the chain. These do not have to be contiguous in the skeleton.
- AimAt IK Node
IK system to point an axis of a bone at a position in space, moving an
IK chain from the root to the end effector to do so.
- X, Y, Z:
The position to aim at.
- Aim Axis:
The local axis the character faces (forward
vector)
- Ear Axis:
The local axis of the character's 'ear'
(side vector)
- Ground
Normal: The local up axis (up vector)
- End
Effector: The bone to point at the position.
- Code keeps the target position for this node to
aim at up to date by finding the node and setting the position:
aimat_ik* ik =
GSTATE_DYNCAST(CharacterInstance->GetStateMachine->FindChildRecursively("Path|To|IKNode"),
aimat_ik);
if( ik )
{
ik->SetAimPosition(pos); //pos is a float* pointing to
an array with 3 float elements.
}
- Orient Towards Node
Orient one or more bones toward a target. There is no IK here,
this is just rotating a single bone. This rotation
uses the shortest quaternion path, so it won't necessarily be axially
aligned.
- X, Y, Z:
The default position to orient towards.
- Aim Axis:
The local axis the character faces (forward
vector).
- Bone:
The bone to rotate toward the target.
- Code keeps the target position for this node to
aim at up to date by finding the node and setting the position:
orient_towards* orient =
GSTATE_DYNCAST(CharacterInstance->GetStateMachine->FindChildRecursively("Path|To|IKNode"),
orient_towards);
if( orient )
{
orient->SetAimPosition(pos); //pos is a float*
pointing to
an array with 3 float elements.
}
- Orient Match Node
Sets
the orientation of a bone to match that of the given target. There is
no IK here,
this is just rotating a single bone. This is useful for running
directly after position IK to match the orientation of the end effector
to a contacted surface or object. For this to work well, the Orient
Match Bone should be the same joint as the End Effector in the upstream
Position IK, and you should not use the End Effector Offset type on the
position IK (though Target Offset is ok) otherwise, the Orient Match
will move the end effector away from its target.
- Target:
- Bone Name:
Target specified using the name of a bone in the current skeleton. Your
runtime must cache a transform with this name per frame using
GStateCacheMat4x4.
- Custom Name:
Target specified using a user-supplied name. Your runtime must cache a
transform with this name per frame using GStateCacheMat4x4.
- User Specified: Target orientation set at runtime with SetTargetOrientation() (or you can use Offset X, Y, Z below)
- Offset X, Y, Z:
rotation offset about the X, Y and Z axes for fine-tuning the
orientation match. If no target bone is specified, you can specify a
node-driven orientation for a joint by setting these.
- Bone:
The bone to rotate toward the target.
- Selection Node
Select from among a list of input nodes based on the given
parameter. - Choose on
activation: Only sample the parameter when this
node is activated, rather than sampling it continuously.
- Pose Storage
Node
Capture a single pose, and give it back upon request.
- Connect an animation to the PoseCapture input to start
using the Pose Storage Node.
- Rest Pose:
Click to reset the pose storage node to the
rest pose.
- Capture
time: Drag the slider to select a pose from the
input and release to hold that pose.
- Sample once per frame: Instead of storing a specific captured pose, this will sample the input
pose, but only once per frame. If the node has multiple outputs, this
can be a large performance win.
- Rest Pose Node
Generate the rest pose of the character.
Transitions
- For
an animation state request to succeed, either that state must be marked
as AnyTrans, or it must have a transition to it from the current
state.
- See the Node
and Blend Graph Editing section for details on creating
transitions.
- Transition Properties:
- TransExit:
Allow the transition to be interrupted if the target state's exit
conditions are met.
- Type:
The type of transition. Not all transitions are defined and visible for all start
nodes. Each type below lists the start nodes it is defined for.
- On
Request: Triggered if the code requests its end node via
RequestChangeToState().
- This transition is defined for all start node types.
- Note that the OnRequest will fail if conditionals are
added to it and those are not met.
- On Loop:
Triggered if the start node loops.
- This transition is defined for animation and blend graph start nodes.
- On
Subloop: Triggered if a sub-node of the start
node loops.
- This transition is defined for blend graph and state machine nodes.
- Subnode: The child node of the node of the start node
to watch for looping.
- Output: The output channel of the sub-node to
watch.
- Last
Resort (On loop): Triggered if the start node or sub-node
loops and all other transitions out of the start node fail.
- This transition is defined for animation and blend graph start nodes.
- This
is useful when setting up a bunch of random transitions out of a node,
and making one transition be the fallback if all the others
fail.
- On Conditional: Triggered if its conditionals are met.
- Defined for all start nodes.
- Blend Type:
- Linear: Blend value advances linearly.
- Smooth: Blend value follows an s-curve so the blend appears smoother.
- Duration:
How long the transition will take to complete.
- Probability:
Probability that the transition will happen when a loop occurs.
- This option is only available for On Loop and On Subloop
transitions.
- Look Ahead:
Start the transition before the loop by this much.
- This option is only available for On Loop and On Subloop and
Last Resort (On loop) transitions.
- Use
this so that the start animation doesn't hit the end and freeze (if the
start animation is set to One Shot), or loop around, during the
transition.
- Set 0.0 and Set [Duration] set the look ahead value to
predefined values.
- If
the start animation is set as one shot, it is usually best to have the
lookahead set to the duration of the transition.
- Subnode:
Which sub-node to node to watch for looping.
- This option is only available for On Subloop transitions.
- Output:
Which output channel of the sub-node to watch.
- This option is only available for On Subloop transitions.
- :
- Switch
at Midpoint: Process events from the start node until the
midpoint of
the transition is reached, then process events from the end
node.
- Sample
Both: Process events from both the start and end nodes
during the transition.
- Start
Only: Process events only from the start node.
- End Only:
Process events only from the end node.
- Neither:
Don't process events from either the start or end nodes during
the transition.
- Preferred exit: Set the preferred transition out of the end node,
for use when transitioning out of the end node later.
- Preferred transition gets checked for success before
the other transitions out of the end node.
- This is for tiebreaking transitions out of a node.
- End start state: Override the start state in the end node.
- Conditionals:
Set conditionals for this transition.
- The On Conditional transition type triggers as soon as its
conditionals are met.
- Other transition types will proceed if their
conditionals are true along with their other requirements (looped,
requested, etc).
- Synced
Nodes: Syncs a transition with the underlying
animation's cycles or with an event.
- The most common use for this is syncing a transition
between states with locomotion animations on a footstep event.
- Reference:
The node to watch for sync information.
- Synced:
The node that will be synced. The end state of the transition will be
started so that the events are in sync.
- Ref. Edge:
The event output edge corresponding to the reference
animation.
- Sync Edge:
The event output corresponding to the synced animation.
- Use of Events and Edges is optional. If they are
not set, the animations will sync on phase.