WWDC Quick Look 💓 By SwiftGGTeam
Explore the USD ecosystem

Explore the USD ecosystem

观看原视频

Highlight

Apple 在 visionOS 上全面采用 USD 作为 3D 内容核心格式,引入 MaterialX 着色器支持、Display P3 色彩管理,并与业界协作推动 OpenUSD 生态发展,让开发者能用行业标准工具链创建空间计算内容。

核心内容

USD:3D 内容的通用语言

USD(Universal Scene Description)由 Pixar 创建,现已更名为 OpenUSD。它是表示 3D 内容的行业标准格式,从个人创作者到大型工作室都在使用。Apple 从 2017 年开始在平台上支持 USD,如今 USD 已成为 visionOS 上 3D 内容的核心格式。

USD 的核心优势在于组合(composition)能力。它允许通过复杂的层级关系表达资产数据,让多人可以并行工作在不同部分,最后组合成完整场景。Reality Composer Pro 正是利用这一特性,让团队成员各自处理场景的不同方面。

MaterialX:可移植的着色器标准

MaterialX 由 Industrial Light & Magic 为《星球大战》项目创建,现由 Academy Software Foundation 维护。它让艺术家通过节点图组合着色器逻辑,无需编写代码。MaterialX 图可以嵌入 USD 文件中,随场景数据一起传输。

visionOS 上的 RealityKit 支持渲染 MaterialX 着色器。Reality Composer Pro 的 Shader Graph 就是基于 MaterialX 节点,同时添加了一些 visionOS 专属节点:

  • RealityKit PBR:基于物理的渲染着色器,实现逼真的 3D 内容
  • RealityKit Unlit:无光照着色器,用于风格化渲染
  • Geometry Modifiers:修改表面几何形变的着色器节点

Apple 为 MaterialX 项目贡献了 Metal 着色器代码生成支持,已在 MaterialX 1.38.7 中发布。这意味着开发者可以在 macOS 上的第三方工具(如 Houdini、Maya)中创作 MaterialX 材质,然后在 visionOS 的 RealityKit 中渲染。

应用层的 3D 支持

Quick Look:visionOS 上的 Quick Look 支持 USDZ 文件的空间预览,用户可以绕着模型走动,将其与周围环境结合。

Freeform:Apple 的白板应用现在支持嵌入 USDZ 内容,跨 macOS、iOS、iPadOS 和 visionOS 协作。

Safari Model 元素:新的 HTML <model> 元素(在开发者菜单中启用)让网页可以嵌入交互式 USDZ 模型,用户可以在页面中旋转查看。Apple 正与 W3C Immersive Web Working Group 合作推进标准化。

色彩管理:从 sRGB 到 Display P3

Apple 显示器主要使用 Display P3 色彩空间,比传统 sRGB 多显示约 25% 的颜色。RealityKit 扩展了色彩空间管理,支持 Display P3 宽色域。

正确标记色彩空间的纹理能展现更深、更饱和的色调。这在对鹦鹉羽毛、鲜艳衣物等真实世界颜色时尤为重要。色彩空间标记还能确保内容在不同设备上显示一致,避免意外的色彩偏移。

USD 生态的行业协作

Hydra Storm + Metal:Apple 与 Pixar 合作为 Hydra Storm 渲染器添加了 Metal 支持。在 Apple Silicon 的统一内存架构下,MacBook Pro 可以流畅处理原本需要 26GB 显存的工作站级场景(如 Animal Logic ALab)。

Blender:Apple 与 Blender Foundation 合作,在 Blender 3.5 中显著改进了 USD 导入导出,首次支持 USDZ 格式。同时引入了 Metal 后端,Eevee 和 Cycles 渲染器在 Metal 下最终渲染速度最高提升一倍,视口渲染在某些场景下比 OpenGL 快 4 倍。

Autodesk Maya:Apple 持续贡献 Maya USD 插件,改进了几何体和材质导出、动画导入等功能。

DaVinci Resolve:Blackmagic Design 利用 Storm 渲染器在 Fusion 中添加了快速的 USD 视口渲染。

RealityKit 的 USD 组件扩展

RealityKit 在 visionOS 上引入了新的 USD Schema 来支持其 ECS(Entity Component System):

  • RealityKitComponent:用于内置组件
  • RealityKitCustomComponent:用于自定义 Swift 组件

Swift 中的结构体和字典可以通过等效的 RealityKit USD Schema 表示。这让自定义组件数据可以与其他 USD Prim(对象)一起存在于场景层级中,任何支持 USD 创作的工具都可以直接编辑。

RealityKit 还在 USD 的 spatialAudio 基础上扩展了 Audio File、Audio File Group 和 MixGroup,创建更沉浸的音频体验。

详细内容

Safari Model 元素

