文件格式插件#

什么是 SdfFileFormat 插件?#

在 OpenUSD 框架中,Sdf 代表场景描述基础(Scene Description Foundations)。它是处理场景数据序列化和组合的底层架构。SdfFileFormat 插件是一个能够让 USD 读取和写入特定文件格式的组件。

默认情况下,USD 附带了其自身格式(.usda, .usdc, .usdz)的插件,社区也创建了多个插件扩展,例如 Adobe 文件格式插件

MJCF SdfFileFormat 插件允许支持 USD 的应用程序直接理解并交互 MuJoCo 的原生 .xml (MJCF) 文件,就像操作原生 USD 文件一样。

它有什么作用?#

该插件实现了以下功能:

  1. 在 USD 中引用 MJCF 文件: 使用标准的 USD 组合弧(如 references、payloads)将 MJCF 文件直接包含在更大的 USD 场景中。例如,您可以将一个在 .xml 文件中定义的 MuJoCo 机器人放置到 USD 建模的房间场景中。

  2. 在 USD 工具中加载 MJCF 文件:usdview 或其他基于 USD 的应用程序可以打开、检查并渲染 MJCF 文件,在运行过程中将 MJCF 元素转换为 USD prims 和属性。

  3. 将 MJCF 转换为 USD: 该插件可用作将 MJCF 文件转换为持久化 USD 文件(例如 .usda.usdc)的基础。

从本质上讲,它使 MJCF 成为了 USD 生态系统中的“一等公民”。

用法#

  1. 安装: 请参考 构建(Building)

  2. 在 USD 文件中进行引用(例如 ``.usda``)

    example.usda#
    #usda 1.0
    (
        upAxis = "Z"
    )
    
    def Xform "world"
    {
        def "robot" (
            prepend references = @./my_robot.xml@
        )
        {
        }
    }
    

    在此示例中,my_robot.xml 是同一目录下的 MJCF 文件。USD 将使用该插件来加载并解释其内容。

  3. 在 usdview 中打开

    usdview my_robot.xml
    

    如果插件配置正确,usdview 将会渲染 MJCF 文件中定义的机器人。

  4. 在 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(f"Successfully 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 环境的无缝集成。