/ ai资讯

NVIDIA Omniverse Extension开发秘籍

发布时间:2025-08-22 17:46:15

NVIDIA Omniverse是一个模块化平台,使用高级 API 和微服务来构建由OpenUSDNVIDIA RTX提供支持的 3D 应用。OpenUSD 功能强大的 3D 框架与 NVIDIA RTX 用于视觉渲染和模拟的实时光线追踪相结合,使开发者能够为各行各业构建可扩展的解决方案。

NVIDIA Omniverse 的开发支持PythonC 两种语言。Python 开发效率高,因此 Omniverse 的主要开发以 Python 为主。而 C 开发则可以通过著名的开源框架 Pybind11 封装好后提供 Python 接口。

1开发环境准备

1.1 Visual Studio code

推荐使用 Visual Studio Code 开发,有条件的可以使用 Cursor 等 AI 开发工具,或者结合 GPT、Deepseek 等辅助开发。

Visual Studio code 下载

https://code.visualstudio.com/

(复制链接至浏览器打开,下同)

1.2 Omniverse Kit template

有 2 种部署方式:可以选择自己搭建,或者通过网盘下载打包文件,具体步骤参照:

《0 基础上手!NVIDIA Omniverse Kit 107 部署指南》

《福利丨NVIDIA Omniverse Kit 107.2 打包放送!》

2创建 Omniverse Extension

2.1 在Kit app template(重命名为 Kit107.3)目录下,以 Windows 为例,在命令行模式下运行:

repotemplatenew

2.2 选择 Extension:

2.3 然后再选择 Python UI Extension:

2.4 输入 Extension 的名字“nv.hello_world”,显示窗口的名字“Hello world”:

2.5相同目录下运行repo launch打开 NVIDIA Omniverse USD Composer,点击 Developer -- Extension(如下图所示),打开刚才创建的Hello world:

2.6 点击上图的 VS Code 按钮, VS code 就会把整个用户创建的 Extension 目录打开。找到创建的nvhello_world目录下面的Extension.py。

每个Extension.py对应每个插件的入口文件,其中会默认创建on_startup和on_shutdown这 2 个函数:

defon_startup(self, _ext_id):
defon_shutdown(self):

3Extension Debug 开发调试

调试是确保程序运行正常的必要环境,Omniverse 支持VS Code Live debug 调试打印 Log debug 调试两种方式,下面将展开介绍这两种 debug 调试方式。

3.1 VSCode Live Debug 调试

VS Code 调试可以根据断点设置实时查看各种变量。

3.1.1 点击菜单 Run -- Start Debugging:

3.1.2 点击 Omniverse 窗口中插件窗口的“Add”按钮,此时可以看到断点被触发:

3.2 打印 Log debug 调试

在很多情况下并不适合断点调试,比如和时序相关的很多 Bug 或者触发条件很复杂的情况,这时候需要打印 Log 来进行调试。

许多开发者用 Python 默认的 print 函数来进行打印调试,这里推荐用 Omniverse 封装好的函数。

在 Omniverse Kit 开发中,可以用carb.log_info,carb.log_warn,carb.log_error。这 3 个在“console”窗口进行分类且会对应不同的颜色。

3.2.1 首先在代码中import carb .然后在代码中分别在三个不同的函数中填入carb.log_info,carb.log_warn和carb.log_error。

* 注意此处每个 log 都填入了 [NV_Hello_World] 这样做的目的是在“Console”窗口查看对应的 Extension 时,过滤掉其他 Extension 不相关的信息。在开发过程中制定好某些规范,可让开发调试更有效率。

3.2.2 在“Console”窗口中,点击不同的颜色可以区别显示不同类别的 Log,过滤窗口过滤掉非本 Extension 的调试信息。

4用 Pybind11 结合 C 开发 Omniverse Extension

pybind11 是现阶段流行的一个 C 结合 Python 的开发框架,本质是一个轻量级的头文件库,用来把 C 接口封装以后暴露给 Python 使用。

这样在 Omniverse Extension 开发中,既可以满足 Python 快速开发 UI 的便捷需求,又可以利用 C 高效对接许多底层硬件工业设备,比如 SDI 视频采集卡。

*这里不建议用 Omniverse 自带的 C Extension 去开发:因为 C 版本的在编写 Omniverse UI 方面便捷性不足,在 Omniverse Extension 级别的开发还是以 Python 为主。

4.1 开发环境安装

要开发 Pybind11 程序,需要 Pybind11 文件库和 Python3.11 运行环境。也可以直接用 Omniverse 自带的 Python 运行环境,目前是 3.11 版本,在 Omniverse 安装目录下面的..\_buildwindows-x86_64 eleasekitpython

下载 Pybind11 开发库:

首先我们在 Github 上下载:

https://github.com/pybind/pybind11

git clonehttps://github.com/pybind/pybind11.git到本地目录。

下载 Python 运行环境并安装:

https://www.python.org/downloads/release/python-3110/

下载 Visual Studio 开发环境:

https://visualstudio.microsoft.com/zh-hans/free-developer-offers/

4.2 设置环境变量(以 Windows 为例)

在 Windows 系统环境变量中(Windows 开始菜单 -- 搜索“环境变量”)设置开发路径,分别设置py311_include,py311_lib和pybind_include这 3 个环境变量用于后续开发。

4.3 开发环境配置

用 Visual Studio 封装 Pybind(Linux 或者跨平台 CMakelist 等请参考 Pybind11 官方文档),安装 Visual Studio 并选择 C 开发组件,然后创建一个 C 空项目,起名为“Example”。

4.3.1 修改生成程序为 DLL 动态链接库形式。

4.3.2 配置头文件,把之前设置的头文件环境变量填写在如下图所示的地方。

4.3.3 动态链接库设置。

4.3.4 填入python311.lib和python3.lib。

4.3.5 输出设置

DLL 工程默认生成是.dll,但实际 Omniverse 工程中需要的是.pyd扩展名,所以在 Post-Build Event 中执行下面命令,拷贝并且重新设置扩展名:

copy/Y"$(OutDir)$(TargetName).dll""$(OutDir)$(TargetName).pyd"

4.4 代码开发

在 Visual Studio 工程中创建一个source.cpp填入以下代码:

#include
  
   


namesp
   acepy = pybind11;


intadd(in
   ti,intj){
 returni   j;
}
PYBIND11_MODULE(Example, m, py::mod_gil_not_used()) {
  m.doc() ="pybind11 Example plugin";// optional module docstring
  m.def("add", &add,"A function that adds two numbers");
}
  

编译代码成功以后看到生成一个Example.pyd。

* 注意 Example 要和 PYBIND11_MODULE 中的大小写完全一样)。

4.5 在 Omniverse 调用 pyd

拷贝刚才生成的 pyd 文件到 Omniverse 的 Python 链接库文件夹下面。可以自行编写脚本,或者在之前的 post-build 中执行命令:

..\_buildwindows-x86_64releasekitpythonDLLs

打开 Omniverse 菜单栏 Developer--Script Editor,输入以下代码点击 Run,可以看到封装的 C 函数在 Python 端被正确调用执行。

importExample
result = Example.add(1,2)
print(f"Pybind Example result is{result}")
help(Example.add)
print(Example.__doc__)
print(Example.add.__doc__)

下期将带来实战项目——利用 Omniverse Extension 开发 FreeD 定位系统。敬请持续关注丽台科技,获取更多干货内容!

文案&技术支持:

宋毅明 NVIDIA 半导体专业可视化部门

*与NVIDIA产品相关的图片或视频(完整或部分)的版权均归NVIDIA Corporation所有。

  • NVIDIA NVIDIA 关注

    关注

    14

    文章

    5363

    浏览量

    106893

免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

如有疑问请发送邮件至:bangqikeconnect@gmail.com