03:24

Safari 新增的 <model> 元素让网页嵌入 3D 内容变得像嵌入图片一样简单:

<model src="path/to/model.usdz" alt="A 3D teapot">
  <img src="fallback.jpg" alt="Teapot photo">
</model>

关键点:

  • 用法与 <audio><video><img> 元素类似
  • 提供交互式 3D 视图,用户可以旋转查看对象
  • 在所有支持 Safari 的 Apple 平台上可用
  • 需要在 macOS 开发者菜单或其他平台的设置中启用
  • Apple 正与 W3C 合作推进标准化

MaterialX 在 Reality Composer Pro 中的应用

04:51

Reality Composer Pro 的 Shader Graph 将 MaterialX 节点嵌入 USD 文件。创作流程:

  1. 在 Reality Composer Pro 中打开 Shader Graph 编辑器
  2. 拖拽 MaterialX 节点组合着色器逻辑
  3. 使用 RealityKit PBR 节点实现基于物理的渲染
  4. 使用 Geometry Modifiers 节点修改表面形变
  5. 预览着色器效果
  6. USD 文件自动包含 MaterialX 节点图

关键点:

  • MaterialX 节点图随 USD 场景一起传输
  • 第三方工具(Houdini、Maya 的 LookdevX)也支持 MaterialX
  • Apple 贡献了 MaterialX 到 Metal 的代码生成器
  • 未来 macOS 上的 USD 也将支持 MaterialX

Display P3 色彩空间的优势

06:42

Display P3 与 sRGB 的对比:

特性sRGBDisplay P3
色域范围标准宽 25%
红色表现较平淡更深更饱和
绿色表现较平淡更 lush
适用场景通用显示器Apple 显示器

关键点:

  • 创建纹理时使用 Display P3 色彩配置文件
  • 确保纹理文件正确标记色彩空间
  • RealityKit 在 visionOS 上支持 Display P3 渲染
  • 色彩空间标记确保内容在不同设备上显示一致

RealityKit 自定义组件的 USD 表示

09:26

Swift 自定义组件:

struct EngagementComponent: Component {
    var engagementPoints: [String: SIMD3<Float>]
    var defaultEngagement: String
}

对应的 USD 表示:

#usda 1.0
def Xform "Entity"
{
    def RealityKitCustomComponent "EngagementComponent"
    {
        uniform token info:id = "MyApp.EngagementComponent"
        string defaultEngagement = "main"
        dictionary engagementPoints = {
            string main = "(0, 1, 0)"
            string secondary = "(1, 0, 0)"
        }
    }
}

关键点:

  • RealityKitCustomComponent 是 USD Schema 类型
  • info:id 标识对应的 Swift 组件类型
  • 字典和数组等 Swift 类型有对应的 USD 表示
  • 自定义组件数据与几何体等其他 Prim 共存于 USD 层级中
  • 任何支持 USD 创作的工具都可以直接编辑这些数据

核心启发

  • 做什么:为电商网站添加 3D 产品预览,让用户在空间中查看商品。

  • 为什么值得做:Safari 的 <model> 元素让网页嵌入 3D 内容变得简单,无需 WebGL 开发。USDZ 格式跨 Apple 平台一致支持。

  • 怎么开始:将产品模型导出为 USDZ 格式,在网页中使用 <model src="product.usdz"> 嵌入,提供 fallback 图片。

  • 做什么:在 3D 内容创作流程中采用 Display P3 色彩空间。

  • 为什么值得做:Apple 显示器支持 Display P3,正确标记色彩空间的纹理能展现更鲜艳真实的颜色。避免内容在不同设备上出现色彩偏移。

  • 怎么开始:在 Blender、Maya 等工具中设置项目色彩空间为 Display P3,导出纹理时保留色彩配置文件,在 Reality Composer Pro 中验证最终效果。

  • 做什么:用 USD 的组合特性组织大型 3D 项目的协作流程。

  • 为什么值得做:USD 的引用和组合机制让多人可以并行工作在不同场景部分,修改自动同步到引用处。Reality Composer Pro 直接支持这种工作流。

  • 怎么开始:将场景拆分为可复用组件(如角色、道具、环境),每个组件单独保存为 USD 文件,在主场景中通过引用组合,团队成员各自负责不同组件。

  • 做什么:为 RealityKit 应用创建自定义组件,并在 USD 中存储组件数据。

  • 为什么值得做:RealityKitCustomComponent Schema 让组件数据可以随 USD 场景一起编辑和传输,无需在代码中硬编码。

  • 怎么开始:定义 Swift Component 协议的结构体,在 USD 文件中使用 RealityKitCustomComponent Schema 存储数据,在应用启动时从 USD 加载并绑定到对应实体。

关联 Session

评论

GitHub Issues · utterances