通用场景描述 (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 计划实现更广泛的材质互操作性。