将 VR 应用移植到 Windows Mixed Reality

Windows 10包括对沉浸式和全息头戴显示设备的支持。 如果已针对其他设备(如 Oculus Rift 或)。这些设备依赖于位于操作系统平台 API 上方的库。 将现有的 Win32 Unity VR 应用引入 Windows Mixed Reality涉及到将供应商特定的 VR SDK 重新定向到 Unity 的跨供应商 VR API。

移植要求

从较高层面来说,移植现有内容涉及以下步骤:

  1. 确保电脑运行 16299 Windows 10 Fall Creators Update (16299) 。 我们不再建议从 Insider Skip Ahead 环接收预览版本,因为对于混合现实开发,这些版本不是最稳定的。
  2. 升级到最新版本的图形或游戏引擎。 游戏引擎需要支持 Windows 10 SDK 版本 10.0.15063.0 (2017 年 4 月发布的) 或更高版本。
  3. 升级任何中间件、插件或组件。 如果应用包含任何组件,则建议升级到最新版本。
  4. 删除重复 SDK 的依赖项。 根据内容的目标设备,需要删除或有条件地编译出该 SDK,以便可以改为面向Windows API。 这种情况的一个示例是 SteamVR。
  5. 解决生成问题。 此时,移植练习特定于应用、引擎以及你拥有的组件依赖项。

常见移植步骤

1.确保具有正确的开发硬件

VR 友元指南页列出了推荐的开发硬件。

2.升级到最新航班Windows 10

Windows Mixed Reality平台仍处于积极开发阶段。 建议加入 Windows 会员计划访问"Windows 预览体验成员 - 快"航班。

  1. 安装Windows 10 创意者更新
  2. 联接Windows 会员计划。
  3. 启用 开发人员模式
  4. 通过"更新 Windows 预览体验成员 - 快安全设置 >切换到 &航班

3.升级到最新版Visual Studio

  • 如果使用的是 Visual Studio,请升级到最新的内部版本
  • 请参阅2019 年 Visual Studio 下的"安装工具"页

4.选择正确的适配器

  • 在具有两个 GPU 的笔记本等系统中, 以正确的适配器 为目标。 这适用于 Unity 和本机 DirectX 应用,其中显式或隐式创建了 ID3D11Device (媒体基础) ,用于实现其功能。

Unity 移植指南

1. 查看上面列出的常见移植步骤

查看上面列出的常见步骤,确保正确设置开发环境。 在步骤 #3 中,如果使用 Visual Studio 应选择 "使用 Unity 的游戏开发" 工作负荷。 由于将在下一步中安装较新版本的 Unity,因此可以取消选中 "Unity 编辑器可选" 组件。

2. 升级到具有 Windows MR 支持的 Unity 的最新公共版本

  1. 下载最新建议的具有混合现实支持 的 Unity 公共内部版本
  2. 在开始之前保存项目的副本
  3. 如果你的项目是基于早期版本的 Unity 生成的,请查看 Unity 上提供的 文档
  4. 按照 Unity 站点上的 说明 使用其自动 API 更新程序
  5. 检查并查看你是否需要进行其他更改以使你的项目运行,并处理剩余的错误和警告。

备注

如果你有依赖的中间件,请检查你是否正在使用最新版本, () 下面的步骤3中的更多详细信息。

3. 将中间件升级到最新版本

对于任何 Unity 更新,都有可能需要更新游戏或应用程序所依赖的一个或多个中间件包。 此外,最新的中间件是最新的,最新的中间件会在整个移植过程中增加成功的可能性。

4. 将应用程序定位到在 Win32 上运行

从 Unity 应用程序内部:

  • 导航到 "文件-> 生成" 设置
  • 选择 "PC、Mac、Linux 独立版"
  • 将目标平台设置为 "Windows"
  • 将体系结构设置为 "x86" 选择 "切换平台"

备注

如果你的应用程序在特定于设备的服务上有任何依赖关系,例如,从流中进行匹配,则需要在此步骤中禁用它们。 你可以挂钩到 Windows 稍后提供的等效服务。

5. 设置 Windows Mixed Reality 硬件

  1. 查看沉浸式耳机安装程序中的步骤
  2. 了解如何使用 Windows Mixed Reality 模拟器导航 Windows Mixed Reality 主页

