资讯详情

MuJoCo OpenUSD 集成完全指南:USD 导入、mjcPhysics 物理 Schema、MJCF 文件格式插件与 USD 导出

📅 2026/9/14 5:14:37 | 华诺云谱 👁 阅读
MuJoCo OpenUSD 集成完全指南:USD 导入、mjcPhysics 物理 Schema、MJCF 文件格式插件与 USD 导出
MuJoCo OpenUSD 集成完全指南USD 导入、mjcPhysics 物理 Schema、MJCF 文件格式插件与 USD 导出【免费下载链接】mujocoMulti-Joint dynamics with Contact. A general purpose physics simulator.项目地址: https://gitcode.com/GitHub_Trending/mu/mujocoMuJoCo 通过实验性的 OpenUSDUSD, Universal Scene Description支持打通了与 3D 内容创作工具链Houdini、Maya、Blender、Omniverse 等之间的资产互操作通道。读完本文你将掌握如何在 MJCF 中以model content_typetext/usd/加载.usd/.usda/.usdc/.usdz资产如何构建并启用 MuJoCo 的 USD 支持MUJOCO_WITH_USD构建开关mjcPhysics自定义 Schema 各 API 的类型划分与含义MJCFSdfFileFormat文件格式插件如何让 USD 原生工具直接打开 MJCF 文件以及当前 USD 导出的可行路径USDExporter与mujoco-usd-converter。注意MuJoCo 的 OpenUSD 支持目前处于实验阶段接口和实现变动频繁原文档每页顶部均带有该 WARNING 提示。1. OpenUSD 是什么为什么 MuJoCo 需要它USD 是 Pixar 开发的高性能、可扩展的 3D 场景描述、组合、模拟与协作框架如今已广泛应用于视觉特效、动画、游戏和机器人等行业充当不同软件之间交换 3D 场景信息的“通用语言”。MuJoCo 集成 USD 的核心价值在于三点互操作性InteroperabilityUSD 被广泛的 3D 内容创作工具Houdini、Maya、Blender 等支持MuJoCo 用户可以方便地导入在这些工具中创建的资产与场景丰富的场景描述Rich Scene DescriptionUSD 能以强有力且灵活的方式表达复杂场景——几何、材质、光照、层级结构协作CollaborationUSD 的层级化layering与组合composition特性支持强大的非破坏性编辑流水线。MuJoCo 的集成允许用户充分利用 USD 的丰富生态与工具链。2. USD 支持总览能力地图MuJoCo 的 USD 支持由五个部分组成对应仓库中不同的实现模块能力说明实现位置Import导入通过 MJCF 引用或拖拽到simulate加载.usd/.usda/.usdc/.usdz资产MJCF 插件、simulate 主程序Schemas标准 Schema主要使用标准的 UsdPhysics Schema 表达物理属性解析逻辑位于 src/experimental/usdExtensions扩展 Schema自定义mjcPhysicsSchema 覆盖 UsdPhysics 中不存在的 MuJoCo 特性mjcPhysics Schema 定义、生成的代码MJCF 文件格式插件让任何 USD 原生应用把 MJCF 文件当作 USD 图层处理mjcf_file_format.ccExport导出将 MuJoCo 场景导出为 USDpython/mujoco/usd/exporter.py3. 构建与启用 USD 支持MuJoCo 需要针对一个预构建的 USD 库进行编译。官方提供了辅助 CMake 项目来简化这一步骤同时也允许你自带 USD 库。以下命令假设 MuJoCo 克隆在~/mujoco构建目录为~/mujoco/build。3.1 构建 USD 本体如果已有预构建的 USD 库可跳过此节。MuJoCo 自带一个 CMake 工程见 openusd.cmake它只会下载并构建 USD 所必需的功能子集cd ~/mujoco cmake -Bcmake/third_party_deps/openusd/build cmake/third_party_deps/openusd cmake --build cmake/third_party_deps/openusd/build如需自定义构建流程也可以用 USD 官方的build_usd.py脚本建议使用位于克隆仓库之外的独立安装目录git clone https://github.com/PixarAnimationStudios/OpenUSD python OpenUSD/build_scripts/build_usd.py /path/to/my_usd_install_dir3.2 启用 MuJoCo 的 USD 支持若 USD 是通过cmake/third_party_deps/openusd项目构建的直接用MUJOCO_WITH_USD开关即可cd ~/mujoco cmake -Bbuild -S. -DMUJOCO_WITH_USDTrue cmake --build build -j 64若使用自带BYO的预构建 USD 库则必须额外传递pxr_DIR指向安装目录cd ~/mujoco cmake -Bbuild -S. -DMUJOCO_WITH_USDTrue -Dpxr_DIR/path/to/my_usd_install_dir cmake --build build -j 64构建完成后运行simulate即可直接拖拽 USD 文件进窗口查看simulate3.3 源码侧的实现佐证从源码结构看实验性 USD 支持集中在 src/experimental/usd 目录下按功能拆分为mjcPhysics/——mjcPhysicsSchema 的完整定义schema.usda、generatedSchema.usda及由usdGenSchema预生成的 C 绑定按 Schema 类型逐文件组织actuator.cpp、sceneAPI.cpp、jointAPI.cpp、tendon.cpp、keyframe.cpp、materialAPI.cpp、collisionAPI.cpp、siteAPI.cpp、imageableAPI.cpp、各种equality*API.cpp等插件元信息见 plugInfo.jsonplugins/mjcf/——MJCFSdfFileFormat文件格式插件核心是 mjcf_file_format.cc 与 MJCF→USD 转换逻辑 mujoco_to_usd.ccwriter.cc、layer_sink.cc、utils.cc——USD 图层写入与通用工具。对应的构建条件在 src/experimental/usd/CMakeLists.txt 中声明。4. USD 导入在 MJCF 中引用 USD 资产构建出启用 USD 的 MuJoCo 后可以在 MJCF 中通过model标签并指定content_typetext/usd来引用 USD 资产mujoco asset model filechair.usdz namechair content_typetext/usd/ /asset worldbody ... /worldbody /mujoco其中model filechair.usdz/这一行告诉 MuJoCo 加载并处理该 USD 文件。支持的扩展名包括.usd、.usda、.usdc、.usdz除 MJCF 引用外也可以直接把文件拖入simulate窗口加载。5. mjcPhysicsMuJoCo 的自定义物理 SchemamjcPhysics是 MuJoCo 提供的 USD Schema用于在 USD 文件中直接、完整地描述 MuJoCo 模拟环境。其设计目标不是取代 UsdPhysics而是在标准 UsdPhysics 概念之上做扩展只在新类型确有必要时才创建。该 Schema 既支持 codeless 方式使用也可使用其 C 绑定构建MuJoCo 已通过usdGenSchema预生成代码src/experimental/usd/mjcPhysics供内部使用但也可以在 MuJoCo 之外的原生 USD 应用如 Omniverse、Houdini、Maya中工作。5.1 API SchemasAPI Schema 施加在已有 prim 上为它们附加语义与属性MjcSceneAPI——提供 MuJoCo 模拟的全局选项本质上是 MJCF 中option、option/flag、compiler三个元素的合并体应施加在已有的UsdPhysicsSceneprim 上。关键命名空间属性mjc:option——映射到option元素mjc:flag——映射到option/flag元素mjc:compiler——映射到compiler元素。MjcSiteAPI——定义 MuJoCo site可施加在UsdGeomSphere、UsdGeomCapsule、UsdGeomCylinder、UsdGeomCube上。MjcImageableAPI——为“纯视觉实体”提供属性按 MuJoCo 的术语即contype conaffinity 0的几何。MjcCollisionAPI——施加在表示碰撞几何的 prim 上应与UsdPhysicsCollisionAPI一起使用。MjcMeshCollisionAPI——施加在网格碰撞几何上应与UsdPhysicsMeshCollisionAPI一起使用。MjcJointAPI——施加在UsdPhysicsJointprim 上补充完整描述 MuJoCo 关节所需的额外属性。MjcMaterialAPI——提供物理材质属性是UsdPhysicsMaterialAPI的扩展。5.2 Type SchemasType Schema 是独立的 prim 类型MjcActuator——表示 MuJoCo 执行器通过 USD 的 relationship 指定施加力的传动目标关节、body 或 site。官方明确说明未复用UsdPhysicsDriveAPI因为后者更接近运行时构造概念映射并不贴合。MjcKeyframe——保存特定时刻的模拟器状态张量值对应 MJCF 的keyframe元素。与 MJCF 不同USD 侧用timeSamples机制表达时间属性keyframe 中数值的顺序应按组合后 stage 中刚体的深度优先遍历顺序排列。MjcTendon——同时表达固定肌腱fixed tendon与空间肌腱spatial tendon对应 MJCF 的tendon。肌腱路径由mjc:pathrelationship 属性中有序的目标列表表示由于 USD 的 relationship 上不像 MJCF 那样可以优雅地为每个路径目标附加sidesite、divisor等参数这些参数被改造成索引化数组属性如mjc:sideSites、mjc:path:divisors。Schema 的具体声明可参考 schema.usda 与 generatedSchema.usda各类型的属性读取与模型填充实现见同目录下同名.cpp文件如 actuator.cpp、sceneAPI.cpp。6. MJCF 文件格式插件让 USD 工具直接打开 MJCF在 OpenUSD 框架中SdfScene Description Foundations是负责场景数据序列化与组合的底层SdfFileFormat插件则是教会 USD 读写某种特定文件格式的组件。USD 自带.usda/.usdc/.usdz的插件社区也有 Adobe 等第三方文件格式插件。MuJoCo 的 MJCFSdfFileFormat插件实现于 mjcf_file_format.cc插件元信息见 plugInfo.json让支持 USD 的应用能够把 MuJoCo 原生.xmlMJCF文件当作 USD 图层来理解与交互。它带来三种能力在 USD 中引用 MJCF 文件用标准 USD 组合弧references、payloads 等把 MJCF 文件直接嵌入更大的 USD 场景例如把.xml定义的 MuJoCo 机器人放进一个 USD 建模的房间里在 USD 工具中打开 MJCF 文件usdview等工具可以打开、检查、渲染 MJCF 文件插件会把 MJCF 元素即时翻译成 USD prim 与属性把 MJCF 转换为持久 USD 文件该插件也可以作为将 MJCF 转换为.usda/.usdc的基础。6.1 实操示例前置条件已按第 3 节完成构建安装步骤见前文。在.usda中引用 MJCF 文件my_robot.xml为同目录下的 MJCF 文件USD 会通过插件加载并解释其内容#usda 1.0 ( upAxis Z ) def Xform world { def robot ( prepend references ./my_robot.xml ) { } }在 usdview 中直接打开usdview my_robot.xml插件配置正确时usdview将直接渲染 MJCF 中定义的机器人。在 Python 中用 USD API 打开from pxr import Usd # Load an MJCF file as a USD stage stage Usd.Stage.Open(my_robot.xml) if stage: print(fSuccessfully opened {stage.GetRootLayer().identifier}) # You can now inspect the stage as any other USD stage for prim in stage.TraverseAll(): print(prim.GetPath()) else: print(Failed to open MJCF file)这个插件显著增强了 MuJoCo 与 USD 工作流之间的互操作性使得以 MJCF 定义的物理资产能够无缝融入更广泛的 3D 环境——本质上让 MJCF 成为 USD 生态中的一等公民。7. USD 导出目前将 MuJoCo 场景导出为 OpenUSD 仍处于积极开发中主要导出途径预期是 Python API。USDExporter当前从 MuJoCo 导出 USD 的唯一方式是使用现有的USDExporterPython API实现位于 python/mujoco/usd/exporter.py配套模块包括 objects.py、shapes.py、camera.py、lights.py测试见 exporter_test.py。官方正在开发将模拟作为动画写入现有 USD 场景的原生支持。mujoco-usd-converter若要将既有 MJCF 资产转换为符合严格创作规范的 USD官方推荐 Newton 项目提供的mujoco-usd-converter工具。转换出的资产不再引用原始 MJCF 文件而是使用mjcPhysicsSchema 来忠实表达源资产。打开这些资产时其效果应与 MJCF 文件格式插件生成的类似但没有运行时将 MJCF 转换为 USD 的开销。8. 延伸阅读深入理解 USD 本身的入门资料Remedy 的 USD 教程书USD Book、OpenUSD 官方文档API 与实现细节、Pixar 的 USD 入门示例以及 NVIDIA 侧的 USD 资产结构资源可从 OpenUSD 社区与官方渠道获取。本仓库中与 USD 相关的实现与测试入口src/experimental/usdSchema 与插件、python/mujoco/usdPython 导出器、test/experimental/usd实验性 USD 测试。9. 要点回顾MuJoCo 的 OpenUSD 支持是实验性特性覆盖导入MJCFmodel content_typetext/usd/与拖拽→ 物理 SchemaUsdPhysics mjcPhysics 扩展→ MJCF 文件格式插件 → 导出USDExporter / mujoco-usd-converter的完整链路构建时需要预构建的 USD 库用仓库自带 CMake 工程cmake/third_party_deps/openusd或pxr_DIR指定自建库再以-DMUJOCO_WITH_USDTrue配置 MuJoComjcPhysicsSchema 采用“API Schema 扩展 UsdPhysics Type Schema 补齐 MuJoCo 独有概念执行器、keyframe、tendon”的设计其属性命名空间mjc:option/flag/compiler等与 MJCF 元素一一对应MJCF 文件格式插件把.xml变成 USD 图层是双向互操作的关键——它不仅让 MuJoCo 读 USD也让 USD 世界读 MJCF并可通过 converter 消除运行时转换开销。【免费下载链接】mujocoMulti-Joint dynamics with Contact. A general purpose physics simulator.项目地址: https://gitcode.com/GitHub_Trending/mu/mujoco创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。