Connect SDK Component Details

Shared Library

The omni_connect_core shared library is the main entry point to the Connect SDK API. It provides an API for client Connectors to synchronize the native client application’s scene representation with the scene representation in Omniverse.

The core library comes in several flavors for many different runtime combinations. In all cases, omni_connect_core makes use of OpenUSD, Omniverse Carbonite, and Omniverse Transcoding.

Some flavors include optional Omniverse Nucleus features that internally use the Omniverse Client Library and Omniverse USD Resolver.

By adding a dependency to omni_connect_core, all of these underlying libraries will become available to each Connector as well.

Tip

If omni_connect_core is not yet providing the necessary functionality, Connectors are free to use these lower level APIs directly.

Python Bindings

All shared libraries in the Connect SDK come with Python bindings to expose the public functionality to Python based Connectors. Methods from omni_connect_core can be accessed from Python via the omni.connect.core module.

One complexity is interop between Omniverse APIs and OpenUSD APIs in python, since the two ecosystems use different binding mechanisms. To simplify this, omni_connect_core provides an interop layer that allows OpenUSD python objects to be used directly as arguments to omni.connect.core functions (and vice versa).

Note

This binding interop layer is minimally defined for the OpenUSD data types used within the Connect SDK public APIs. If your Connector requires more types exposed, please file a feature request and they can be easily added.

Calling Python from C++

Aside from the Python Bindings, some functionality in Omniverse is written purely in Python and needs to be accessible for C++ Connectors. As such, the default flavor of omni_connect_core requires Python at compile & link time (as does OpenUSD itself).

Note

Python-less nopy variants of omni_connect_core exist as well, and this functionality is necessarily disabled in these variants.

To simplify accessing Python for the most common cases, omni_connect_core provides a thin Python Scripting API backed by Carbonite’s Python Scripting plugin. Using Carbonite greatly simplifies the process of bootstrapping the python interpreter into applications that don’t otherwise provide a python runtime component. If this thin wrapper is insufficient for your needs, pybind11 is an available dependency, and you may bind your own c++ functions using pybind11 directly.

Optional Omniverse Nucleus Features

Omniverse Nucleus features can be enabled with a compile-time switch for omni_connect_core. These include convenience functions wrapping the Omniverse Client Library as well as automated integration of the Omniverse USD Resolver.

Caution

The Omni USD Resolver and Omni Client Library are required to load any omniverse:// hosted data, but they are also the technologies providing generic https:// and file:// URI handling for OpenUSD. Even if you never need an actual Nucleus server, you may want to include these components to enable generic URI storage.

When using a prebuilt flavor of Connect SDK, be sure to select the nucleus-on variant if you want Nucleus (or any URI) support, or alternatively select the nucleus-off flavor if you explicitly do not want to ship these underlying libraries in your runtime. See the example runtime file layouts to understand the implications to your runtime requirements.

Runtime Configuration

Connect SDK uses Carbonite Settings & Tokens to configure runtime behavior of its libraries and modules. The omni_connect_core default configuration is stored in omni.connect.core.toml, which should be installed to the $CARB_APP_PATH/config/ folder within the runtime deployment of any client Connector. For more details, see Settings and Configuration.

Build and CI/CD Tools

Connect SDK also provides a suite of Build & CI/CD tools that client Connectors can leverage to simplify these devops processes. These tools are all contained in a dev sub directory of the omni_connect_sdk package.

Repoman and Packman

In the dev/tools sub directory we provide the standard NVIDIA repoman and packman tooling that was used to build Connect SDK itself, along with any custom repo_tools used in Connect SDK deployment.

For more details on the custom repo_tools to assist Connector developers, see Repo Tools for Connectors.

Common Dependency Versioning

In the dev/deps sub directory we provide an all-deps.packman.xml file, which should be used for any overlapping dependencies between each Connector and Connect SDK itself.

Important

This approach ensures that Connectors are using the exact same Carbonite, Omniverse USD Resolver, Omniverse Client Library, etc as Connect SDK.

See Integrate Connect SDK and Build a Connector for more details.

Build Configuration via Premake

Most NVIDIA developed Connectors should be built using premake via repo_build. In the dev/tools/premake sub directory we provide a connect-sdk-public.lua file, which can be sourced from a Connector’s premake5.lua to bootstrap much of the build process.

It will always be necessary for Connectors to further modify the build Workspace and Projects with client application specific headers, libraries, and compiler flags, but using the connect-sdk-public.lua will provide a solid foundation to start from.

See Integrate Connect SDK and Build a Connector for a brief overview and see Premake Lua Modules for more details.