0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

NVIDIA Omniverse Extension开发秘籍

丽台科技 来源:丽台科技 2025-08-22 15:52 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

04d75fc6-7d6b-11f0-a18e-92fbcf53809c.png

2.2 选择 Extension:

04eb9518-7d6b-11f0-a18e-92fbcf53809c.png

2.3 然后再选择 Python UI Extension:

04fdffd2-7d6b-11f0-a18e-92fbcf53809c.png

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

0511abd6-7d6b-11f0-a18e-92fbcf53809c.png

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

052720d8-7d6b-11f0-a18e-92fbcf53809c.png

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

053d0b96-7d6b-11f0-a18e-92fbcf53809c.png

每个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:

0556c586-7d6b-11f0-a18e-92fbcf53809c.png

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

05719e74-7d6b-11f0-a18e-92fbcf53809c.png

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 不相关的信息。在开发过程中制定好某些规范,可让开发调试更有效率。

0589c1de-7d6b-11f0-a18e-92fbcf53809c.png

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

05a06e0c-7d6b-11f0-a18e-92fbcf53809c.png

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 个环境变量用于后续开发。

05cc9c7a-7d6b-11f0-a18e-92fbcf53809c.png

4.3 开发环境配置

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

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

05dedcaa-7d6b-11f0-a18e-92fbcf53809c.png

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

05ee746c-7d6b-11f0-a18e-92fbcf53809c.png

4.3.3 动态链接库设置。

0603dc3a-7d6b-11f0-a18e-92fbcf53809c.png

4.3.4 填入python311.lib和python3.lib。

06149bb0-7d6b-11f0-a18e-92fbcf53809c.png

4.3.5 输出设置

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

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

062755f2-7d6b-11f0-a18e-92fbcf53809c.png

4.4 代码开发

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

#include


namespacepy = pybind11;


intadd(inti,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 中的大小写完全一样)。

063a67aa-7d6b-11f0-a18e-92fbcf53809c.png

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__)

0651be64-7d6b-11f0-a18e-92fbcf53809c.png

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

文案&技术支持:

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    5496

    浏览量

    109045
  • 开源
    +关注

    关注

    3

    文章

    4031

    浏览量

    45545
  • C++
    C++
    +关注

    关注

    22

    文章

    2122

    浏览量

    76694
  • python
    +关注

    关注

    57

    文章

    4856

    浏览量

    89547

原文标题:NVIDIA Omniverse Extension 开发秘籍:Python/C++ 实战,附完整代码

文章出处:【微信号:Leadtek,微信公众号:丽台科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    NVIDIANVIDIA Omniverse带给全球超过250万的开发

    NVIDIA开发者计划现将NVIDIA Omniverse带给全球超过250万的开发者。在SIGGRAPH大会,
    的头像 发表于 08-16 16:08 1980次阅读

    NVIDIA Omniverse连接游戏开发工作流

    NVIDIA Omniverse 为游戏中的艺术和虚拟世界提供实时、协作的设计平台,从而加快开发速度
    的头像 发表于 04-01 09:30 1631次阅读

    NVIDIA Omniverse Create最新版功能介绍

      NVIDIA Omniverse Create 2021.3 现已在中提供公开测试版,为 Omniverse 艺术家、设计师、开发人员和工程师提供一组新功能,以增强图形和内容创建工
    的头像 发表于 04-07 15:34 2234次阅读

    NVIDIA Omniverse在动画制作中的应用

    介绍使用 NVIDIA Omniverse 3D 模拟和协作平台推动艺术或设计流程的个人创作者和开发者。
    的头像 发表于 05-13 11:28 1821次阅读

    NVIDIA Omniverse的特性及应用

    NVIDIA Omniverse 基于 Pixar 的 Universal Scene Description 和 NVIDIA RTX技术打造,是一款可扩展的多 GPU 实时推理开发
    的头像 发表于 06-15 09:53 2076次阅读

    Omniverse 先锋面对面:动画师使用 NVIDIA Omniverse 为大家带来欢乐和知识

    Omniverse 先锋面对面”系列文章 介绍使用 NVIDIA Omniverse 3D 模拟和协作平台推动艺术创作或设计流程的个人创作者和开发者。 Marko Matosevic
    的头像 发表于 11-10 11:00 1243次阅读

    奥比中光将接入 NVIDIA Omniverse开发平台

    ,作为其合作伙伴,奥比中光正式宣布将Femto Mega和其它3D相机集成到NVIDIA Omniverse生态开发平台中。 NVIDIA 全球产业数字化生态布局伙伴, 奥比中光也在其
    的头像 发表于 05-31 09:03 1376次阅读

    NVIDIA 知乎精彩问答甄选 | 查看关于 NVIDIA Omniverse 的相关精彩问答

    甄选问答将为您分享  NVIDIA Omniverse 的相关精彩问答 Q: NVIDIA 全新的 Omniverse Cloud API 有何亮点? A:
    的头像 发表于 12-01 18:40 962次阅读
    <b class='flag-5'>NVIDIA</b> 知乎精彩问答甄选 | 查看关于 <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Omniverse</b> 的相关精彩问答

    NVIDIA Omniverse中的物理模拟功能

    NVIDIA Omniverse™ Simulation 作为 NVIDIA Omniverse™ 平台的关键组件之一,由 NVIDIA
    的头像 发表于 03-08 11:30 2514次阅读
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>Omniverse</b>中的物理模拟功能

    NVIDIA宣布将以API形式提供Omniverse™ Cloud

    NVIDIA Omniverse Cloud API 使开发者能够将 Omniverse 技术集成到其设计与仿真工具和工作流中。
    的头像 发表于 03-20 09:45 1103次阅读

    全新NVIDIA Omniverse Cloud API有何亮点?

    NVIDIA Omniverse Cloud API 使开发者能够将 Omniverse 技术集成到其设计与仿真工具和工作流中。
    的头像 发表于 03-20 13:42 1013次阅读

    Omniverse教程(12):NVIDIA Omniverse USD Presenter的基础应用

    如前所述,NVIDIA Omniverse™ 是一个参考开发平台,通过模块化的开发框架能够轻松扩展和自定义。
    的头像 发表于 05-20 10:09 1657次阅读
    <b class='flag-5'>Omniverse</b>教程(12):<b class='flag-5'>NVIDIA</b> <b class='flag-5'>Omniverse</b> USD Presenter的基础应用

    使用OpenUSD和NVIDIA Omniverse开发虚拟工厂解决方案

    工业开发者正在借助 NVIDIA AI、NVIDIA Omniverse 和通用场景描述 (OpenUSD)生态系统的力量构建虚拟工厂解决方案,通过优化棕地和绿地
    的头像 发表于 05-28 18:12 2036次阅读
    使用OpenUSD和<b class='flag-5'>NVIDIA</b> <b class='flag-5'>Omniverse</b><b class='flag-5'>开发</b>虚拟工厂解决方案

    借助OpenUSD和NVIDIA Omniverse开发数字孪生应用

    接口、软件开发套件和服务组成的,使开发者能够开发基于 OpenUSD 的应用 NVIDIA Omniverse
    的头像 发表于 09-06 14:18 1061次阅读

    NVIDIA Omniverse扩展至生成式物理AI领域

    重要方向。 这一创新举措不仅增强了Omniverse的多元化应用能力,更为全球软件开发和专业服务领域的领先企业提供了全新的开发工具和平台。借助Omniverse,这些企业能够更快地
    的头像 发表于 01-13 10:56 1055次阅读