建议用于 Unity 的设置

Unity 提供了一组默认选项,这些选项通常是所有平台的普通情况。 但 Unity 还提供一些特定于混合现实的行为,这些行为可通过项目设置进行切换。

高性能环境设置

低质量设置

务必将 Unity“质量设置”修改为“极低”,这样你的应用程序就能在适当的帧速率下运行并表现良好,特别是对于 HoloLens 的开发。 若要在沉浸式头戴显示设备上进行开发,根据为 VR 体验提供支持的桌面设备的规格,用户仍然可以在没有设置最低质量参数的情况下实现帧速率。

在 Unity 2019 LTS+ 中,可以通过转到“编辑”>“项目设置”>“质量”来设置项目的质量级别,并通过单击向下箭头将“默认”设置为“**极低”质量级别

照明设置

与质量场景设置相似,务必要为混合现实应用程序设置最佳照明设置。 在 Unity 中,通常对场景性能影响最大的照明设置是“实时全局照明”。 可通过转到“窗口”>“渲染”>“照明设置”>“实时全局照明”来关闭“实时全局照明”

还有另一个照明设置,即“烘焙全局照明”。 此设置可以在沉浸式头戴显示设备上提供高性能和出色的视觉效果,但不适用于 HoloLens 开发。 “烘焙全局照明”仅针对静态 GameObject 计算,而在 HoloLens 的场景中,由于其未知和不断变化的环境的性质,不会出现这种情况

有关详细信息,请参阅 Unity 中的全局照明

注意

“实时全局照明”是按场景设置的,因此开发人员必须为项目中的每个 Unity 场景保存此属性

单通道实例化渲染路径

在混合现实应用程序中,场景被渲染两次:一次针对一只眼睛。 与传统的3D 开发相比,这实际上会将需要计算的工作量加倍。 务必要在 Unity 中选择最高效的渲染路径,以节省 CPU 和 GPU 时间。 单通道实例化渲染优化了混合现实应用的 Unity 渲染管道;建议为每个项目都默认启用这一设置。

在 Unity 项目中启用此功能

  1. 打开“OpenXR 设置”(转到“编辑”>“项目设置”>“XR 插件管理”>“OpenXR”)
  2. 从“呈现模式”下拉菜单中选择“单通道实例化”。

有关此渲染方法的更多详细信息,请阅读 Unity 的以下文章。

注意

如果开发人员的现有自定义着色器不是针对实例化编写的,则单通道实例化渲染会发生一个常见问题。 启用此功能后,开发人员可能会注意到,某些 GameObject 只在一只眼睛中呈现。 这是因为,关联的自定义着色器没有与实例化相关的适当属性。

请参阅 Unity 文章 HoloLens 的 单通道立体渲染来了解如何解决此问题

启用深度缓冲区共享

为了在用户的感知方面获得更好的全息影像稳定性,建议在 Unity 中启用“深度缓冲区共享”属性。 通过启用此属性,Unity 将与 Windows Mixed Reality 平台共享应用程序生成的深度映射。 然后,该平台可以针对应用程序渲染的任何给定帧的场景,更好地优化全息影像的稳定性。

在 Unity 项目中启用此功能

  1. 打开“OpenXR 设置”(转到“编辑”>“项目设置”>“XR 插件管理”>“OpenXR”)
  2. 从“深度提交模式”下拉菜单中选择“深度 16 位”。

对于 HoloLens 开发,特别建议使用 16 位深度缓冲区设置。 与 24 位相比,选择 16 位可显著减少带宽需求,因为需要移动/处理的数据量较少。 也就是说,优化需要一定的成本。 请确保了解下方重要框中提到的含义。

为了使 Windows Mixed Reality 平台能够优化全息影像稳定性,它依赖于深度缓冲区实现准确性,并与屏幕上任何渲染的全息影像相匹配。 因此,启用了深度缓冲区共享时,务必要在渲染颜色的同时渲染深度。 在 Unity 中,大多数不透明或 TransparentCutout 材料默认会渲染深度,但透明对象和文本对象将不会渲染深度,尽管这取决于着色器和其他因素。

如果使用混合现实工具包标准着色器来渲染透明对象的深度:

  1. 选择使用 MRTK 标准着色器的透明材料,并打开检查器的编辑器窗口
  2. 选择深度缓冲区共享警告中的“立即修复”按钮。 这也可以通过将“渲染模式”设置为“自定义”来手动执行;然后将“模式”设置为“透明”,最后将“深度写入”设置为开启

重要

开发人员在更改这些值以及相机的近/远平面设置时应注意 Z 冲突。 当两个 GameObject 尝试渲染到相同的像素,并且由于深度缓冲区的保真度(即 z 深度)的限制,Unity 无法辨别哪个对象在另一个对象的前面,这时就会发生 Z 冲突。 开发人员会注意到两个游戏对象之间出现闪烁,因为它们在争夺相同的 z 深度值。 这一问题可以通过切换到 24 位深度格式来解决,这样每个对象都有更大的值范围可供计算相机中对象的 z 深度。

但是,特别是对于 HoloLens 开发,建议将相机的近平面和远平面修改为更小的范围,并保留 16 位深度格式。 z 深度以非线性方式映射到近相机平面和远相机平面的值范围。 可以修改此范围,方法是在场景中选择“主相机”并在“检查器”下更改“近裁剪平面和远裁剪平面”值以减少它们的范围(即从 1000 米到 100 米或其他 x 值等)

重要

使用 16 位深度格式时,Unity 不会创建模具缓冲区。 因此,除非选择 24 位深度格式以创建 8 位模具缓冲区,否则某些 Unity UI 效果和其他模具所需的效果将无法使用。

针对 IL2CPP 生成

