WWDC Quick Look 💓 By SwiftGGTeam
Create immersive Unity apps

Create immersive Unity apps

观看原视频

Highlight

Unity 与 Apple 合作两年,通过 PolySpatial 技术将 Unity 内容翻译为 RealityKit 可渲染的格式,让开发者用熟悉的 Unity 工具链为 visionOS 的 Shared Space 创建沉浸式应用,支持 Shader Graph、物理模拟、角色动画和全新的 Volume Camera 概念。

核心内容

从 Unity 到 visionOS 的桥梁

Unity 是数万个应用的选择。Apple 与 Unity 合作两年,目标很明确:让 Unity 开发者用熟悉的工具为 visionOS 构建内容。

00:15)两种主要路径可选。一是在 Shared Space 中混合虚拟内容与现实世界,使用穿透(passthrough)功能;二是创建完全沉浸式的体验。本 session 聚焦第一种路径。

PolySpatial:Unity 到 RealityKit 的翻译层

02:56)Shared Space 中的所有内容都由 RealityKit 渲染。Unity 创建了 PolySpatial 来处理这个翻译工作。

PolySpatial 翻译的内容包括:

  • 材质(Materials)
  • 常规网格和蒙皮网格渲染
  • 粒子效果和精灵
  • Unity 模拟功能:物理、动画、时间轴、寻路、NavMesh、自定义 MonoBehaviours

材质翻译的三类支持

03:31

物理基础材质直接映射到 RealityKit 的 PhysicallyBasedMaterial。使用 URP 的 Lit、Simple Lit、Complex Lit Shader,或内置管线的 Standard Shader,都会被翻译。

自定义材质通过 Unity Shader Graph 支持。Shader Graph 被转换为 MaterialX 标准格式,再变成 RealityKit 的 ShaderGraphMaterial。大部分 Shader Graph 节点都已支持。

手写 Shader 不支持直接通过 RealityKit 渲染,但可以通过 RenderTexture 间接使用。

特殊效果材质包括:

  • Unlit Shader:创建不受光照影响的纯色或纹理对象
  • Occlusion Shader:让穿透显示穿过对象,可与世界网格数据配合使用

Volume Camera:控制场景如何进入现实世界

07:50)Volume Camera 是 visionOS 上的新概念,控制 Unity 场景内容如何被带入现实世界。它创建两种 Volume:

Bounded Volume:在 Shared Space 中作为 Volume 存在,有明确的尺寸和变换。用户可重新定位,但不能调整大小。Volume Camera 的尺寸和变换定义了场景中哪些区域会显示在 Volume 内。

Unbounded Volume:在 Full Space 中显示,没有选择整个场景的尺寸限制。它的变换指定了场景单位如何映射到现实单位。同一时间只能有一个 Unbounded Volume Camera 处于活动状态。

输入系统

09:57)visionOS 支持多种输入类型:

  • Look and Tap:凝视内容,手指轻触选择。对象需要配置 input colliders 才能接收事件。最多支持两个同时进行的 tap 动作。在 Unity 中以 WorldTouch 事件形式提供,包含完整的 3D 位置。
  • Hand and Head Tracking:通过 Unity Hands package 获取手部关节数据,通过 Input System 获取头部姿态。仅在 Unbounded Volume 中可用,需要申请权限。
  • ARKit 数据:平面检测、世界网格、图像标记等,通过 AR Foundation 访问。同样只在 Unbounded Volume 中可用。
  • 蓝牙设备:键盘、游戏手柄等,通过 Unity Input System 访问。

Play to Device:实时预览

06:15)PolySpatial 支持 “Play to device” 功能。无需完整构建流程,即可在模拟器或真机上即时预览场景。可以实时调整内容位置、大小,修改材质、纹理和 Shader Graph,测试交互事件。事件会回传到编辑器,方便调试。

详细内容

为 visionOS 准备 Unity 项目

13:48)即使 PolySpatial 尚未正式发布,现在就可以开始准备:

  1. 新项目使用 Unity 2022 或更高版本
  2. 现有项目升级到 Unity 2022
  3. 手写 Shader 转换为 Shader Graph
  4. 考虑采用 Universal Render Pipeline(内置管线仍受支持,但未来的改进都在 URP 上)
  5. 使用 Input System package(混合输入模式受支持,但平台事件只通过 Input System 传递)

