Animation

Animation in NVIDIA Omniverse™ Kit based apps is done primarily through external (content creation / dcc) tools. However, an editing platform and timeline allow for simplifying common tasks is included in NVIDIA Omniverse™ Create. This section is intended to introduce and define the usage of the animation tools currently found within Omniverse Create.

Animation extensions can be toggled from the extension manager. Almost all animation extensions are prefixed with omni.anim.

Animation extensions

Warning

The animation tools are at a very early stage of development and are exposed only to allow animation in the most rudimentary forms within Omniverse Create. Expect many changes and new additions to this set of features, but in its current state only has limited utility.

Once an animation extension is toggled, a sub-menu under the Animation menu appears. The current Animation menu looks like the screenshot

Animation Menu

The list of the available tools for the animation pipeline

  1. Timeline

  2. Animation Clips

  3. Animation Constraints

  4. Animation Deformers

  5. Skeleton Visualization

  6. Transform Property Widget

  7. TimeSample Editor

Timeline

With plugins enabled the timeline should appear when rolled over in the lower portion of the viewport.

Omniverse Create Timeline

Ref#

Function

Result

1

Play

Moves the play-head from left to right at the speed designated by
the Playback Rate.

2

Stop

Stops the sequence if it is playing.

3

Step

Moves the Play Head forward/back 1 frame.

4

Start Time

Tells the Play Head where to start.

5

Play Head

Allows you to “scrub” the timeline with the play head.

6

Current Frame/Time

Displays the current Play Head frame or time in seconds.

7

End Time

Tells the Play Head when to stop/loop.

8

Loop

If the current time and end time are equal, loop will restart
at the beginning without requiring the user to press play again.

9

Frame/Time

Toggles Frames / Time in all displays and inputs

Note

If the viewport does not display the timeline it may be disabled in the viewport.

Timeline Visibility

Timeline visibility can be toggled in the Main Viewport Visibility Options.

Animation Clips

Clips Menu

Option

Result

Apply Pose

Creates of a Link between the transforms or one asset and another.

Apply Animation

Attaches an animation from a selected clip and applies it to the USD skeleton on your stage.

Settings

Opens the Settings Panel

Settings

Clips Menu

Option

Result

Method

Overwrite: create new layer which overrides animations on existing USD Skeleton.
Reference set priority on the referenced USD Skeleton.

Authoring Layer

The name of your animation layer.

Association

Prioritizes transfer of animation data based on Hierarchy or by Name

Offset

Allows offsetting of animation during importation.

Offset Value

The amount used by Offset.

Scale Value

Stretch or Condense the imported animation’s time.

Filter Attributes

Exclusive filter, Only specified animated properties will be imported

Transformations

Enables or Disables Transform data while importing.

Blendshapes

Enables and Disables Blendshape Animation Data.

Animation Constraints

Constraints Menu

Option

Result

Transform Constraint

Allows you to setup a fixed distance constraint between the Driver and Driven xformable’s transforms.

Pin Constraint

Allows you to setup a fixed distance constraint between the Driven xformable’s transform and its closest point on the Driver Mesh

Transform Constraint

The transform constraint module is included in the extension omni.anim.xform_constraint. It is about to constrain an object to a certain transform. The source of the transform could be a joint of a skeleton, or a Xformable prim.

A transform constraint can be created between two xformable prims with the following steps:

  1. Select two xformable prims. The first one is the driver prim while the second one is the driven prim.

  2. Click the Animation/Constraints/Transform Constraint menu to create several ComputeNode typed prims as the children of the driven prim. These ComputeNode prims implement the xformable constraint feature.

  3. Note that the relative transform between the driver and driven can be modified after the ComputeNode prims are created.

  4. By checking the computeRelativeTransform attribute in the [driven]/xformConstraint/constraint prim, you are free to move either the driver or driven prim. At the time when you uncheck the computeRelativeTransform, the driver and the driven will keep the relative transform as is.

You can also create a constraint between a skeleton joint and an Xformable. First you need to toggle the skeleton visualization from the eye icon as shown in Skeleton Visualization. Then just follow the same guide as to constrain two Xformables. The only difference is to select joint prim as the driver prim.

Pin Constraint

Pin Constraint

In the image above, pinConstraint is created to attach the red cube to preexisting jiggly animation.

Pin constraint is used for sticking Xformable onto a point on mesh surface while maintaining its offset. Example use case is for constraining buttons onto deforming cloth.

PinConstraint Attributes

Type

Result

node:type

Token
OmniGraph node type

active

Bool
Main switch for the node

computeRelativeTransform

Bool
Enable edit mode of the node to live update relativeTransform using current pose

input:masterPrim

Relationship
Driver Mesh

input:slavePrim

Relationship
Driven Xformable

input:masterPoints

Point3fArray
Driver Mesh points

baryCoord

Vec3f
Barycentric coordinate of the surface point

triangleIndices

Int3Array
Driver mesh triangle vertex indices to stick the point on

relativeTransform

Matrix4d
Recorded relative pose between the driven and the surface point. Updated by the node when computeRelativeTransform is True.

Create a Pin Constraint

The Pin Constraint menu will create a PinConstraint OmniGraph node under the driven Prim.

  1. Enable omni.anim.pinConstraint extension

  2. Select master Mesh (first) and to be driven Xformable (second).

  3. Click Animation >> Constraint >> Pin Constraint menu

Animation Deformers

Deformers Menu

Option

Result

Create Wrap