Unity 已弃用 .NET 脚本编写后端的支持,因此建议开发人员在其 UWP Visual Studio 生成中利用 IL2CPP。 尽管这带来了各种优势,但从 Unity 为 IL2CPP 生成 Visual Studio 解决方案可能比旧的 .NET 方法慢。 因此,强烈建议遵循生成 IL2CPP 的最佳做法,以节省开发迭代时间

  1. 每次将项目生成到同一目录,并在那里重复使用预生成的文件,从而利用增量生成
  2. 禁用对项目和生成文件夹的反恶意软件扫描
    • 在 Windows 10 设置应用下打开“病毒和威胁防护”
    • 在“病毒和威胁防护”设置下,选择“管理设置”
    • 在“排除项”部分,选择“添加或删除排除项”
    • 选择“添加排除项”,然后选择包含 Unity 项目代码和生成输出的文件夹
  3. 使用 SSD 进行生成

有关详细信息,请参阅优化 IL2CPP 的生成时间

注意

此外,设置缓存服务器可能会有所帮助,尤其是对于包含大量资产(不包括脚本文件)或不断变化的场景/资产的 Unity 项目而言。 打开项目时,Unity 会在开发人员计算机上将符合条件的资产存储为内部缓存格式。 必须重新导入项,因此,项在修改后会重新经过处理。 此过程可以执行一次,结果可保存在缓存服务器,因此可与其他开发人员共享以节省时间,无需让每个开发人员在本地重新导入新的更改。

发布属性

全息初始屏幕

HoloLens 具有移动级 CPU 和 GPU,这意味着应用可能需要更长的加载时间。 在应用程序加载时,用户只会看到黑色,因此他们可能想知道正在进行的操作。 为了让用户在应用加载过程中放心,可添加全息初始屏幕。

切换全息初始屏幕:

  1. 转到“编辑”>“项目设置”>“播放器”页面
  2. 选择“Microsoft Store”选项卡,并打开“初始图像”部分
  3. 在“Windows Holographic”>“全息初始图像”属性下应用图像
    • 切换“显示 Unity 初始屏幕”选项将启用或禁用 Unity 品牌的初始屏幕。 如果没有 Unity Pro 许可证,则将始终显示 Unity 品牌的初始屏幕。
    • 如果应用了“全息初始图像”,则无论是启用还是禁用“显示 Unity 初始屏幕”复选框,将始终显示此图像。 指定自定义全息启动图像仅适用于拥有 Unity Pro 许可证的开发人员。
显示 Unity 初始屏幕 全息初始图像 行为
Unity 初始屏幕显示 5 秒或在应用程序加载完毕前一直显示,以较长者为准。
自定义 自定义初始屏幕显示 5 秒或在应用程序加载完毕前一直显示,以较长者为准。
在应用程序加载完毕前一直显示透明的黑色(无内容)。
自定义 自定义初始屏幕显示 5 秒或在应用程序加载完毕前一直显示,以较长者为准。

有关详细信息,请阅读 Unity 的初始屏幕文档

失跟

混合现实头戴设备依靠观察周围环境来建立世界锁定坐标系统,从而使全息影像保持在原位。 当头戴显示设备无法确定它在世界中的位置时,该设备就被视为丢失跟踪。 在这些情况下,依赖于世界锁定的坐标系统的功能(例如空间舞台、空间定位点和空间映射)不起作用。

如果出现了跟踪丢失,Unity 的默认行为是停止渲染全息影像,暂停游戏循环,并显示跟踪丢失通知(会随用户的目光移动,带来舒适体验)。 自定义通知也可以用跟踪丢失图像的形式提供。 对于依赖于跟踪来获得整个体验的应用,仅使用 Unity 来处理此问题即可,直到重新获得跟踪为止。 开发人员可以在跟踪丢失期间提供要显示的自定义图像。

自定义跟踪丢失映像:

  1. 转到“编辑”>“项目设置”>“播放器”页面
  2. 选择“Microsoft Store”选项卡,并打开“初始图像”部分
  3. 在“Windows Holographic”>“跟踪丢失图像”属性下应用图像

选择不使用自动暂停

某些应用可能不需要跟踪(例如 360 度视频观看体验等仅朝向的应用),或者可能需要在跟踪丢失时不间断地继续处理。 你可以选择不使用默认的跟踪丢失行为,但需要隐藏/禁用在跟踪丢失情况下无法正常渲染的任何对象。 通常,建议在这种情况下仅渲染身体锁定的内容,以主相机为中心。

选择不使用自动暂停行为:

  1. 转到“编辑”>“项目设置”>“播放器”页面
  2. 选择“Microsoft Store”选项卡,并打开“初始图像”部分
  3. 修改“Windows Holographic”>“在跟踪丢失时暂停并显示图像”复选框

跟踪丢失事件

若要在跟踪丢失时定义自定义行为,请处理全局跟踪丢失事件

功能

如果应用要利用某些功能,它必须在其清单中声明适当的功能。 可以在 Unity 中创建清单声明,从而将它们包括在导出的所有将来项目中。

可通过以下方式为混合现实应用程序启用功能:

  1. 转到“编辑”>“项目设置”>“播放器”页面
  2. 选择“Microsoft Store”选项卡,打开“发布设置”部分,然后查找“功能”列表

用于为全息应用启用常用 API 的适用功能包括:

功能 需要功能的 API
SpatialPerception SurfaceObserver
网络摄像头 PhotoCapture 和 VideoCapture
PicturesLibrary/VideosLibrary 分别为 PhotoCapture 或 VideoCapture(存储捕获的内容时)
Microphone VideoCapture(捕获音频时)、DictationRecognizer、GrammarRecognizer 和 KeywordRecognizer
InternetClient DictationRecognizer(并使用 Unity 探查器)

另请参阅