User Guide

Setup

Enabling the Extension

Upon enabling the omni.anim.graph.bundle extension, the Animation Graph panel will appear. If the tab is ever deleted, and the extension is still loaded, it can be made visible again by going to the menu Window > Animation > Animation Graph. The omni.anim.graph.core contains the backend, and the omni.anim.graph.ui contains the frontend.

Home Screen

When no graph is loaded, a menu of items are available in the graph canvas window.

../../_images/ext_animation-graph_ui-home_screen.png

Buttons in the upper left corner of the graph are also available to create a new graph or load an existing one from the scene.

Option

Result

Create New Animation Graph

Creates a New Animation Graph

Select Animation Graph

Allows the user to choose an existing Graph via a dialogue to open.

Drag and Drop an Existing Animation Graph

Allows users to drag and drop an existing graph from the content browser to open.

Creating a New Animation Graph

Upon creating a new Animation Graph, users will be presented with the Create Animation Graph dialog. Users should select a Skeleton prim in the current scene or reference one in from another scene.

Warning

Many features of the Animation Graph are dependent on specifying a Skeleton upon creation. Failure to do so could result in missing features and functionality.


../../_images/ext_animation-graph_ui-create_dialog.png

Option

Result

Path

Displays/Sets the location amd name of the graph.

Select from Stage

Opens a dialogue box allowing selection of a skeleton already existing in the scenes stage.

Select from Reference

Reference in a Skeletal Mesh from disk or from a network location

Create

Creates the Animation Graph, Closes the dialogue.

Cancel

Closes the dialogue committing no changes.

When a new Animation Graph is created, the final output node will populate in the graph canvas, and a list of nodes will be available in the catalog pane to the left.

Applying an Animation Graph

Although there is a Skeleton assigned to the graph, the graph itself needs to be applied to a SkelRoot to work. It can be applied to the same character that was used to build the graph. It can also be applied to other character SkelRoots as well.

To apply an Animation Graph so it can animate a skeletal mesh, right click on the SkelRoot(s) in the Stage and go to Add > Animation > Animation Graph. In the SkelRoot properties in the Animation Graph section, specify the graph to be applied via the Add Target button dialog.

../../_images/ext_animation-graph_ui-skelroot_applied.png

Animation Graphs utilize instancing, so that one graph can be utilized by multiple characters without substantial memory overhead.

Note

Animation Retargeting can be combined with Animation Graphs to animate characters that are not initially compatible with the graph’s skeleton.

Working with Animation Graphs

The Animation Graph editor consists of four areas. The Menu, the Node Catalog, Variables, and the Canvas.

The Menu

The menu primarily allows for additional graph operations such as creating new and opening, however it also provides some utility to the canvas.

../../_images/ext_animation-graph_ui-menu_bar.png

Option

Result

New

Create a new animation graph

Open

Load an existing Animation Graph from the scene

Node Visibility

There are three options to control node display: Expand, Minimize, Close

View

Controls how nodes are displayed, and a feature to frame all nodes or selected node(s)

The Canvas

This is the primary editor window and allows the user to make add and edit connections with nodes.

../../_images/ext_animation-graph_ui-canvas.png

Option

Result

Breadcrumb Bar

Displays the current depth of the graph and allows navigation between them.

Node

A programmatic function allowing an “action” to occur. Nodes are connected to create greater “higher order” utility.

Display Depth

Clicking on the “triple dots” of a given node collapse and expand the node displaying or hiding node details.

Pin-Out

Pin-outs offer outputs and display data type on rollover.

Pin-Ins

Pin-Outs are Node Inputs and display expected data type on rollover.

Noodle

By dragging from an Output “Pin-Out”, a Noodle will de stretched to create a connection to a Pin-In.

Canvas Navigation

Navigating the Canvas is accomplished using mouse and “hot-key” controls.

Option

Result

MMB hold and drag

Pan around the canvas

MMB up/down

Zoom in and out of the canvas. The placement of the mouse pointer on the canvas determines the anchor point for the zoom.

RMB click

If over empty canvas: Menu to create new nodes. If over connection line: Option to delete connection.

If node selected

Menu to Rename or Delete a node

Hover Mouse

Over Connection: Menu to delete connection

F key

Zooms to focus on the currently selected node(s). If no nodes are selected, zoom out to frame all available nodes at the current level.

LMB double click

When double clicking on an empty canvas area, will bring the user up a depth level in the graph (if available). If double clicking on a State Machine node, state node, or transition node, it will open up that State Machine.

Node Catalog

../../_images/ext_animation-graph_ui-node_catalog.png

The Node Catalog is a listing of the available nodes for the current graph mode.

The Catalog will only display nodes that are contextually relevant to the current mode of the graph. For example, when editing how a State Machine transitions from one state to another, only the Transition condition graph nodes will be shown.

Variables

../../_images/ext_animation-graph_ui-variables_panel.png