Apply wrap deformer using first selected Mesh as driver of second selected PointBased prim

Wrap Deformer

Wrap Deformer

In the image above, wrap deformer is created to bind the purple sphere Mesh to preexisting point timesampled green cube Mesh animation.

WrapSetup Attributes

Type

Result

node:type

Token
OmniGraph node type

input:points

Point3fArray
Points to deform

input:masterTransform

Matrix4d
Driver prim world transform

input:masterPoints

Point3fArray
Driver Mesh points

input:masterFaceVertexCounts

IntArray
Driver Mesh face vertex counts

input:masterFaceVertexIndices

IntArray
Driver Mesh face vertex indices

input:slaveTransform

Matrix4d
Driven prim world transform

input:faceSpace

Bool
Enable surface space offset

output:faceIndices

Int3Array
Driver Mesh triangle vertex indices

output:baryCoords

Point3f
Barycentric coordinate of each driven point

output:offsets

Point3fArray
Offset vector from driver surface point for each driven point

WrapDeformer Attributes

Type

Result

node:type

Token
OmniGraph node type

input:faceIndices

Int3Array
Driver Mesh triangle vertex indices

input:baryCoords

Point3fArray
Barycentric coordinate of each driven point

input:offsets

Point3fArray
Offset vector from driver surface point for each driven point

input:faceSpace

Bool
Enable surface space offset

input:masterTransform

Matrix4d
Driver prim world transform

input:masterPoints

Point3fArray
Driver Mesh points

input:slaveTransform

Matrix4d
Driven prim world transform

output:points

Point3fArray
Output deformed points

Create a Wrap Deformer

The Create Wrap menu will add a few omniGraph nodes to setup the wrap connection under the driven prim, including the WrapSetup and WrapDeformer nodes.

  1. Select the driver Mesh prim

  2. Then add select the intended driven PointBased prim or another Mesh prim.

  3. Click Animation >> Deformer >> Create Wrap menu

Skeleton Visualization

Skeleton Visualization Menu Skeleton Visualization

The skeleton information in USD files are essentially a list of strings which are not intuitive. The Skeleton visualization extension have two functionalities

  1. Create a hierarchical transient SkelJoint prims in the session layer

  2. Visualize the SkelJoint prims in the viewport as a wireframe overlay on the original skeletal mesh

The skeleton visualization is toggled from the eye icon. It is under the Show By Type/Skeleton context menu and is default off. Once toggled on, a list of new SkelJoint prims shows up in the stage window and the wireframed visualization is visible in the viewport. Note that it is only designed as a visualization tool. Thus, you cannot manipulate the joints although you can select each indivisual joint either from the viewport or from the stage window. Keep in mind that all these SkelJoint prims are transient prims.

Transform Property Widget

Transform Property Widget

USD has a very flexible transform system. In additional the traditional xformOps, e.g. translation, rotation, scale, USD supports many other types of xformOps e.g. orient quaternions, transform matrix. Moreover, each USD xformable contains an attribute called xformOpOrder which is a list of xformOp tokens, e.g. xformOp:translate, xformOp:orient, xformOp:scale, etc.. The xformOpOrder has two level of meanings:

  1. An xformOp takes part in the transform pipeline only if it is listed in the xformOpOrder. e.g. if there is an xformOp:scale attribute but xformOp:scale is not included in the xformOpOrder attribute, the current prim’s scale won’t be affected by the xformOp:scale attribute’s value.

  2. The transform operators are applied according to the xformOpOrder token list. In other words, xformOpOrder = [xformOp:translate, xformOp:rotateZYX, xformOp:scale] means doing scale first, followed by rotation followed by translation(yes, the order is reversed here).

In addition to adjust the values of different xformOps, the design philosophy of the transform property widget is such that we can also modify the xformOpOrder without explicitly display this attribute in the transform collapsible sub-frame. That been said, the transform property widget acts as a USD xformOp framework’s editor.

Transform property widget for various types of xformOp cases

Transform property widget update the xformOpOrder indirectly

TimeSample Editor

TimeSample editor is a rudimentary method of creating keyframes in Create. This is expected to change over time and is a temporary utility for users wanting to experiment in Create animation.

Use the Extension Manager under the Window menu to load the omni.anim.timesample_editor extension. You will then see “timesample editor” menu under the Animation menu to toggle this window.

TimeSample Menu
Select Object with this panel open to display keyable attributes.
  • “ANIMATE TRANSFORM” will display if selected object is xformable with USD’s ordered xformOps.

  • “ANIMATE OTHERS” will display additional “animatable attributes” in a menu that can be keyed on selected object.

Use in conjunction with your timeline to scrub and place and remove animation keys. That is, bring the timeline up by hovering over the bottom of your viewport, set an end time for your animation. Then set a time on this timeline using the slider, add a key for the object and adjust it, set another time, add a key and adjust it, etc.

Option

Result

Add Key

Set key on Translate, rotate and scale channels individually.

Remove Key

Removes Selected Key. (“-“ button behind each key-value)

Remove All Keys

Removes all keys for the selected asset.

Goto Key

Click the key label will move timeline to selected key.

Note

Attention for timesample authoring on multiple Layers:

  • If timesample data is in the authoring layer, timesample authoring will directly edit key value in the attributes in current layer.

  • If timesample data is in a weaker layer, timesample authoring will copy the timesample data from weaker layer to current authoring layer first, then apply the authoring.

  • If timesample data is in a stronger layer, timesample authoring for this attribute is disabled.