Development Considerations

Omniverse Cloud Development

Overview

Developing an application for Omniverse Cloud and preparing for its deployment is the same as any Kit based application. There are just a few things to keep in mind, which we’ll highlight in this document.

Topics:

  1. Omniverse Cloud Platform Overview

  2. Development Considerations for Omniverse Cloud

  3. Building an Application for Omniverse Cloud

  4. Packaging your Application for Omniverse Cloud Deployment

See also

This document focuses on Omniverse Cloud specific development steps. For general Application development, build, and packaging, refer to the Omniverse Developer Guide

Requirements for Omniverse Cloud Deployment:

  • An active Omniverse Cloud entitlement

  • Access to the NVIDIA Enterprise Support Portal

  • A Linux-compatible kit-based application in a fat launcher package.

1. Omniverse Cloud Platform Overview

Omniverse Cloud is a managed platform built on NVIDIA OVX infrastructure for designing, developing, deploying, and managing Universal Scene Description (OpenUSD) Applications. It offers scalable, cluster-based computing with optimized services for rendering and simulating expansive OpenUSD scenes.

Applications on Omniverse Cloud are deployed as container images on an OVX cluster, and only the application itself is then streamed to the client. The Omniverse Cloud streaming service enables the streaming extension which captures the application window.

2. Development Considerations for Omniverse Cloud

Linux Compatibility

Omniverse Cloud operates on a Linux-based computing environment. Ensure your kit-based application is Linux-compatible and avoid Windows-specific commands or Python modules.

Highly-Secure

Omniverse Cloud prioritizes security. Network traffic into and out of your Omniverse Cloud instance is restricted. Connecting to external services may require collaboration between your IT, security teams, and the Omniverse Cloud team.

Python Libraries & Binaries

For security reasons, compiled binaries are not accepted, and only standard Python modules are accessible. Any non-standard Python modules, including popular OSS ones, should be packaged along with your Application

Application Streaming

Omniverse Cloud applications are pixel-streamed to users, usually in a web browser. Input commands are relayed back to the application. Users interact only with the application window, without access to the base computing environment unless granted by your application.

Ephemeral Environment

The host environment is ephemeral. It’s created when the stream begins and deleted once the stream concludes. Do not assume persistent local storage or that an end-user will operate on a consistent system.

3. Building an Application for Omniverse Cloud

Omniverse Cloud Specific Application kit File

Along with your standard application kit file, you’ll need an Omniverse Cloud specific one to ensure proper functioning and to fine-tune settings. This file should have an .ovc suffix added to your application name. For instance, if your app is named my_app, you’ll have my_app.kit as your main kit file and my_app.ovc.kit for Omniverse Cloud.

Since most kit settings are unchanged for Omniverse Cloud, we recommend importing your main .kit file into the .ovc.kit one. This lets you focus on adding only Omniverse Cloud required settings and overrides, such as disabling certain system operations.

Below is a sample from the omni.usd_explorer.ovc.kit file from the kit-app-template repository, annotated for clarity:

[dependencies]
# Items listed in this section are dependencies that this OV application requires.
# This is the main USD Explorer kit file. All of the settings and dependencies in there are also dependencies
# for this cloud based version of the application.
"omni.usd_explorer" = {}

# This extension controls what occurs when a scene is loaded on a streaming instances of USD Explorer
"omni.cloud.open_stage" = {}


[settings.app]
# Allows the client application to determine streaming resolution.
livestream.allowResize = true

livestream.webrtcEtli = true

# Only log error or critical level issues.
livestream.logLevel = "error"

# Scale the application window to match the size & aspect ratio of the monitor.
window.scaleToMonitor = true

For ease:

  1. Download the omni.usd_explorer.ovc.kit file into your project.

  2. Rename it based on your application name.

  3. Review the values and modify or delete any as needed.

  4. Add any additional Application specific settings

Creating an .ovc.kit build target

To go along with your .ovc.kit file, you need to create a corresponding build target. If you are using the standard repo-tools and project structure, this involves the following steps.

  1. Open .\premake5.lua

  2. Find the section -- Apps:

  3. Make sure there is an entry for your main app define_app("my_app")

  4. Add an entry for the .ovc.kit app: define_app("my_app.ovc")

  5. Comment-out any other applications

You also need to add my_app.ovc.kit to .\repo.toml for precaching

  1. Open .\repo.toml

  2. Find the section [repo_precache_exts]

  3. Find the apps list

  4. Make sure the base application "${root}/source/apps/my_app.kit", is included.

  5. Add an entry for the .ovc.kit app: "${root}/source/apps/my_app.ovc.kit",

  6. Comment-out any other applications.

Performing the Build

In order to build a kit application to run on an Omniverse Cloud Instance, you must do so from Linux. We recommend running on Ubuntu 20 or 22.

Build your application and verify that it runs correctly.

$ /build.sh

Once you are satisfied everything is working properly, do a final clean release build of just the applications you want to publish/deploy and precache the extensions.

$ /build.sh -c
$ /build.sh -r
$ ./repo.sh precache_exts -u

4. Packaging your Application for Omniverse Cloud Deployment

Packaging for Omniverse Cloud requires only a few things.

  1. Start from a clean release linux build of your application with pre-cached extensions (see above)

  2. An Omniverse Cloud application icon .\source\launcher\icon_ovc.[png|svg]. This is used by the Omniverse Cloud Web Launcher and can be either a 128x128 PNG or an SVG file.

  3. Verify that the information in ./source/launcher/launcher.toml is correct, with entry-points for your myapp.ovc application.

  4. Confirm the information in ./source/launcher/description.toml

  5. Create a Fat application package

For further information on how to package your application, refer to the packaging guide