Connect SDK Component Details
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.