6. 将应用程序定位到 Windows Mixed Reality 上运行

  1. 首先,必须将特定于特定的 VR SDK 的任何其他库支持删除或有条件地编译掉。 这些资产经常以与其他 VR Sdk 不兼容的方式(如 Windows Mixed Reality)更改项目的设置和属性。
    • 例如,如果你的项目引用 SteamVR SDK,则需要将你的项目更新为,以改用支持 Windows Mixed Reality 和 SteamVR 的 Unity 公共 VR api。
    • 即将推出其他用于有条件地排除其他 VR Sdk 的特定步骤。
  2. 在 Unity 项目中,面向 Windows 10 SDK
  3. 对于每个场景, 设置照相机

7. 使用舞台将内容放到地面上

您可以在各种 经验范围内构建混合现实体验。

如果要移植 固定规模的体验,必须确保将 Unity 设置为 静止 跟踪空间类型:

XRDevice.SetTrackingSpaceType(TrackingSpaceType.Stationary);

上述代码将设置 Unity 的世界坐标系统,以跟踪 固定的引用框架。 在静止跟踪模式下,在应用程序启动时,位于该编辑器中的内容仅在照相机默认位置的前面 ("向前" 为-Z) 出现在用户的前面。 若要 recenter 用户的固定来源,可以调用 Unity 的 XR。InputTracking. Recenter 方法。

如果迁移的是 大规模体验房间规模体验,将会相对于地面放置内容。 使用 空间阶段(表示用户在首次运行期间设置的已定义的层级来源和可选房间边界)的原因。 对于这些体验,必须确保将 Unity 设置为 RoomScale 跟踪空间类型。 尽管 RoomScale 是默认值,但你需要对其进行显式设置,并确保返回 true,以便捕获用户将其计算机从其校准的房间离开的情况:

if (XRDevice.SetTrackingSpaceType(TrackingSpaceType.RoomScale))
{
    // RoomScale mode was set successfully.  App can now assume that y=0 in Unity world coordinate represents the floor.
}
else
{
    // RoomScale mode was not set successfully.  App cannot make assumptions about where the floor plane is.
}

应用成功设置 RoomScale 跟踪空间类型后,放置在 y = 0 平面上的内容将显示在地面上。 位于 (0,0,0) 的原点将是用户在房间设置期间考验的特定位置,并以-Z 表示在安装过程中所面临的正向方向。

在脚本代码中,您可以对 UnityEngine 调用 TryGetGeometry 方法来获取边界多边形,并指定 "TrackedArea" 的边界类型。 如果用户定义了边界 (你获取了) 的顶点列表,则可以安全地向用户提供一个 会议室规模的体验 ,用户可在其中浏览你创建的场景。

当用户接近边界时,系统将自动渲染边界。 您的应用程序不需要使用此多边形来呈现边界本身。

有关详细信息,请参阅 Unity 页中的坐标系统

结果示例:

结果示例

算法基于 Daniel Smilkov:多边形中的最大矩形的博客

8. 通过输入模型工作

每个面向现有 HMD 的游戏或应用程序都将具有一组可处理的输入,其所需的输入类型和体验所需的特定 Api 以及用于获取这些输入的特定 Api。 我们已经投入了大量努力,尽可能简单直接地利用 Windows Mixed Reality 中提供的输入。

若要详细了解 Windows Mixed Reality 如何公开输入以及如何映射到你的应用程序可以执行的操作,请参阅相邻选项卡中的Unity 的输入移植指南

9. 性能测试和优化

Windows Mixed Reality 将在各种设备上可用,范围从高端游戏电脑到广泛市场主流 pc。 根据你的目标市场,你的应用程序的可用计算和图形预算有很大的差异。 在此迁移过程中,你可能会利用高级 PC,并为应用提供大量的计算和图形预算。 如果你希望将应用程序提供给更广泛的受众,则应在 你想要面向的代表硬件上测试和分析你的应用程序。

UnityVisual Studio都包含性能探查器, MicrosoftIntel都发布有关性能分析和优化的指导原则。 在 了解混合现实的性能方面,提供了有关性能的广泛讨论。 此外,在Performance 推荐 For unity下提供了 unity 的特定详细信息。

Unreal 移植指南

重要

如果使用的是 HP Reverb G2 控制器,请参阅此 ,获得其他输入映射说明。

请参阅