1. VisionOS平台概述
Unity 对VisionOS的支持将 Unity 编辑器和运行时引擎的全部功能与RealityKit提供的渲染功能结合起来。Unity 的核心功能(包括脚本、物理、动画混合、AI、场景管理等)无需修改即可支持。这允许游戏和应用程序逻辑像任何其他 Unity 支持的平台一样在VisionOS上运行,目标是允许现有的 Unity 游戏或应用程序能够在不进行更改的情况下引入其逻辑。
对于渲染,visionOS支持是通过RealityKit提供的。网格、材质、纹理等核心功能应该透明地工作。更复杂的特征(例如粒子)会受到限制。目前不支持全屏后期处理和贴花等高级功能,尽管将来可能会改变。有关更多详细信息,请参阅visionOS PolySpatial 要求和限制以及支持的 Unity 功能和组件。
使用 Unity 中的 PolySpatial 构建 VisionOS 平台添加了新功能,以支持在单独设备上运行的 XR 内容创建,同时还具有无缝且有效的开发体验。最重要的是,VisionOS 的 Unity PolySpatial 默认情况下会像任何其他 XR Unity 应用程序一样对现实世界和其他 AR 内容做出反应。
2. visionOS 应用程序类型
Unity 在 VisionOS 上支持多种不同的应用程序类型,每种应用程序类型都有自己的优点:
如果您有兴趣为visionOS创建完全沉浸式虚拟现实(VR)应用程序,请参阅visionOS上的完全沉浸式VR应用程序了解更多信息。
如果您有兴趣为visionOS创建沉浸式混合现实(MR)应用程序,请参阅visionOS上的PolySpatial MR应用程序了解更多信息。这些应用程序是使用Unity新开发的PolySpatial技术构建的,其中应用程序使用Unity进行模拟,但使用VisionOS的系统渲染器RealityKit进行渲染。
如果您有兴趣创建将在visionOS 上的窗口中运行的内容,请参阅visionOS 上的窗口应用程序以获取更多信息。
VisionOS 上的混合现实内容可以采用两种模式之一,我们将其称为“共享”和“独占”模式。
模式 |
描述 |
Share Space |
在“共享”模式下,您的应用程序与共享现实世界空间中活动的任何其他应用程序共存。每个应用程序都有一个或多个有界卷(见下文),但没有无界卷。这些体积的位置和方向(相对和绝对)对于应用程序来说是不透明的。此模式下的输入仅限于通过PolySpatialTouchSpace设备进行的“3D 触摸”机制(请参阅输入)。此外,在此模式下,手部位置、平面或世界网格等 ARKit 信息不可用。 |
Full Space |
在“独占”模式下,除了先前创建的有界体积之外,单个应用程序还通过无界体积(见下文)控制整个视图。在此模式下,应用程序知道其体积的相对位置,可以访问设备的所有 AR 功能,并使用手/关节位置信息直接驱动输入和交互。该应用程序仍然无法移动有界卷或调整有界卷的大小,因此必须依靠用户来确保有界卷不会与无界卷内的有意义的内容重叠。 |
1.Volumes
卷是混合现实平台的一个新概念。应用程序可以创建一个或多个卷以在混合现实空间中显示内容。每个卷都是一个包含 3D 内容的定向盒子。在visionOS中,用户可以独立地在现实空间中移动和缩放卷,但开发人员不能以编程方式移动和缩放卷。Unity 开发人员使用称为“体积相机”的新 Unity 组件与体积进行交互,如下所述。
模式 |
描述 |
有界体积 |
有界体积具有有限的盒形范围。用户可以在世界空间中移动和转换有界体积,但开发人员不能以编程方式移动和转换。目前,有界体积内的 Unity 内容将扩展以填充体积的实际大小。 有界体积中的输入仅限于 PolySpatialTouchSpace 设备提供的“3D Touch”。看输入. |
无限体积 |
在独占模式下运行时,内容呈现单个无界体积,没有任何剪切边缘。该应用程序拥有整个混合现实视图,没有其他应用程序可见。来自同一应用程序的其他有界卷可以与此无界卷共存。 在无限量内,应用程序可以请求访问完整的手部跟踪数据。 |
2.体积相机
VolumeCamera是用户代码和内容与体积和visionOS 模式交互的主要方式。
在visionOS中,用户可以使用窗口来呈现2D或3D内容,或者使用体积来呈现3D内容和对象。Unity 将这些窗口中的应用程序描述为“窗口应用程序”。
默认情况下,如果您构建针对visionOS 平台的Unity 应用程序而未通过XR 插件管理器启用PolySpatial 运行时或visionOS 插件,则您的Unity 内容将成为visionOS 中的窗口应用程序。您可以通过在不启用 PolySpatial Runtime 或 VisionOS 插件的情况下构建面向 VisionOS 平台的 SimpleSamples 来看到这一点。
要检测 VisionOS 上窗口组件内 Unity 应用程序的交互,用户可以利用输入系统包 (com.unity.inputsystem) 提供的“触摸支持”。要了解有关visionOS 上的Windows 组件设计的更多信息,请访问Apple 的visionOS 人机界面指南。
借助 Unity,用户可以利用熟悉的工作流程为 VisionOS构建完全沉浸式体验,包括虚拟现实游戏或完全虚拟环境。如今,Unity 提供了广泛的功能和 API,可用于为 VisionOS 开发完全沉浸式的体验。此类插件包括:
在 Unity 中构建 VR 内容后,只需在 XR 插件管理窗口中选择VisionOS - 完全沉浸式,选择并构建 VisionOS 平台,重新编译本机插件,然后就会生成 Unity XCode 项目文件。从这里开始,您将继续在 XCode 中进行开发过程,在这里您可以探索窗口内容和完全沉浸式内容之间转换等概念。
将 VR 体验移植到 VisionOS
对于希望移植现有 VR 游戏并希望将其作为完全沉浸式体验的用户来说,除了上一节中阐述的构建工作流程之外,您还可以采取一些措施来使过渡更加顺畅。
1. 准备图形
使用通用渲染管线 (URP) –VisionOS 支持 Foveated Rendering,该技术可为 Vision Pro 上的用户提供更高质量的视觉体验。为了利用 Foveated Rendering 功能,我们建议使用 URP,它允许在整个管道中应用 Foveated Rendering。我们还计划将未来的改进重点放在 URP 上。\ **利用单通道实例渲染 – **Unity 的单通道实例渲染现在支持 Metal Graphics API,并将默认启用。这减少了渲染管道某些部分(例如剔除和阴影)的开销,并且还有助于减少以立体方式渲染场景时的 CPU 开销。\ **确保每个像素的深度缓冲区不为零 - **在visionOS上,深度缓冲区用于重投影。为了确保天空盒和着色器等视觉效果完美显示,请确保将某个值写入每个像素的深度。\
2. 使基于控制器的交互适应手部
利用XR Interaction Toolkit (XRI) –借助 VisionOS,人们将用手和眼睛与内容进行交互。XRI 提供了一种高级交互,可以抽象手部跟踪的实现,并可以轻松地在 3D 空间和 3D 空间世界的 UI 中实现悬停、抓取和选择等交互。通过 XRI,您还可以实现输入的视觉反馈,其输入的抽象也使得一次创作即可用于多个平台。\ Dive into Unity Hands package - 如果您希望在输入操作中获得更大的灵活性,Unity 的 Hands 子系统可以通过 Unity Hands 包提供对所有原始手部关节数据的访问。您还可以了解如何利用 Unity Hands 包以获得上述沉浸式体验。
有关将 VR 体验移植到 VisionOS 的更多信息,我们建议观看本指南“将您的 Unity VR 应用程序带入完全沉浸式空间”。
Unity PolySpatial 及其对visionOS 的支持需要Unity 2022.3 (LTS) 或更高版本。 不支持 2022.3 之前的 Unity 版本。
开发人员可以在没有 PolySpatial Beta 的情况下开始使用现有项目,只需将其升级到 2022.3,然后再开始处理 VisionOS 移植。
有关开发设置的更多信息,请参阅开发和迭代
在visionOS上,Unity将所有渲染委托给平台,以便操作系统能够提供最佳性能、电池寿命和渲染质量,同时考虑到当前运行的所有混合现实应用程序。这对可用的图形功能施加了很大的限制。
RealityKit 上的渲染很可能与 Unity 渲染中存在视觉差异。我们不断努力提高 Unity 和 RealityKit 之间的视觉等效性,但请注意两者之间存在差异。
您的项目必须使用通用渲染管道 (URP) 或内置渲染管道。URP优先;如果您正在考虑迁移您的项目,这将是一个很好的机会。迁移文档可用于从内置管道迁移到 URP:使用我们的高级指南转向通用渲染管道 | Unity 博客
您可以使用 Unity ShaderGraph 的子集为visionOS 编写自定义着色器。在幕后,这会转换为 MaterialX。不支持 ShaderLab 和其他编码着色器,因为 VisionOS 的 RealityKit 不公开低级着色语言。
每个管道的几个重要标准着色器已映射到最接近的可用 RealityKit 模拟。目前的支持包括:
有关更多信息,请参阅PolySpatial 材质支持
目前,Unity PolySpatial XR 作为 alpha 产品发布。由于这是一个早期版本,预计文档、工作流程,尤其是 API 会发生更改,因此在规划项目时请考虑到这一点。
请参阅支持的 Unity 功能和组件,了解哪些 Unity 功能无需修改即可使用以及哪些功能需要重新考虑。
有关此平台支持的材质的信息,请参阅PolySpatial 材质支持和ShaderGraph 支持了解有关通过 Unity ShaderGraph 和 MaterialX 实现自定义着色器的详细信息。
请参阅visionOS PolySpatial 要求和限制,了解有关支持的硬件、软件和 Unity 功能的信息。
visionOS 对混合现实的支持由 Unity PolySpatial 提供,可以通过选项Edit > Project Settings > PolySpatial > Enable PolySpatial Runtime进行切换。
Unity 提供了多个选项来迭代和预览针对visionOS 的内容。这些选项与 Unity 对其他非桌面平台的支持相当。
预览内容的最快方法是在 Unity 编辑器中进入播放模式。这提供了最快的迭代周期,但使用 Unity 的渲染系统而不是 RealityKit。此模式针对快速迭代进行了优化,例如迭代游戏玩法或用户体验,但可能并不总是能够忠实地表示目标平台的视觉效果或性能特征。视觉效果、优化和类似任务通常受益于 Unity 提供的其他预览选项。此外,播放模式目前无法预览卷或visionOS 提供的新输入模式。
为了更好地近似visionOS运行时,PolySpatial应用程序的播放模式创建了一个并行的支持游戏对象层次结构,这些对象链接到应用程序的模拟游戏对象,但执行所有渲染。这意味着您将根据Enable PolySpatial Runtime项目设置的状态观察到一些差异。这些差异是有意为之的,因为它们允许开发人员更好地预览其内容在设备上的外观。
从“构建设置”窗口中选择visionOS,以针对visionOS 进行构建。构建设置中的大多数选项与为 iOS 提供的选项类似。VisionOS 播放器构建将生成一个需要在 Mac 上编译的 Xcode 项目(目前,这必须是带有 Apple 芯片的 Mac),但可能针对 VisionOS 模拟器或连接到 Mac 的 Apple Vision Pro 耳机。
注意:与 iOS 不同,无需在“项目设置”中切换到不同的 SDK 即可在模拟器中运行您的内容。只需在 Xcode 中选择 RealityDevice 模拟器目标即可。
要构建开发套件,请确保您已为 Apple 开发(包括 VisionOS)平台设置有效的配置文件和签名证书。您还需要确保设备已正确注册到您的开发帐户。
PolySpatial for VisionOS 支持独特的录制和回放工作流程,允许您录制会话(包括输入命令),然后在 Unity 编辑器中回放。有关详细信息,请参阅有关PolySpatial 工具的信息
调试支持
使用 PolySpatial 时,标准调试工作流程正常工作。您可以在构建设置中启用脚本调试,并可选择等待托管调试器。然后将托管调试器/IDE 连接到正在运行的应用程序并调试脚本代码。
构建块系统是场景视图中的一个覆盖窗口,可以帮助您快速访问项目中的常用项目。要打开构建块叠加,请单击场景视图上的汉堡菜单 > 叠加菜单,或者将鼠标移到场景视图上并按“波形符”键。然后只需启用 Building Blocks 叠加即可。
您可以在XR Core Utils 包中找到有关构建块系统的更多信息。