Overview#

Omniverse Kit#

Omniverse Kit is the SDK for building your own Omniverse applications like USD Composer and USD Explorer.

It brings together several major components:

  • USD/Hydra: This is the foundation of Omniverse’s interoperability, enabling seamless data exchange between different 3D applications.

  • Omniverse RTX Renderer: This is a physically-based renderer leveraging NVIDIA RTX technology for real-time, photorealistic visualization.

  • Omniverse Client Library: This component powers real-time collaboration by enabling multi-user workflows and live synchronization of 3D scenes.

  • Carbonite: This is the extensible application framework that enables modular development through a robust plugin system.

  • Scripting: This component provides Python-based automation and customization capabilities for rapid tool development and workflow automation.

  • UI Toolkit (omni.ui): This is a modern, GPU-accelerated UI framework designed specifically for high-performance 3D applications.

  • Kit App Template: This component provides ready-to-use templates for quickly building new applications and extensions, streamlining the development process.

As a developer, you can use any combination of these components to build your own applications or extensions.

USD/Hydra#

USD is the primary Scene Description used by Kit, both for in-memory/authoring/runtime use, and as the serialization format.

USD can be accessed directly via an external shared library. If your plugin uses USD through C++, it must link to this library. You can also use USD from Python using USD’s own Python bindings, which cover the whole USD API (but not all of its dependencies like Tf, SDF etc). See the OpenUSD Python API reference documentation.

Hydra allows USD to stream its content to any renderer which has a Hydra Scene Delegate - these include Pixar’s HDStorm as well as the Omniverse RTX Renderer.

Omni.USD#

omni.usd (See the omni.usd module for API docs) is an API written in C++ which sits on top of USD, Kit’s core, and the OmniClient library. It provides application-related services such as:

  • Events/Listeners

  • Selection handling

  • Access to the Omniverse USD Audio subsystem

  • Access to the Omniverse Client Library, and handling of Omniverse Assets/URIs

  • USD Layer handling

  • A USDContext which provides convenient access to the main USDStage and its layers, as well as various Hydra, Renderer and Viewport related services

  • MDL support

  • Python bindings to all of the above, using the Python-3 async API in most cases

Omniverse Client Library#

This is the library that Omniverse clients such as Kit use to communicate with both Omniverse servers and with local file systems when loading and saving assets (such as USD, MDL, and textures). It contains:

  • A USD AssetResolver for parsing omniverse:// URIs

  • Some SDF FileFormat plugins to support specialised use cases, including Omniverse’s Live Edit mode

  • An API to read/write/copy data/files and filesystem-like queries on Omniverse Nucleus servers

  • Support for managing connections with Omniverse servers

  • Python bindings to all of the above, using Python-3 async API in most cases

Carbonite#

The Carbonite SDK provides the core functionality of all Omniverse apps. This C++-based SDK provides features such as:

  • Plugin management

  • Input handling

  • File access

  • Persistent settings management

  • Audio

  • Asset loading and management

  • Thread and task management

  • Image loading

  • Localization

  • Synchronization

  • Basic windowing

All of this is provided with a single platform-independent API.

Plugins#

Carbonite Plugins are basically shared libraries with C-style interfaces, which can be dynamically loaded and unloaded. Interfaces are semantically versioned and backwards compatibility is supported.

Most plugin interfaces have Python bindings, i.e. they are accessible from Python. The pybind11 library is used. For your own plugins you can also write Python bindings and make them directly accessible from Python.

Omniverse RTX Renderer#

As mentioned above, Pixar’s Hydra is used to interface between USD and RTX. This is an area of high architectural complexity, as Kit is required to support a large number of renderers, multiple custom scene delegates, multiple Hydra Engines (to support GL, Vulkan, DX12) and a host of other requirements, providing a viewport inside Kit Applications with Gizmos and other controls, all rendering asynchronously at high frame rates.

Scripting#

Kit comes with a version of Python. You can run arbitrary python scripts in Kit based apps which can:

  • Access all plugins that are exposed via Python bindings

  • Access the USD Python API

  • Access Kit Python-only modules

  • Load and access your C++ Carbonite plugins

Currently there are 3 ways to run scripts:

  • At app startup time by passing cmd arguments. E.g.: kit.exe --exec "some_script.py"

  • Using the Console window

  • Using the Script Editor Window

Kit Extensions#

Building on top of scripting and Carbonite Plugins there is the highest-level and probably most crucial building block: Kit Extensions. You can think of Extensions as versioned packages with a runtime enabled/disabled state. These extensions can depend on other extensions.

omni.ui#

Omni.ui, our UI framework, is built on top of Dear Imgui and written in C++, but exposes only a Python API.

Kit App Template#

To get started building your own applications and extensions using the Omniverse Kit SDK, the Omniverse Kit App Template is included along with a tool to set up a new project from scratch.

Usage#

To get started with the Omniverse Kit SDK, follow these steps:

  1. Open a terminal to where Kit SDK has been extracted.

  2. Create a new project from the Kit App Template:

    • On Windows: .\new_project.bat

    • On Linux: ./new_project.sh

NOTE: If this is your first time running new_project, you will be prompted to accept the Omniverse Licensing Terms.

  1. Choose a folder to create a new Kit project.

  2. Navigate to your newly created project folder and run the following commands:

    • repo template new - Creates new applications and extensions from Kit templates.

    • repo build - Builds your application and extensions.

    • repo launch - Launches your application.

    • repo --help - Lists all available repo commands and options.

NOTE: Repo tools are shell scripts. Use .\repo.bat on Windows and ./repo.sh on Linux. You can learn more about Repo Tools here.

Running new_project is roughly equivalent to cloning the Omniverse Kit App Template GitHub repository. The benefit is that this new project will have no link to the Kit App Template repository on GitHub.

NOTE: The newly created project will link to the local Kit SDK folder as a dependency using kit-sdk.packman.xml.user in the ./tools/deps folder. By comparison, the Kit App Template from GitHub will download kit-kernel as a dependency and link to that resource instead.