USDKit:Apple 平台上的 Swift 原生 OpenUSD
在 WWDC 2026 上,一位 Apple 工程师在 Swift 中打开了一个 3D 场景,注意到工作台上缺少一台示波器,于是把该素材作为轻量引用拉了进来、移动到位、为辅助技术添加了标注,最后把整个场景导出,体积缩小到原来的七分之一——这一切只用了寥寥几行代码。1 那段演示正是 USDKit 的核心主张:Apple 如今提供了一个系统框架,让 OpenUSD 成为一流的 Swift API,而不再是需要手动绑定的 C++ 库。您加载一个 stage、把素材组合在一起、在 prim 上编写数据,再导出一个压缩包,全程使用 Swift 开发者早已熟悉的模式。
本文沿着 WWDC 2026 第 285 场会议「Discover USDKit and what’s new in OpenUSD」梳理 USDKit 的来龙去脉。以下内容均直接来自那场会议。
TL;DR
USDKit为 Swift 应用带来一流的 USD 支持,「内置了与 RealityKit 和 Spatial Preview 的深度集成」,无论是既有的 USD 开发者还是 Swift 新手,它都能各取所需。1- 核心循环就是打开、修改、导出:用
USDStage的初始化方法创建一个 stage,或用USDStage.open打开一个(它会抛出错误,所以要用try),通过 Composition 引用素材,用addTransformOperation摆好位置,再写出一个压缩的exportPackage。1 - 一个坦诚的局限:
USDKit「并未提供所有针对特定 schema 的 API」,因此编写无障碍信息意味着先应用AccessibilityAPIschema,再按规范中定义的名称逐个创建 label 和 description 属性。1 - 一种全新的 USD primitive 类型
Particle Fields「既能描述 Gaussian Splats,也能描述其他表示形式」,首次把 splats 与网格、材质带入同一个场景。1 - 网格压缩加上 AVIF 纹理压缩,让素材平均体积缩小到原来的七分之一;您可以通过
exportPackageAPI、在 Preview 中,或借助usdcrush命令行工具获得这一效果。1
今年 OpenUSD 有哪些变化
来自 Apple Spatial Standards 团队的 Lee 在 7:00 处、紧接着 OpenUSD 基础更新之后介绍了 USDKit。
USD 是 Apple 所构建的空间体验的骨干,而其背后的开源项目 OpenUSD 最初由 Pixar 开创。1 USD 并非孤军奋战。它与 MaterialX(最初由 Lucasfilm 用于材质描述)集成,今年还新增了 OpenVDB(最初来自 DreamWorks),把体数据也纳入其中。1 今年 Apple 在各个平台上更新了这三者,作为 Academy Software Foundation 的成员,它直接为 MaterialX 和 OpenVDB 等项目做出贡献。1
标准化工作比代码层面更为深入。作为 Alliance for OpenUSD 的创始成员,Apple「帮助发布了 USD 核心的第一份正式规范,针对几何、材质和物理的领域规范也已在制定中」。1 这些工作组都是开放的,会议向开发者发出的号召是:如果想在行业如何交换 3D 内容这件事上拥有发言权,就参与进来。
在 primitive 层面最引人注目的消息是 Particle Fields。Gaussian Splats 把一个场景捕捉为「数以百万计、相互重叠的模糊粒子,每个粒子都编码了位置、颜色和不透明度,从而忠实重建复杂的真实世界环境」。1 Apple 与包括 NVIDIA、Adobe 和 Pixar 在内的 Alliance for OpenUSD 合作伙伴一道,引入了 Particle Fields 这一全新的 USD primitive 类型,它「既能描述 Gaussian Splats,也能描述这一快速演进的研究领域中的其他表示形式」。1 实际收益是:splats 如今「首次得以与您的网格、材质和其他传统 3D 数据共处同一个场景」。1 这一定位是刻意保持谦逊的。Particle Fields 描述的是 splats 及类似的表示形式;它是一个面向演进中研究领域的容器,而非一份成熟的 splat 渲染器规范。
USDKit 的心智模型
USDKit 为 Swift 应用带来一流的 USD 支持,内置了与 RealityKit 和 Spatial Preview 的深度集成,其设计目标双向兼顾:已经懂 USD 的开发者会觉得概念似曾相识,而初次接触 USD 的 Swift 开发者也能得到他们早已熟悉的模式与范式。1
几个 USD 概念为这套 API 奠定了基础。Layer 是单个数据文件。Layer 通过一项名为 Composition 的功能组合在一起,而 Stage 则是「一个或多个 layer 组合后的结果」,是您观察整个场景的窗口。1 场景中的一切都是 USD Prim。每个 prim 都有一个定义其类型的 Schema,外加「持有实际数据」的 Attributes,以及「描述 prim 自身相关信息」的 Metadata。1 layer、stage、prim、schema 这四个词,撑起了后续的整个工作流。
打开、修改、导出
会议演示了一个具体的循环:加载一个 stage、做出修改、导出结果。1
您可以用「一个简单的 USDStage 初始化方法」在内存中创建一个全新的 stage。1 若要处理一个已有的场景,则通过向 USDStage.open 传入文件 URL 来打开它。由于这涉及文件访问,「它可能会抛出错误,所以我用了 try」。1 场景加载完成后,工程师遍历 stage 的层级结构寻找缺失的示波器,结果一无所获,于是「在我希望它存在的路径上定义了一个新的 transform prim」。1
Composition 正是这套设计真正发挥价值之处。您不必把素材的数据复制进 stage,而是「为它添加一个轻量引用」。1 该素材存在于它自己的文件(即 layer)中,由别人编写,您把它拉进来:「每个人各自处理场景中的自己那一块,USD 再把它们整合到一起」,而且原作者所做的任何更新「也会自动出现在我的 stage 中,因为我只是引用了他们的文件」。1
为被引用的素材定位时要用 addTransformOperation,它「会负责在 prim 上创建正确的属性,并自动更新 transform 的顺序」。1 之后工程师设置了平移值,素材便移动到工作台上。这种模式之所以重要,是因为它把意图(移动这个 prim)与「存在哪些 transform 属性、以何种顺序排列」这类记账工作分离开来。
编写无障碍信息,以及一个坦诚的局限
Apple「直接在 USD 中推动了无障碍元数据的标准化」,确立了 3D 对象上的辅助 label 和 description 在全行业范围内的定义方式,并以足够的灵活性构建,使其能够不断演进。1 由于这些元数据原生于 USD,「您可以通过任何 USD API 来编写它」,Apple 还在 Blender 和 Maya 中加入了直接支持,以降低采用门槛。1
下面这个注意事项值得直白地讲清楚。要添加无障碍数据,您需要先把 AccessibilityAPI schema 应用到 prim 上,这会添加用于标示该 schema 存在的元数据。然后,用会议中的原话来说,「由于 USDKit 并未提供所有针对特定 schema 的 API,我直接创建 label 和 description 属性,并确保使用规范中定义的正确属性名」。1 因此,USDKit 给了您一个 Swift 原生的方式去触及 USD,但它并不会为每一个 schema 都包装出一套带类型的 API。对于它未覆盖的 schema,您要按名称编写属性,并要自行负责对照规范把这些名称写对。请把 USDKit 视为通往 USD 的一扇一流大门,而不是对每个 schema 都提供完整类型覆盖的保证。
内置于导出调用中的压缩
高质量的生产级 USD 场景「体积可能膨胀到许多 GB」,演示中的 ALab 场景就是一个活生生的例子。1 Apple 与 Alliance for Open Media 合作,加入了「一种最先进的网格压缩编解码器,能够将网格体积最多缩减 90%」。1 结合既有的 AVIF 纹理压缩,「素材平均体积如今缩小到原来的七分之一,且不损失视觉质量」。1
这个编解码器位于工作流内部,而非置于其旁。压缩支持「直接内置于 exportPackage API 中」:您向 stage 上的 exportPackage 方法传入输出 URL,再通过导出选项启用纹理和网格压缩。1 如果您不写代码,「也可以直接在 Preview 中,或通过 usdcrush 命令行工具获得同样的结果」。1 Apple 正与 Pixar 合作,把这种压缩带入 OpenUSD 项目,让整个生态都能受益。1
USDKit 与平台其余部分的交汇点
这个框架所驱动的体验远不止于单个应用。Mac 上的 Preview 如今能做关键的 3D 编辑,而 Preview 和 Quick Look「为您提供渲染器的选择」:RealityKit「在 Mac、iPhone、iPad 和 Vision Pro 之间带来一致性」,Storm「对于有既有生产流水线需求的人仍然可用」,而一个全新的 Raytracer 则面向最复杂的场景,提供精确的反射、精准的阴影和物理正确的光照。1 这三种渲染器都支持 OpenPBR,它是「相对 USDPreviewSurface 的一次重大升级,为您的工作流带来更丰富、物理上更精确的材质」。1
Preview 与 macOS 27 上全新的 Spatial Preview 框架集成,在您的 Mac 与 Vision Pro 上的 Quick Look 之间建立了直接连接,让编辑结果实时呈现在您的空间中,而 SharePlay 则能把整个团队带入同一个场景。1 在 Web 端,Safari 引入了 Model 标签,用来嵌入一个 USD 模型,它在 macOS 和 iOS 上可交互地渲染,而在 visionOS 上则「冲破页面,以空间方式直接呈现在用户的空间里」。1
USDKit 是 Apple 平台上应用开发者的推荐路径,因为它由系统提供且深度集成,会议中其余的体验都构建于它之上。1 对于超出 USDKit 覆盖范围的高级或跨平台需求,SwiftUSD 通过 Swift Package Manager 提供开源的 Swift 绑定,而 C++ 代码库则可以把 OpenUSD 直接作为框架嵌入。这三者都建立在同一基础之上,因此「您的 USD 文件可以在它们之间自由流转」。1
有一点区别值得记住:这是编程式的路径。在可视化工具中手工编写场景是 Reality Composer Pro 的活儿(参见 RealityKit 与 Reality Composer Pro 的心智模型);而当真正干活的是代码而非画布时,USDKit 才是您该使用的 API。
如何上手
这场会议浓缩成一条您今天就能照做的简短路径:
- 打开一个 stage。 用
USDStage初始化方法在内存中创建一个,或在try内向USDStage.open传入文件 URL 来打开一个已有场景,因为文件访问可能会抛出错误。1 - 组合,而非复制。 在您想要的路径上定义一个 transform prim,然后为一个外部 layer 添加轻量引用,这样原作者的更新就会自动流入您的 stage。1
- 带着意图定位。 调用
addTransformOperation来创建正确的属性和 transform 顺序,然后设置平移值。1 - 坦诚地编写无障碍信息。 应用
AccessibilityAPIschema,然后按规范定义的名称创建 label 和 description 属性,因为 USDKit 并未提供每一个针对特定 schema 的 API。1 - 导出得小巧。 在 stage 上调用
exportPackage并启用纹理和网格压缩,或者如果您不写代码,就运行usdcrush。1
常见问题
什么是 USDKit?
USDKit 是 Apple 新推出的系统框架,为 Swift 应用带来一流的 OpenUSD 支持,内置了与 RealityKit 和 Spatial Preview 的深度集成。它通过 Swift 模式暴露 USD 概念(layer、stage、prim、schema),让您无需手动绑定 C++ 库就能打开 stage、组合素材、编写数据并导出。Apple 推荐它作为其平台上应用开发者的起点。1
我如何用 USDKit 加载和修改一个 USD 场景?
在 try 内向 USDStage.open 传入文件 URL 来打开一个场景(文件访问可能会抛出错误),或用 USDStage 初始化方法创建一个全新的 stage。要添加一个外部素材,请定义一个 transform prim 并为它的 layer 添加轻量引用,而不是复制它的数据。通过调用 addTransformOperation 来定位它,该方法会设置好正确的属性和 transform 顺序,然后设置平移值。1
USDKit 覆盖每一个 USD schema 吗?
不。会议直白地表示,USDKit「并未提供所有针对特定 schema 的 API」。以无障碍为例,您要应用 AccessibilityAPI schema,然后直接编写 label 和 description 属性,并使用规范中定义的确切属性名。USDKit 是通往 USD 的一扇 Swift 原生大门,而非环绕每个 schema 的带类型封装。1
OpenUSD 中的 Particle Fields 和 Gaussian Splats 是什么?
Particle Fields 是 Apple 与包括 NVIDIA、Adobe 和 Pixar 在内的 Alliance for OpenUSD 合作伙伴一起引入的一种全新 USD primitive 类型。它「既能描述 Gaussian Splats,也能描述」这一研究领域中的其他表示形式。Gaussian Splats 把一个场景捕捉为数以百万计、相互重叠、编码了位置、颜色和不透明度的粒子。Particle Fields 让 splats 首次得以与网格和材质共处同一个场景。1
USDKit 能把一个 USD 素材压缩到多小?
一种与 Alliance for Open Media 共同打造的网格压缩编解码器可将网格体积最多缩减 90%,结合 AVIF 纹理压缩,素材平均体积约为原来的七分之一,且不损失视觉质量。可通过 exportPackage API、在 Preview 中,或用 usdcrush 命令行工具启用纹理和网格压缩。1
USDKit 是 RealityKit 与 Reality Composer Pro 心智模型 中可视化编写故事的编程式对应物,它供给的正是那些驱动 visionOS 27 新功能 和更宏观的 RealityKit 空间心智模型 的场景。在 Web 一侧,同样的 USD 素材通过 Safari 今年引入的 原生 HTML <model> 元素 渲染。整个系列的入口是 Apple 生态系列。
参考资料
-
Apple,WWDC 2026 第 285 场会议,Discover USDKit and what’s new in OpenUSD。本文以下内容的来源:OpenUSD 基础更新(
MaterialX、OpenVDB、第一份正式的 USD 核心规范以及 Alliance for OpenUSD 成员身份)、描述 Gaussian Splats 及类似表示形式的Particle Fieldsprimitive 类型、USDKit框架及其与 RealityKit 和 Spatial Preview 的集成、layer/stage/prim/schema 概念、打开-修改-导出循环(USDStage初始化方法、配合try的USDStage.open、Composition 引用、addTransformOperation、exportPackage)、无障碍工作流(AccessibilityAPIschema、按名称编写 label 和 description 属性,以及 USDKit「并未提供所有针对特定 schema 的 API」这一陈述)、网格与 AVIF 纹理压缩(网格最多缩减 90%、素材平均体积缩小到原来的七分之一,通过exportPackage、Preview 或usdcrush实现)、Preview 的渲染器选择(RealityKit、Storm、Raytracer)以及相对USDPreviewSurface的OpenPBR、macOS 27 上的Spatial Preview框架、Safari 的 Model 标签,以及SwiftUSD和 C++ 框架替代方案。 ↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩↩