Omniverse Developer Resource Center
Get started developing on the Omniverse platform using the resources below.
Omniverse Platform - Developer Introduction
Omniverse enables universal interoperability across different applications and 3D ecosystem vendors. It provides efficient real-time scene updates and is based on open-standards and protocols. The Omniverse platform is designed to act as a hub, enabling new capabilities to be exposed as microservices to any connected clients and applications.
The following video gives an overview of NVIDIA Omniverse platform and how to develop custom tools and applications in Omniverse.
- 00:00 - Platform Overview
- 01:25 - Technology Stack
- 03:17 - Video Tutorials
- 03:38 - Kit Extension System
- 05:16 - Extension Manager
- 05:30 - Simplest Extension
- 05:50 - Extension Dependencies
- 06:31 - Kit Application
- 06:57 - Python Extension
- 07:21 - Kit SDK Samples
- 08:36 - Omni.UI
- 09:32 - Omni.UI Documentation
- 10:23 - Omni.UI Dynamic Syntax
- 11:54 - Omni.UI Graph Framework
- 12:26 - Model-View-Controller Pattern
- 13:04 - Full Model API
- 13:18 - Example Application
- 14:01 - Important APIs - Treeview Widget
- 15:24 - Important APIs - The Web in Kit
- 16:24 - Important APIs - Web Streaming
- 17:50 - Nucleus-Based Microservices
- 18:42 - Kit-Based Microservices
- 19:01 - Omni.kit.controlport
- 19:36 - Kit Microservices with Rendering
- 20:00 - Technology Preview - Quick Search
- 22:02 - Technology Preview - Omni.UI Inspector
- 24:00 - Omniverse Kit Recap
Now that you have had a good overview of the platform and its components we suggest you take some time to learn about USD which is at the center of Omniverse.
The fundamental representation of assets in Omniverse is Pixar’s open-source Universal Scene Description (USD). USD is a powerful framework and scene representation with an API that allows complex property inheritance, instancing, layering, lazy loading and a wide variety of other key features.
The following presentation provides a great introduction to USD from its creation to current implementation in Omniverse. This session covers many examples of industry support and prepares you to try our online hands-on python examples available on github
- 02:40 - Why USD was created
- 04:40 - Presto and TidScene
- 06:31 - USD requirements
- 07:27 - Hydra
- 08:11 - Presto (Racoon example)
- 08:48 - Presto (Dory example)
- 09:23 - NVIDIA DRIVE example
- 10:40 - USD is open source
- 12:02 - SIGGRAPH 2016 demo
- 12:57 - USD GitHub
- 13:25 - Autodesk USD support
- 13:50 - SideFX USD support
- 14:34 - Unreal Engine USD support
- 15:04 - Apple USD support
- 16:06 - Hands-on Demo
- 17:05 - USD.NVIDIA.COM
- 17:32 - Jupyter notebook introduction
- 18:55 - Creating a USD layer
- 21:00 - Referencing and overrides
- 22:46 - USD is at the core of Omniverse
- 23:28 - Omniverse example
- 24:30 - USD variants example in Omniverse
- 25:25 - Complex example in Omniverse
TutorialsGetting Started with USD for Collaborative 3D Workflows
In this self-paced course, participants will learn how to generate a scene using human-readable Universal Scene Description ASCII (.USDA) files. Upon completion, participants will be able to create their own scenes within the USD framework and will have a strong foundation to use it in applications such as Omniverse, Maya, Unity, and Unreal Engine.
There are two sections to this training:
- USD Fundamentals: An introduction to the basics of USD, no programming knowledge required.
- Advanced USD: A demonstration of how to use Python to generate USD files.
Try the course
Samples and Resources
This work is licensed under a
Creative Commons Attribution 4.0 International License.
Explore more USD resources including sample files, tutorial videos and a collection of 3rd party references and guides at usd.nvidia.com
Connecting to Omniverse
There are many ways to connect to the platform. The first path is simply to import assets into Nucleus, converting it to USD and making it available to connected applications.
The second option is using Omniverse Drive (ODrive) to connect local files and leverage the ability of some applications to update on the fly as these files change.
Lastly, you can use bi-directional or uni-directional Omniverse Connectors, plugins that enable client applications to connect to Nucleus and publish and subscribe to individual assets and full worlds. Depending on the fidelity of Omniverse Connectors, they can enable live-sync publish-subscribe collaboration abilities between connected applications.
Export / Import
It is important to note that Omniverse Connectors for industry applications are not necessary to start using Omniverse. Popular formats can be imported or exported to and from Omniverse through application content browsers (including Nucleus in the collaboration tab of the launcher) or Omniverse Drive.
Omniverse currently supports export and import of FBX, GLB, gLTF, OBJ, USDZ, and USD.
Omniverse currently supports import of Alembic, E57, IGES, LXO, MD5, STP.
More supported formats are continually being added.
For third-party applications that natively support USD, MDL and/or texture exporting, users can leverage Omniverse Drive, a locally-mounted hard drive that syncs with Omniverse Nucleus (whether Nucleus is deployed via Workstation or Enterprise Server). Using third-party applications with Omniverse Drive provides similar functionality as uni-directional Omniverse Connectors. That means the users can copy, read, and write files directly in Windows Explorer. It can also be used to open to and save directly from applications. This is useful for existing tools that can only export assets to local disks or are not supported by Omniverse Connectors, such as Adobe Substance applications, SideFX Houdini, Maxon Cinema4D, or Pixologic Zbrush.
Omniverse Connect libraries are distributed as plugins (or “Omniverse Connectors”) that can enable client applications to connect to Nucleus and to publish and subscribe to individual assets and full worlds. Bi-directional Omniverse Connectors are the highest fidelity Connector - enabling real-time updates between 3rd party applications
How to build an Omniverse Connector
Build your own NVIDIA Omniverse Connector with the Connect SDK, prebuilt source code samples that use Pixar’s USD and Omniverse Client Library APIs.
The sample demonstrates how to:
- connect to an Omniverse server
- create a USD stage
- create a polygonal box and add it to the stage
- upload an MDL material and its textures to an Omniverse server
- bind an MDL and USD Preview Surface material to the box
- add a light to the stage
- move and rotate the box with live updates
- disconnect from an Omniverse server
- print verbose Omniverse logs
- open an existing stage and find a mesh to do live edits
The Connect SDK can be installed from the Connector section of the Launcher Exchange (image below)
Building a connector - Video Tutorial
This video walks through how to set up USD and Omniverse Client Library dependencies as well as project settings from the Omniverse Connect Sample to create an application. The application is a very simple USD reader that opens a USD file on a Nucleus server and prints the node paths as it traverses through the prims.
EXTENSIONS, APPS, MICROSERVICES
Instead of being a monolithic application, Omniverse Kit is made of Extensions, these Extensions are building blocks that you can assemble in many ways to create different types of Applications. At the high level, all UI elements, workflow and general features are written in Python making them extremely customizable.
Omniverse Kit is a toolkit for building native Omniverse applications and microservices. It is built on a base framework that provides a wide variety of functionality through a set of light-weight extensions. These stand-alone extensions are plugins that are authored in Python or C++.
Kit is designed to be a flexible and extensible development platform for both Apps and Microservices. It can be run headless to create a microservice, or with a UI. The UI application can be fully written using the UI engine which enables it to be fully customized.
Creating Extensions and Apps
Extensions are the building blocks of Omniverse Apps, small, purpose-built pieces of code. An extension is, in its simplest form, just a folder with a config file (extension.toml) but most complex extensions include a large amount of python code, libraries, docs, assets, and any data they might need.
The Extension system will find the extension and if it’s enabled it will do whatever the config file tells it to do, which may include loading python modules, Carbonite plugins, shared libraries, applying settings etc.
Scripting is a key feature of the Omniverse. It allows developers to forge intricate simulations, custom workflow tools, path traced and/or ray traced games, and extend NVIDIA Omniverse™ Kit far beyond its roots and foundations. Because of the expansive nature of scripting, the Python API guide is separated out into its own complete presence allowing programmers to have unfettered documentation and searches related only to scripting in the Omniverse.
In cases where the enhancement needs are just too much for the scripting world, Omniverse also provides C++ based SDKs that can be used to create high performance extensions. Omniverse’s C++ side is based on plugin modules that can be dynamically loaded as needed. These can be used to provide new features and functionality for a lot of what Omniverse offers, including new UI and heavy calculations.
NVIDIA Omniverse™ Kit exposes much of its functionality through Python bindings. This provides an API that can be used to write new extensions to Omniverse Kit or new experiences for Omniverse. This is the easiest way to get new functionality added to Omniverse Kit or to modify existing behaviour. This can also be used to write scripted portions of interactive USD stages in Omniverse Kit, or even to build an entire stage programmatically.
Omni.Ui is the foundation UI for all the Extensions and Kit applications but Kit also runs headless and as a python library that you can include in your own application stack.
- 00:00 - Introduction
- 01:19 - Key Features
- 02:02 - Widgets
- 02:34 - Widgets: UI.LABEL
- 03:06 - Widgets: Customize UI.LABEL
- 03:26 - Widgets: UI.IMAGE
- 03:42 - Widgets: Customize UI.IMAGE
- 03:51 - Widgets: UI.BUTTON
- 03:42 - Widgets: Customize UI.IMAGE
- 03:51 - Widgets: UI.BUTTON
- 03:56 - Widgets: Customize UI.BUTTON widget size
- 04:12 - Widgets: Customize UI.BUTTON callback
- 04:32 - Widgets: List of Core Widgets
The Omniverse microservice architecture that allows developers to build and deploy applications made up of independent and modular components called services.
Watch A Deep Dive into Building Microservices with Omniverse [A31204] GTC Fall 2021 Session.
Try out the Companion Code on GitHub for this session
- 00:00 - Introduction
- 01:17 - Services
- 02:00 - Core
- 02:22 - Transports
- 03:30 - Extensions
- 03:52 - Routers
- 04:10 - Facilities
- 05:33 - Client
- 06:35 - Example: Splash Screen
- 06:52 - Example: Thumbnail Generation
- 07:30 - Example: Distributed Task Execution