Users can create variables of specific types that can be modified at runtime in order to change behaviors within the graph. Once variables are created they can be dragged into the Canvas and connected to other nodes.

Option

Works In

Stores

Example

Float

BlendTree Only

Floating Point Number

2.344

Float3

BlendTree Only

3 Floating Point Numbers

2.34, 6.3, 5.7

Float3[]

BlendTree Only

Array of Float3

[[4.3, 3.71, 7.6], [4.9, 1.2, 5.2], …]

Float4

BlendTree Only

4 Floating Point Numbers

8.8, 4.3, 3.7, 7.6

Float4[]

BlendTree Only

Array of Float4

[[8.8, 4.3, 3.7, 7.6], [2.2, 4.9, 1.2, 5.2], …]

String

BlendTree, State Machine Transitions

Text Strings

IsWalking

Token[]

BlendTree Only

Cached String

MyToken

Graph Modes

There are two core modes of the Animation Graph editor: Blend Trees and State Machines.

Blend Tree

../../_images/ext_animation-graph_ui-blend_tree.png

Blend Trees are the primary function of the graph and are used for mixing animations, controlling skeleton joints, and driving nodes via variable blend weights.

Name

Description

Blend

Blends together two different inputs. Users can control the weight of the blend with the Alpha value.

Motion Matching

Takes a series of motion clips, a specified movement direction and forward facing direction, and then at runtime tries to find the best pose available that fits the direction and facing request based on the data clips provided. The current implementation supports constant-lookup, which is useful for locomotion (walking, running, etc.).

Look At IK

Aims a joint within the Skeleton at a particular goal in the world, and if a joint chain is specified, will twist to blend the aim.

Filter

Removes animation on specified joints. User input a list of joints as strings, separated by spaces.

Pose Provider

Registers an external input (e.g. a live mocap stage) from outside the Animation Graph and brings it into the graph for further manipulation and blending via graph nodes.

State Machine

Creates a new State Machine. Allows users to pack animation blend trees into specific behavior states and control which state should be active and when to transition between different states. LMB double click will open the State Machine sub-graph.

State Machine

State Machines allow users to control when and how to transition from one discreet Blend Tree to another. This transition control logic is specified in Condition Graphs, which control how and when a transition will execute.

Transitions between states can be added by LMB clicking from the exterior border of one state, and then dragging to another state. Double click a transition arrow to view and edit the transition logic.

../../_images/ext_animation-graph_ui-statemachine_create_transition.gif

Tip

Blend Trees that are within one state can also have a State Machine embedded in it. This embedding can be continually be repeated as needed.

Name

Description

State

Contains

Transition

Transitions are represented by arrow widgets between states. They specify a possible transition between states, and contain the control logic for transitioning from one state to another.

Condition Compare Variable

Within a transition, returns true if the specified string variable is or isn’t equal to another string variable.

Condition Time Fraction Crossed

Within a transition, will return true if the animation clip in the state reaches a percentage of play through

Condition And

Within a transition, will return true if two conditions are both true

Condition Or

Within a transition, will return true if either condition is true

Controlling Animation Graphs

There are two main methods for driving the variables within the Animation Graph: Action Graph and Python.

Action Graph

Action Graphs are event based graphs within Omniverse.

Action Graphs can be created and then assigned to a character that also has an Anim Graph applied to it by right clicking on the SkelRoot in the stage and going to Add > OmniGraph. The specific Action Graph itself can be assigned via the property panel.

../../_images/ext_animation-graph_ui-action_graph_and_anim_graph_property.png

Action Graphs have a specific node to drive an Animation Graph: Write Animation Graph Variable. On this node, the desired Anim Graph must be set along with the desired variable within the Anim Graph to write to. The specified value for the variable is connected to the Value port. A general Graph Target – a reference to Self on the SkelRoot – must be connected as well.

../../_images/ext_animation-graph_ui-action_graph_node.png

Note

All Animation Graph samples included are built using Action Graph as the primary control method.

Python

A simple method to control Animation Graphs is available via Python, which is included with Omniverse KIT applications:

import omni.anim.graph.core as ag
ag.get_character("/Path/To/My/Character/SkelRoot")
ag.set_variable("MyFloatVariable", 1.0)

Warning

The Animation Graph only executes in runtime, so the scene must have Animation mode enabled when playing.

../../_images/ext_animation-graph_ui-play_mode.png

Samples

Sample scenes using the Anim Graph are available in the Animation Graph Samples panel. They can be accessed via menu: Window > Animation > Animation Graph Samples. The UI extension (omni.anim.graph.ui) must be loaded to access this panel.

../../_images/ext_animation-graph_samples.png

Note

Samples utilize the Action Graph to drive the Animation Graph. Action Graph can be accessed from Window > Visual Scripting > Action Graph.

Tip

You are permitted to use the included Samples assets in your own projects. To download the sample scene use File > Save Flattened.