通用場景描述 (OpenUSD) 提供了一個強大、開放且可擴展的生態系統,用于在復雜的 3D 世界中進行描述、合成、仿真和協作。從處理大型數據集和 數字孿生的 自動化工作流程,到實現游戲的實時渲染以及簡化制造和能源領域的工業運營,OpenUSD 正在轉變各行各業處理 3D 數據的方式。
Python 的腳本功能和易用性使其成為 OpenUSD 的理想合作伙伴,幫助實現任務自動化并加速開發。
在這篇博客文章中,我們將探索 Python 和 USD 之間的協同作用,并提供資源幫助您入門。
為什么 Python 對 OpenUSD 至關重要
OpenUSD 主要使用 C++ 實現,為 3D 場景操作提供了高性能、高效的框架。C++ API 分為幾個關鍵包。
- 基礎:包含與應用無關的基礎模組。
- USD:包含用于創作、讀取和合成 USD 文件的模塊。它定義了用于擴展和調整 USD 的插件接口。
- 成像:提供 Hydra 硬件渲染器和其他低級成像服務。
- USD Imaging:連接 USD 和 Hydra,提供用于高效數據讀取和可視化的適配器。其中包括用于檢查 USD 文件的 usdview 等工具。
但是,USD 為其大多數庫提供 Python 綁定,使其無需 C++ 專業知識即可進行快速原型設計、腳本編寫和自動化。