Volume Camera 配置示例

在 Unity 场景中配置 Volume Camera 的关键步骤:

  1. 在场景中添加 Volume Camera 组件
  2. 选择 Bounded 或 Unbounded 模式
  3. 对于 Bounded 模式,设置尺寸(Dimensions)和变换(Transform)
  4. 在 Scene View 中可以看到绿色的 Volume 预览框
  5. 通过调整 Volume Camera 的位置、旋转和缩放,控制场景中哪些内容可见

关键点:

  • Volume Camera 的尺寸和变换定义了显示区域
  • 移动或旋转 Volume Camera 会改变可见内容
  • 缩放 Volume Camera 的尺寸会让更多场景内容进入视图
  • Volume 本身的物理尺寸保持不变,只有内部可见内容变化
  • 如果内容会与 Volume 边缘相交,考虑用背面材质填充被裁剪的部分

输入事件处理

WorldTouch 事件的处理逻辑:

// 对象需要有 input colliders 才能接收事件
// 可以从远处凝视并轻触选择
// 也可以直接伸手用手指触碰对象
// 最多支持两个同时进行的 tap

// 在 Unity 中,taps 以 WorldTouch 事件提供
// 类似于 2D tap 事件,但包含完整的 3D 位置

关键点:

  • input colliders 是接收事件的前提条件
  • WorldTouch 事件包含 3D 位置信息
  • 支持远距离凝视选择和近距离直接触摸两种模式
  • 最多两个同时进行的 tap 动作

材质兼容性检查清单

材质类型支持状态说明
URP Lit/Simple Lit/Complex Lit支持翻译为 PhysicallyBasedMaterial
内置 Standard Shader支持翻译为 PhysicallyBasedMaterial
Shader Graph支持转换为 MaterialX -> ShaderGraphMaterial
手写 Shader不支持直接渲染可通过 RenderTexture 间接使用
Unlit Shader支持纯色或纹理,不受光照影响
Occlusion Shader支持用于穿透效果

核心启发

1. 将现有 Unity 游戏移植到 visionOS Shared Space

  • 做什么:把已有的 Unity 手游或独立游戏移植到 visionOS,让它在 Shared Space 中与其他应用共存
  • 为什么值得做:PolySpatial 自动翻译大部分 Unity 功能,现有项目改动量小。Shared Space 意味着用户可以在玩游戏的同时查攻略、聊天
  • 怎么开始:升级到 Unity 2022,将手写 Shader 转为 Shader Graph,为交互对象添加 input colliders,配置 Volume Camera 的 Bounded 模式

2. 构建空间协作工具

  • 做什么:开发一个多人协作的 3D 白板或设计评审工具
  • 为什么值得做:Bounded Volume 允许应用与其他应用并排存在,用户可以从任何角度查看 3D 内容。Play to Device 功能让迭代速度极快
  • 怎么开始:使用 Volume Camera 的 Bounded 模式,利用 Unity 的物理系统和角色导航,通过 WorldTouch 事件处理用户交互

3. 创建手势驱动的 AR 艺术创作应用

  • 做什么:让用户用手势在真实环境中”绘制”3D 内容
  • 为什么值得做:Unbounded Volume + ARKit 平面检测 + 手部追踪的组合,可以实现直接在真实表面上创作。Unity 的粒子系统和物理模拟让效果更生动
  • 怎么开始:切换到 Unbounded Volume,申请手部追踪和 ARKit 权限,使用 AR Foundation 获取平面数据,结合 Unity Hands package 获取关节位置

4. 为教育场景构建沉浸式学习体验

  • 做什么:把抽象概念(如分子结构、历史场景)做成可交互的 3D 模型
  • 为什么值得做:用户可以从任意角度近距离观察内容,Shader Graph 可以创建吸引人的视觉效果,Bounded Volume 适合在课堂环境中与其他学习工具并排使用
  • 怎么开始:在 Reality Composer Pro 中准备 USD 模型,导入 Unity,用 Shader Graph 创建视觉效果,配置 Bounded Volume Camera

关联 Session

评论

GitHub Issues · utterances