NVIDIA Omniverse是一個(gè)模塊化平臺(tái),使用高級(jí) API 和微服務(wù)來構(gòu)建由OpenUSD和NVIDIA RTX提供支持的 3D 應(yīng)用。OpenUSD 功能強(qiáng)大的 3D 框架與 NVIDIA RTX 用于視覺渲染和模擬的實(shí)時(shí)光線追蹤相結(jié)合,使開發(fā)者能夠?yàn)楦餍懈鳂I(yè)構(gòu)建可擴(kuò)展的解決方案。
NVIDIA Omniverse 的開發(fā)支持Python和C++兩種語言。Python 開發(fā)效率高,因此 Omniverse 的主要開發(fā)以 Python 為主。而 C++ 開發(fā)則可以通過著名的開源框架 Pybind11 封裝好后提供 Python 接口。
1開發(fā)環(huán)境準(zhǔn)備
1.1 Visual Studio code
推薦使用 Visual Studio Code 開發(fā),有條件的可以使用 Cursor 等 AI 開發(fā)工具,或者結(jié)合 GPT、Deepseek 等輔助開發(fā)。
Visual Studio code 下載:
https://code.visualstudio.com/
(復(fù)制鏈接至瀏覽器打開,下同)
1.2 Omniverse Kit template
有 2 種部署方式:可以選擇自己搭建,或者通過網(wǎng)盤下載打包文件,具體步驟參照:
《0 基礎(chǔ)上手!NVIDIA Omniverse Kit 107 部署指南》
《福利丨NVIDIA Omniverse Kit 107.2 打包放送!》
2創(chuàng)建 Omniverse Extension
2.1 在Kit App template(重命名為 Kit107.3)目錄下,以 Windows 為例,在命令行模式下運(yùn)行:
repotemplatenew
2.2 選擇 Extension:
2.3 然后再選擇 Python UI Extension:
2.4 輸入 Extension 的名字“nv.hello_world”,顯示窗口的名字“Hello world”:
2.5相同目錄下運(yùn)行repo launch打開 NVIDIA Omniverse USD Composer,點(diǎn)擊 Developer -- Extension(如下圖所示),打開剛才創(chuàng)建的Hello world:
2.6 點(diǎn)擊上圖的 VS Code 按鈕, VS code 就會(huì)把整個(gè)用戶創(chuàng)建的 Extension 目錄打開。找到創(chuàng)建的nvhello_world目錄下面的Extension.py。
每個(gè)Extension.py對(duì)應(yīng)每個(gè)插件的入口文件,其中會(huì)默認(rèn)創(chuàng)建on_startup和on_shutdown這 2 個(gè)函數(shù):
defon_startup(self, _ext_id):
defon_shutdown(self):
3Extension Debug 開發(fā)調(diào)試
調(diào)試是確保程序運(yùn)行正常的必要環(huán)境,Omniverse 支持VS Code Live debug 調(diào)試和打印 Log debug 調(diào)試兩種方式,下面將展開介紹這兩種 debug 調(diào)試方式。
3.1 VSCode Live Debug 調(diào)試
VS Code 調(diào)試可以根據(jù)斷點(diǎn)設(shè)置實(shí)時(shí)查看各種變量。
3.1.1 點(diǎn)擊菜單 Run -- Start Debugging:
3.1.2 點(diǎn)擊 Omniverse 窗口中插件窗口的“Add”按鈕,此時(shí)可以看到斷點(diǎn)被觸發(fā):
3.2 打印 Log debug 調(diào)試
在很多情況下并不適合斷點(diǎn)調(diào)試,比如和時(shí)序相關(guān)的很多 Bug 或者觸發(fā)條件很復(fù)雜的情況,這時(shí)候需要打印 Log 來進(jìn)行調(diào)試。
許多開發(fā)者用 Python 默認(rèn)的 print 函數(shù)來進(jìn)行打印調(diào)試,這里推薦用 Omniverse 封裝好的函數(shù)。
在 Omniverse Kit 開發(fā)中,可以用carb.log_info,carb.log_warn,carb.log_error。這 3 個(gè)在“console”窗口進(jìn)行分類且會(huì)對(duì)應(yīng)不同的顏色。
3.2.1 首先在代碼中import carb .然后在代碼中分別在三個(gè)不同的函數(shù)中填入carb.log_info,carb.log_warn和carb.log_error。
* 注意此處每個(gè) log 都填入了 [NV_Hello_World] 這樣做的目的是在“Console”窗口查看對(duì)應(yīng)的 Extension 時(shí),過濾掉其他 Extension 不相關(guān)的信息。在開發(fā)過程中制定好某些規(guī)范,可讓開發(fā)調(diào)試更有效率。
3.2.2 在“Console”窗口中,點(diǎn)擊不同的顏色可以區(qū)別顯示不同類別的 Log,過濾窗口過濾掉非本 Extension 的調(diào)試信息。
4用 Pybind11 結(jié)合 C++開發(fā) Omniverse Extension
pybind11 是現(xiàn)階段流行的一個(gè) C++ 結(jié)合 Python 的開發(fā)框架,本質(zhì)是一個(gè)輕量級(jí)的頭文件庫,用來把 C++ 接口封裝以后暴露給 Python 使用。
這樣在 Omniverse Extension 開發(fā)中,既可以滿足 Python 快速開發(fā) UI 的便捷需求,又可以利用 C++ 高效對(duì)接許多底層硬件工業(yè)設(shè)備,比如 SDI 視頻采集卡。
*這里不建議用 Omniverse 自帶的 C++ Extension 去開發(fā):因?yàn)?C++ 版本的在編寫 Omniverse UI 方面便捷性不足,在 Omniverse Extension 級(jí)別的開發(fā)還是以 Python 為主。
4.1 開發(fā)環(huán)境安裝
要開發(fā) Pybind11 程序,需要 Pybind11 文件庫和 Python3.11 運(yùn)行環(huán)境。也可以直接用 Omniverse 自帶的 Python 運(yùn)行環(huán)境,目前是 3.11 版本,在 Omniverse 安裝目錄下面的..\_buildwindows-x86_64 eleasekitpython
下載 Pybind11 開發(fā)庫:
首先我們?cè)?Github 上下載:
https://github.com/pybind/pybind11
git clonehttps://github.com/pybind/pybind11.git到本地目錄。
下載 Python 運(yùn)行環(huán)境并安裝:
https://www.python.org/downloads/release/python-3110/
下載 Visual Studio 開發(fā)環(huán)境:
https://visualstudio.microsoft.com/zh-hans/free-developer-offers/
4.2 設(shè)置環(huán)境變量(以 Windows 為例)
在 Windows 系統(tǒng)環(huán)境變量中(Windows 開始菜單 -- 搜索“環(huán)境變量”)設(shè)置開發(fā)路徑,分別設(shè)置py311_include,py311_lib和pybind_include這 3 個(gè)環(huán)境變量用于后續(xù)開發(fā)。
4.3 開發(fā)環(huán)境配置
用 Visual Studio 封裝 Pybind(Linux 或者跨平臺(tái) CMakelist 等請(qǐng)參考 Pybind11 官方文檔),安裝 Visual Studio 并選擇 C++ 開發(fā)組件,然后創(chuàng)建一個(gè) C++ 空項(xiàng)目,起名為“Example”。
4.3.1 修改生成程序?yàn)?DLL 動(dòng)態(tài)鏈接庫形式。
4.3.2 配置頭文件,把之前設(shè)置的頭文件環(huán)境變量填寫在如下圖所示的地方。
4.3.3 動(dòng)態(tài)鏈接庫設(shè)置。
4.3.4 填入python311.lib和python3.lib。
4.3.5 輸出設(shè)置
DLL 工程默認(rèn)生成是.dll,但實(shí)際 Omniverse 工程中需要的是.pyd擴(kuò)展名,所以在 Post-Build Event 中執(zhí)行下面命令,拷貝并且重新設(shè)置擴(kuò)展名:
copy/Y"$(OutDir)$(TargetName).dll""$(OutDir)$(TargetName).pyd"
4.4 代碼開發(fā)
在 Visual Studio 工程中創(chuàng)建一個(gè)source.cpp填入以下代碼:
#includenamespacepy = 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"); }
編譯代碼成功以后看到生成一個(gè)Example.pyd。
* 注意 Example 要和 PYBIND11_MODULE 中的大小寫完全一樣)。
4.5 在 Omniverse 調(diào)用 pyd
拷貝剛才生成的 pyd 文件到 Omniverse 的 Python 鏈接庫文件夾下面??梢宰孕芯帉懩_本,或者在之前的 post-build 中執(zhí)行命令:
..\_buildwindows-x86_64releasekitpythonDLLs
打開 Omniverse 菜單欄 Developer--Script Editor,輸入以下代碼點(diǎn)擊 Run,可以看到封裝的 C++ 函數(shù)在 Python 端被正確調(diào)用執(zhí)行。
importExample result = Example.add(1,2) print(f"Pybind Example result is{result}") help(Example.add) print(Example.__doc__) print(Example.add.__doc__)
下期將帶來實(shí)戰(zhàn)項(xiàng)目——利用 Omniverse Extension 開發(fā) FreeD 定位系統(tǒng)。敬請(qǐng)持續(xù)關(guān)注麗臺(tái)科技,獲取更多干貨內(nèi)容!
文案&技術(shù)支持:
宋毅明 NVIDIA 半導(dǎo)體專業(yè)可視化部門
*與NVIDIA產(chǎn)品相關(guān)的圖片或視頻(完整或部分)的版權(quán)均歸NVIDIA Corporation所有。
-
NVIDIA
+關(guān)注
關(guān)注
14文章
5442瀏覽量
108484 -
開源
+關(guān)注
關(guān)注
3文章
3885瀏覽量
45295 -
C++
+關(guān)注
關(guān)注
22文章
2120瀏覽量
76521 -
python
+關(guān)注
關(guān)注
56文章
4849瀏覽量
89099
原文標(biāo)題:NVIDIA Omniverse Extension 開發(fā)秘籍:Python/C++ 實(shí)戰(zhàn),附完整代碼
文章出處:【微信號(hào):Leadtek,微信公眾號(hào):麗臺(tái)科技】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
NVIDIA將NVIDIA Omniverse帶給全球超過250萬的開發(fā)者
用NVIDIA Omniverse連接游戲開發(fā)工作流
NVIDIA Omniverse Create最新版功能介紹
NVIDIA Omniverse在動(dòng)畫制作中的應(yīng)用
NVIDIA Omniverse的特性及應(yīng)用
Omniverse 先鋒面對(duì)面:動(dòng)畫師使用 NVIDIA Omniverse 為大家?guī)須g樂和知識(shí)
奧比中光將接入 NVIDIA Omniverse開發(fā)平臺(tái)
NVIDIA 知乎精彩問答甄選 | 查看關(guān)于 NVIDIA Omniverse 的相關(guān)精彩問答

NVIDIA Omniverse中的物理模擬功能

NVIDIA宣布將以API形式提供Omniverse? Cloud
全新NVIDIA Omniverse Cloud API有何亮點(diǎn)?
Omniverse教程(12):NVIDIA Omniverse USD Presenter的基礎(chǔ)應(yīng)用

使用OpenUSD和NVIDIA Omniverse開發(fā)虛擬工廠解決方案

評(píng)論