Getting Started with NVIDIA Omniverse
NVIDIA Omniverse™ is a powerful multi-GPU real-time simulation and collaboration platform for 3D production pipelines based on Pixar's Universal Scene Description and NVIDIA RTX™ technology.
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™ Kit which is a toolkit for building native Omniverse extensions and microservices. It is built on a base framework known as Carbonite that provides a wide variety of functionality through a set of light-weight extensions.
- 01:00 - Kit Stack
- 01:30 - Taking apart Omniverse Create
- 02:37 - RTX Viewport Extension
- 03:07 - Content Browser Extension
- 04:24 - Widget and Window Extensions
- 05:15 - More Extensions
- 06:20 - Kit Extensions Recap
- 06:54 - Extension Manager
- 07:50 - Omni.UI
- 09:35 - Omni.UI Interactive Documentation
- 10:15 - Omni.UI Sample
- 12:30 - Omni.UI Styling
- 13:30 - Omni.UI Widget examples
- 14:11 - Omni.UI Tree View
- 15:05 - Omni.GRAPH
- 18:05 - Omni.GRAPH Examples
- 19:30 - Microservices
- 20:24 - Controlport
- 22:34 - Microservice Examples
- 22:16 - NVIDIA SDKs
- 23:32 - Universal Scene Description (USD)
- 24:06 - Hydra
- 25:24 - Material Definition Language (MDL)
- 26:15 - NVIDIA Simulation SDKs
- 27:11 - Omniverse Apps
- 29:56 - 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). While USD includes a file format, it is much more than that. USD is a powerful scene representation with an API that allows complex property inheritance, instancing, layering, lazy loading and a wide variety of other key features. Omniverse uses USD for interchange through the Omniverse Nucleus DB service.
The following GTC 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
Note that a self-paced on-line introduction to USD training is in development. Updates will be posted in the Omniverse News section of the launcher.
In this online USD tutorials and examples GitHub project, you can try code snippets without building or installing USD on your machine. This project covers an introduction to USD, how to open USD stages, work with Prims, Attributes and Metadata, and also includes an overview of scene hierarchy traversal.
Visit GitHub Project
Samples and Resources
Explore more USD resources including sample files, tutorial videos and a collection of 3rd party references and guides at usd.nvidia.com
IMPORT/EXPORT and CONNECTORS
Omniverse is a great addition to any digital content creation pipeline and there are many ways to connect to the platform. The first path is simply to import assets into a Nucleus server (converting it to USD and making it available to connected applications), this does not benefit from live updates but does provide a much faster collaboration method.
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 Omniverse Connectors, plugins that enable client applications to connect to Nucleus and publish and subscribe to individual assets and full worlds. Omniverse Connectors enable live-sync collaboration abilities between connected applications.
Import / Export
It is important to note that Connectors for industry applications are not necessary to start using Omniverse. Standard formats can be imported or exported to and from Omniverse through application content browsers (including Nucleus in the collaboration tab of the launcher) or the Omniverse Drive Application. Formats like FBX, OBJ, GLTF, LXO, MD5, IGES, STEP, and JT are currently supported but more are continually being added.
Omniverse Drive Connect
The NVIDIA Omniverse™ Drive software mounts an Omniverse Nucleus server to the user’s Windows 10 OS as a virtual hard drive, such that one can manipulate server assets as if they were local files. 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 some existing tools that can only export assets to local disks and are not supported by Omniverse Connectors.
Omniverse Connect libraries are distributed as plugins that enable client applications to connect to Nucleus and to publish and subscribe to individual assets and full worlds.
With any needed synchronization in place, a DCC plugin will use the Omniverse Connectors to apply externally received updates and publish internally generated changes, as necessary.
As the application makes changes to its USD representation of the scene, Omniverse Connect keeps track of all the local changes since the last publishing event. When requested by the application, the Omniverse Connect libraries will construct a file-by-file set of differences and publish them to Nucleus where they will then be forwarded to all subscribers.
Connectors for popular digital content creation tools can be found in the "Connector" section of the Exchange in the Omniverse Launcher.
How to build an Omniverse Connector
Build your own NVIDIA Omniverse Connector with 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 Connector Sample can be installed from the connector section of the Launcher Exchange (image below)
Learn how to connect with the Omniverse platform and be able to send data to it, establish a live sync session, as well as a USD 101 overview to get you started. This is primarily targeted at developers who want to learn how to create a plugin for an application and push data to Omniverse. However, the topic also applies to those seeking to write command line or scripted converters, as well as connecting Omniverse and a data management system. We'll start with an overview of USD structuring and some of the basics in geometry and materials. A tour of the Sample SDK, which is available on the Omniverse Launcher, will be discussed in detail. From there, we'll look at how we implemented a Connector for an application, like SketchUp, to discuss design considerations and material mapping and handling.
- 01:00 - Introduction to Connectors
- 02:32 - Basic flow (Rhino example)
- 04:42 - Installing the Connector sample
- 05:18 - Basic elements of the sample
- 06:26 - Dataflow
- 06:53 - Demo
- 10:25 - Code breakdown
- 13:40 - Connecting to Omniverse
- 16:09 - Code discussion
- 16:16 - Hello World
- 19:06 - USD Overview
- 23:30 - Code discussion (Omniverse Model)
- 30:32 - Live Edit
- 32:00 - Demo (Live Edit)
- 33:35 - Live Edit code review
- 35:00 - Material models (MDL, Preview Surface)
- 36:15 - Changing material preferences in Create
- 37:08 - Coding considerations
- 37:08 - Additional resources
EXTENSIONS AND APPLICATIONS
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.
An extension is, in its simplest form, just a folder with a config file (extension.toml). The Extension system will find that 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.
OmniUi 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.
- 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