Title: Introduction to OmniGraph — Omniverse Extensions

URL Source: https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html

Published Time: Tue, 07 Oct 2025 22:37:53 GMT

Markdown Content:
Introduction to OmniGraph[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#introduction-to-omnigraph-short "Link to this heading")
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Note

This document contains features from OmniGraph version 108.1

In this tutorial, you use OmniGraph in Omniverse USD Composer to move one shape in response to another.

Note

While you use Omniverse USD Composer in this tutorial, you can follow similar steps to achieve the same results in other Omniverse Apps.

Load the OmniGraph Extensions[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#load-the-omnigraph-short-extensions "Link to this heading")
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Before you start, you must load the OmniGraph extensions into Omniverse USD Composer.

### Open the Extension Manager[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#open-the-extension-manager "Link to this heading")

In Omniverse USD Composer, click _Window > Extensions_:

[![Image 1: Numbered steps for opening the Extensions manager.](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_01.png)](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_01.png)
This opens the Extensions manager, which you use to enable and disable Omniverse Extensions.

### Enable the Action Graph Bundle[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#enable-the-action-graph-bundle "Link to this heading")

Search for “omni.graph.bundle.action”, and enable the Action Graph Bundle if necessary:

[![Image 2: Numbered steps for enabling the |action_graph| Bundle.](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_02.png)](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_02.png)
This loads the `omni.graph.bundle.action` Extension bundle into Omniverse USD Composer.

Note

If you can’t to find the `omni.graph.bundle.action` Extension bundle, remove any filters you may have applied and try again.

[![Image 3: Numbered steps for enabling the |action_graph| Bundle.](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph-remove_filters.png)](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph-remove_filters.png)

### Enable Autoload[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#enable-autoload "Link to this heading")

Enable autoload for the Action Graph Bundle:

[![Image 4: Arrow pointing to the autoload toggle.](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph-autoload.png)](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph-autoload.png)
This ensures that Omniverse USD Composer will always load the Extension.

Now that you’ve enabled the Action Graph Bundle, close the Extension manager.

Prepare Your Scene[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#prepare-your-scene "Link to this heading")
--------------------------------------------------------------------------------------------------------------------------------------------------------------

Prepare your empty scene by adding a cube and a cone.

### Add a Cube[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#add-a-cube "Link to this heading")

Right-click the scene, and click _Create > Shapes > Cube_:

[![Image 5: Numbered steps for creating a cube.](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_03.png)](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_03.png)
This creates a cube prim at the position of the cursor.

### Add a Cone[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#add-a-cone "Link to this heading")

Similarly, right-click the scene, and click _Create > Shapes > Cone_ to create a cone prim.

[![Image 6: Numbered steps for creating a cone.](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_04.png)](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_04.png)
Now that you have added some Prims to your scene, you are ready to use OmniGraph.

Note

Alternatively, you can use the _Create_ menu in the menu bar to add prims to the scene:

[![Image 7: Numbered steps for creating a cone from the menu bar.](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph-create_menu.png)](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph-create_menu.png)

Set Up the Graph[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#set-up-the-graph "Link to this heading")
----------------------------------------------------------------------------------------------------------------------------------------------------------

It’s time to use OmniGraph in your scene. Specifically, you use an [Action Graph](https://docs.omniverse.nvidia.com/extensions/latest/common/glossary-of-terms.html#term-Action-Graph) to trigger actions in response to a particular event.

### Open the Visual Scripting Editor[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#open-the-visual-scripting-editor "Link to this heading")

In the _Window_ menu, click _Visual Scripting > Action Graph_:

[![Image 8: Numbered steps for opening the Action Graph panel.](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_05.png)](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_05.png)
This opens the _Action Graph_ editor panel.

### Create an Action Graph[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#create-an-action-graph "Link to this heading")

In the graph editor, click **New Action Graph**:

[![Image 9: Numbered steps for creating an |action_graph|.](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_06.png)](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_06.png)
This creates an empty Action Graph at the default path. The graph editor now shows your newly-created graph. Next, you add some nodes to the graph!

Adding Nodes to the Graph[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#adding-nodes-to-the-graph "Link to this heading")
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Because this is an introductory tutorial, you start simple. You create a graph that automatically moves the cone whenever you move the cube:

[![Image 10: The cube and cone moving together.](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_07.gif)](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_07.gif)
### Read the Cube’s Position[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#read-the-cube-s-position "Link to this heading")

Drag and drop the cube from the _Stage_ panel to the _Action Graph_ panel:

[![Image 11: Numbered steps for adding the cube to the Action Graph.](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_08.png)](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_08.png)
In the popup dialog, select **Read Transform**. This creates a _Read Prim Local Transform_ node, which can read the Transform of the cube prim that you dragged in.

Note

When the graph runs, it will read the runtime value of the Transform, which may not match the authored value in USD. OmniGraph reads and writes runtime values. Authored values are only used when the graph is initialized.

### Modify the Translation of the Transform[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#modify-the-translation-of-the-transform "Link to this heading")

1.   In the search box, type “Add”, and drag and drop an _Add_ node into the graph editor.

2.   Type “Get Translation”, and drag and drop a _Get Translation_ node into the graph editor.

3.   Type “Set Translation”, and drag and drop a _Set Translation_ node into the graph editor.

[![Image 12: Numbered steps to use an add node.](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_10.png)](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_10.png)
We will extract the translation component of the Transform, add a constant to it, and create an updated Transform with it.

### Wire them up and create a Constant Node[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#wire-them-up-and-create-a-constant-node "Link to this heading")

Make the following connections:

1.   _Read Prim Local Transform_ node’s **Value** port to the _Get Translation_ node’s **Transform** port.

2.   _Read Prim Local Transform_ node’s **Value** port to the _Set Translation_ node’s **Matrix** port.

3.   _Get Translation_ node’s **Translation** port to the _Add_ node’s **A** input.

4.   _Add_ node’s **Sum** port to the _Set Translation_ node’s **Translation** port.

[![Image 13: Numbered steps to wire up the nodes.](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_12.png)](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_12.png)
### Specify the Constant Value[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#specify-the-constant-value "Link to this heading")

Right click on the **B** input of the _Add_ node, select **Promote to Constant** from the popup menu. This will create a _Constant Vector3d_ node.

Click the constant node, and set its **X** input value to `0.0`, its **Y** value to `120.0`, and its **Z** value to `0.0`:

With this, the _Constant Vector3d_ node holds the constant 3-tuple: `(0.0, 120.0, 0.0)`.

In summary, you have an _Add_ node that captures two numerical values:

*   The constant numerical tuple, that specifies a positive **Y** value and neutral **X** and **Z** values

*   The variable translation XForm value from the cube prim

The resulting value of the _Add_ node, then, contains the cube’s full transform with a shift on the positive **Y** axis by 120.0 units. Next, you pass this value to the cone.

Note

Feel free to drag the nodes around the editor to keep the UI clean and clear.

### Write the Cone’s Transform[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#write-the-cone-s-transform "Link to this heading")

Drag and drop the cone from the _Stage_ panel to the _Action Graph_ panel. In the popup dialog, select **Write Transform**. This creates a _Write Prim Local Transform_ node, which can write the Transform of the cone prim that you dragged in.

Click and drag the _Set Translation_ node’s **Translation** port to the _Write Prim Local Transform_ node’s **Value** port

[![Image 14: Hook up the write node.](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_13.png)](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_13.png)
This sets the location of the cone to the resulting sum of the _Add_ node.

Trigger the Node Evaluation[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#trigger-the-node-evaluation "Link to this heading")
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Remember, the Action Graph evaluates its nodes when an event occurs. In this case, you use the “on playback tick” event.

### Use an On Tick Node[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#use-an-on-tick-node "Link to this heading")

In the search box, type “On Playback Tick”, and drag and drop an _On Playback Tick_ node into the graph editor:

[![Image 15: Connect the on tick and write nodes.](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_14.png)](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_14.png)
The _On Playback Tick_ node fires an execution signal through its **Tick** execution port every single frame during playback. Therefore, anything connected to its **Tick** port is evaluated every single frame.

In this case, you want to update the cone’s position on tick.

### Wire up the On Playback Tick Event[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#wire-up-the-on-playback-tick-event "Link to this heading")

Click and drag the _On Playback Tick_ node’s **Tick** port to the _Write Prim Local Transform_ node’s **Exec In** port:

[![Image 16: Connect the on tick and write nodes.](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_14.png)](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_14.png)
Now, when you press play, your cone’s position will be updated to the result of the Add node, which is the sum of the cube’s location and the constant point tuple `(0.0, 120.0, 0.0)`. In other words, as you move your cube, your cone should move with it, but 120 units higher on the **Y** axis.

Technical Detail

The execution evaluator works by following node connections downstream and computing the nodes the evaluator encounters until there are no more connections to follow.

In this case, the evaluator executes the network downstream from _outputs:tick_ attribute, whose next node is the _Write Prim Local Transform_ node. Before _Write Prim Local Transform_ can be computed, the evaluator evaluates its upstream data-dependency: the _Set Translation_ node, but before it can do that it has to evaluate everything further upstream. Finally, the _Write Prim Local Transform_ node is computed, which sets the cone’s transform in the runtime data.

Review Your Work[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#review-your-work "Link to this heading")
----------------------------------------------------------------------------------------------------------------------------------------------------------

Click **Play** in your scene’s toolbar. Finally, drag the cube around the scene:

[![Image 17: The cube and cone moving together.](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_07.gif)](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_07.gif)
The cone moves with the cube, but above it by 120 units.

Common Problems and Caveats[#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#common-problems-and-caveats "Link to this heading")
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

If you encounter problems or have questions, please read through this section find an explanation of your problem, and potential solutions:

| Common Problem/Question | Explanation |
| --- | --- |
| You are unable connect to a node input due to incompatible types. | Remove all connections from the target node and try reconnecting. When extended types are resolved, the node has to be disconnected to reset the types. |
| The node is set up correctly, but is not working. | Check the _Console_ panel for error or warning messages, try saving and reloading the scene, and ensure you have loaded the Action Graph extensions bundle. |

Links/Buttons:
- [#](https://docs.omniverse.nvidia.com/extensions/latest/ext_omnigraph/tutorials/gentle_intro.html.md#common-problems-and-caveats)
- [](https://docs.omniverse.nvidia.com/extensions/latest/_images/ext_omnigraph_gentle_intro_14.png)
- [Action Graph](https://docs.omniverse.nvidia.com/extensions/latest/common/glossary-of-terms.html#term-Action-Graph)