要使用 Python 優化 OpenUSD 工作流,務必要了解其核心概念。NVIDIA 為開發者提供免費課程,以提高他們的 OpenUSD 技能,這些技能對于掌握 USD Python 編碼和導航 API 至關重要。歡迎前往 Learning OpenUSD:Foundations 了解詳情。
Python 的優勢:快速原型設計、工具集成和場景操作
Python 之所以用于原型設計,是因為它非常靈活,不需要編譯或 Makefile。它使用戶能夠專注于自己的任務,例如自動創建場景、動態驗證資產和優化場景,而不會陷入困境,如內存管理等低級細節。對于那些可能沒有技術背景但仍想使用這些強大功能的 OpenUSD 用戶來說,這款 Python 應用非常適合他們。
以下是 NVIDIA Omniverse 的組件,NVIDIA Omniverse 是一個包含 API、SDK 和服務的平臺,支持開發者將 OpenUSD、NVIDIA RTX 渲染技術和生成式物理 AI 集成到現有軟件工具和仿真工作流中。
- USD Exchange SDKUSD Exchange SDK 可幫助開發者設計、構建和測試自己的 USD 輸入輸出解決方案,從而加速 OpenUSD 的采用。它為創建 stages、設置顯示名稱等提供了更高級別的便捷功能,以補充低級 USD 概念,從而輕松將本地數據源映射到 OpenUSD,并確保不同 3D 生態系統中的 USD 資產保持一致且正確無誤。
- USD 資產驗證器 USD Asset Validator 是 Omniverse 擴展程序,通過執行基于規則的驗證來驗證 OpenUSD 資產的兼容性。它可以驗證不同的組件,例如層、階段和單個基元,并提供詳細的誤差向量來幫助識別和糾正問題。
- 場景優化器 Scene Optimizer 是一組工具,可讓您降低場景開發所需的內存并加速渲染。它可優化材質、幾何復雜性并利用 instancing,從而加快視窗操作和渲染速度。
- OpenUSD 代碼示例探索 GitHub 上的 OpenUSD 代碼示例資源庫 ,獲取 Python、C++ 和 USD 中的有用代碼片段。這些示例涵蓋專注于場景創建和操作、屬性和元數據管理以及場景和層管理的常見任務和概念,可幫助您學習和試驗 OpenUSD。請訪問 NVIDIA OpenUSD Code Samples 文檔頁面,探索完整渲染的示例。
要了解如何使用 Python 與 Omniverse 交互,請觀看 Shane Reetz 的視頻。
使用 OpenUSD 的 Python 的常見用例
除上述工具外,我們還將深入探討 Python 和 OpenUSD 中常用的一些用例。
提取數據并將其轉換為 USD
開始使用 USD 的第一步是將數據轉換為 USD 格式。 USD Data Exchange 目錄 包含導入者、導出者和轉換器,可簡化將現有資產集成到 USD 工作流中的過程。
如需了解更多信息,請查看技術博客文章“ How to Use OpenUSD ”和“ Learn OpenUSD:Developing Data Exchange Pipelines ”,您將在其中獲得數據提取和轉換技術方面的實踐經驗。
驗證和應用修復
自動驗證腳本可及早發現錯誤,從而防止出現 pipeline 問題。Python 可用于創建用于跟蹤 pipeline 狀態和性能的監控工具。
Omni Asset Validator 是一個 Python 框架,使用 USD Compliance Checker 框架來驗證資產,確保流暢的工作流集成。主要用例包括:
- 基本規則:檢查 USD 的基本正確性。
- 幾何規則:Validate 網格拓撲、細分方案,并刪除未使用或零面積元素。
- 布局規則:確保正確的默認 prims 并驗證 prim specifiers。
- 性能:檢查是否可以從使用 USDC 格式中受益的層。
自動化場景構建
Python 腳本可以自動構建場景,減少手動工作并確保一致性。這可加快工作流程并實現更復雜的場景創建。USD Exchange Samples GitHub 文檔提供了創建 lights、materials 等的示例。
定義明確的 asset 結構 對于管理復雜的 3D 場景至關重要。Modularity 是一個關鍵原則,涉及將 asset 分解為較小的可重復使用組件,并 使用 composition arcs 。Python 具有面向對象的特性,非常適合開發模塊化和可重復使用的代碼,有助于復雜的 asset 管理。
想要直接體驗構建資產和提高工作流效率?查看免費的 DLI 課程:學習 OpenUSD:資產結構原則和內容聚合。
創建場景創作工具
Python 支持創建針對特定工作流程定制的自定義工具,從而簡化 3D 內容創建。這些工具可以與社區共享,從而增強協作。
例如,使用 UsdGeomSphere 架構,您可以使用 Python 定義 Sphere prim。左側腳本將創建名為“simple_scene.usda”的文件(如右側所示),其中包含以下內容:
from pxr import Usd, UsdGeom, Sdf # Create a new stage stage = Usd.Stage.CreateNew("simple_scene.usda") # Define a new Xform prim (transformable object) xform_prim = UsdGeom.Xform.Define(stage, "/MyXform") # Set the translation of the Xform xform_prim.AddTranslateOp().Set( (1, 2, 3) ) # Define a new Sphere prim under the Xform sphere_prim = UsdGeom.Sphere.Define(stage, "/MyXform/MySphere") # Set the radius of the sphere sphere_prim.GetRadiusAttr().Set(5.0) # Save the stage to a file stage.Save()
#usda 1.0 ( defaultPrim = "MyXform" upAxis = Z ) def Xform "MyXform" { double3 xformOp:translate = (1, 2, 3) uniform token[] xformOpOrder = ["xformOp:translate"] def Sphere "MySphere" { double radius = 5 } } 構建自定義腳本和工具的絕佳起點是關于 創建和自定義 Omniverse 擴展程序 的 Learn OpenUSD 課程,在該課程中,您將了解使用 Python 在 Omniverse 中創建原生 OpenUSD 擴展程序的基礎知識。
開發者可以使用 Omniverse Kit SDK ,快速開始使用 OpenUSD 構建自定義場景創作工具。Omniverse Kit SDK 包括 USD 和 UI 框架,以及用于 PhysX、Cloud XR、Audio2Face 和其他庫的 SDK 集成,在此過程中,您可能也會發現這些庫非常有用。
OpenUSD 入門
要在 Python 中試驗 OpenUSD,您可以通過運行 pip install usd-core
快速安裝必要的庫。如需獲得更流暢的開發體驗,請使用 pip install types-usd
為您的 IDE 添加自動完成支持。
有關 OpenUSD 的更多資源,請探索 我們的 OpenUSD 資源 ,點播觀看 NVIDIA GTC 2025 的 OpenUSD 會議 ,并在 Alliance for OpenUSD (AOUSD) 論壇 中與社區互動。
準備好深入了解了嗎? 注冊免費的 Learn OpenUSD 自定進度課程 , 該課程涵蓋基礎知識和實踐工作流 。
要及時了解 OpenUSD 的所有相關信息,請查看 OpenUSD v25.05 版本如何通過 OpenPBR 和 Color Interop Forum 計劃實現更廣泛的材質互操作性。