NVIDIA Omniverse是一个模块化平台,使用高级 API 和微服务来构建由OpenUSD和NVIDIA RTX提供支持的 3D 应用。OpenUSD 功能强大的 3D 框架与 NVIDIA RTX 用于视觉渲染和模拟的实时光线追踪相结合,使开发者能够为各行各业构建可扩展的解决方案。
NVIDIA Omniverse 的开发支持Python和C 两种语言。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所有。
关注
14文章
5363浏览量
106893免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如有疑问请发送邮件至:bangqikeconnect@gmail.com