← 所有文章

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 摆好位置,再写出一个压缩的 exportPackage1
  • 一个坦诚的局限:USDKit「并未提供所有针对特定 schema 的 API」,因此编写无障碍信息意味着先应用 AccessibilityAPI schema,再按规范中定义的名称逐个创建 label 和 description 属性。1
  • 一种全新的 USD primitive 类型 Particle Fields「既能描述 Gaussian Splats,也能描述其他表示形式」,首次把 splats 与网格、材质带入同一个场景。1
  • 网格压缩加上 AVIF 纹理压缩,让素材平均体积缩小到原来的七分之一;您可以通过 exportPackage API、在 Preview 中,或借助 usdcrush 命令行工具获得这一效果。1

今年 OpenUSD 有哪些变化

Watch on Apple Developer ↗

来自 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。

如何上手

这场会议浓缩成一条您今天就能照做的简短路径:

  1. 打开一个 stage。USDStage 初始化方法在内存中创建一个,或在 try 内向 USDStage.open 传入文件 URL 来打开一个已有场景,因为文件访问可能会抛出错误。1
  2. 组合,而非复制。 在您想要的路径上定义一个 transform prim,然后为一个外部 layer 添加轻量引用,这样原作者的更新就会自动流入您的 stage。1
  3. 带着意图定位。 调用 addTransformOperation 来创建正确的属性和 transform 顺序,然后设置平移值。1
  4. 坦诚地编写无障碍信息。 应用 AccessibilityAPI schema,然后按规范定义的名称创建 label 和 description 属性,因为 USDKit 并未提供每一个针对特定 schema 的 API。1
  5. 导出得小巧。 在 stage 上调用 exportPackage 并启用纹理和网格压缩,或者如果您不写代码,就运行 usdcrush1

常见问题

什么是 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 生态系列

参考资料


  1. Apple,WWDC 2026 第 285 场会议,Discover USDKit and what’s new in OpenUSD。本文以下内容的来源:OpenUSD 基础更新(MaterialXOpenVDB、第一份正式的 USD 核心规范以及 Alliance for OpenUSD 成员身份)、描述 Gaussian Splats 及类似表示形式的 Particle Fields primitive 类型、USDKit 框架及其与 RealityKit 和 Spatial Preview 的集成、layer/stage/prim/schema 概念、打开-修改-导出循环(USDStage 初始化方法、配合 tryUSDStage.open、Composition 引用、addTransformOperationexportPackage)、无障碍工作流(AccessibilityAPI schema、按名称编写 label 和 description 属性,以及 USDKit「并未提供所有针对特定 schema 的 API」这一陈述)、网格与 AVIF 纹理压缩(网格最多缩减 90%、素材平均体积缩小到原来的七分之一,通过 exportPackage、Preview 或 usdcrush 实现)、Preview 的渲染器选择(RealityKit、Storm、Raytracer)以及相对 USDPreviewSurfaceOpenPBR、macOS 27 上的 Spatial Preview 框架、Safari 的 Model 标签,以及 SwiftUSD 和 C++ 框架替代方案。 

相关文章

Apple Swift 团队在 WWDC26 实验室里说了什么

Apple 的 WWDC26 Swift Group Lab 没有字幕,我们在本地完成了转录。工程师就并发、~Sendable 与技术路线图给出的坦率回答。

4 分钟阅读

2026 年的 RealityKit 与 Reality Composer Pro 3

WWDC26 让 Apple 的空间流程趋于成熟:RealityKit 新增光照与布料模拟,并推出具备实时预览与 Xcode 插件的独立版 Reality Composer Pro 3。

3 分钟阅读

The Robots Are Taking Exams in My Search Console

First-party GSC data: 91% of 3.8M impressions fail a human-query filter. Exam questions, pasted errors, and agent sweeps…

10 分钟阅读