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 尚未正式发布,现在就可以开始准备:
- 新项目使用 Unity 2022 或更高版本
- 现有项目升级到 Unity 2022
- 手写 Shader 转换为 Shader Graph
- 考虑采用 Universal Render Pipeline(内置管线仍受支持,但未来的改进都在 URP 上)
- 使用 Input System package(混合输入模式受支持,但平台事件只通过 Input System 传递)
Volume Camera 配置示例
在 Unity 场景中配置 Volume Camera 的关键步骤:
- 在场景中添加 Volume Camera 组件
- 选择 Bounded 或 Unbounded 模式
- 对于 Bounded 模式,设置尺寸(Dimensions)和变换(Transform)
- 在 Scene View 中可以看到绿色的 Volume 预览框
- 通过调整 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
- Bring your Unity VR app to a fully immersive space — 将现有 Unity VR 应用迁移到 visionOS 完全沉浸式空间
- Build great games for spatial computing — 空间计算游戏开发技术概览
- Go beyond the window with SwiftUI — SwiftUI 空间场景类型详解
评论
GitHub Issues · utterances