如何进行HoloLens 2 上应用开发?

Hololens 2 自今年2月份公布以来,引起了业界的广泛关注。对于开发者而言,如何进行HoloLens 2 上应用开发是大家关注的焦点之一。

编译架构

HoloLens 2 支持的最低部署环境为RS5(Windows 10 April 2018 Update),并且需要将WindowsSDK 升级至18362及以上版本,大家可以安装“Windows10 May 2019”或者1903的SDK。在编译架构上,HoloLens 2目前能够使用ARM架构,Unity 2018.3.X版本能够发布ARM32位,而ARM64位目前还暂未开放。

开发工具

开发工具建议首选Unity。它完善的工具链,C#的开发环境,天生的跨平台特性,丰富的第三方插件,都使得Unity成为最方便好用的开发载体。开发者至少需要升级到2018.3以上版本,因为目前Unity2019版本还不够稳定,所以目前建议大家使用Unity2018进行开发。

Unreal引擎也已经官方支持HoloLens 2了,但SDK暂时还未开放。Unreal引擎能够打造高质量的3D内容,在一些场景下HoloLens 2 可产生更好画面效果。UE4的XR 框架和设备特定API不但能够具备HoloLens 2 的各项功能开发,还支持头戴式设备(HMD)和AR集成设备,在跨平台兼容的扩张性上帮助开发者们获得更多的支持。

我们建议比较硬核的开发者或者拥有自主研发3D引擎的公司,可以选择使用原生DirectX开发,这样开发效率会提升。 OpenXR的runtime支持也已经加入,但还属于比较早期阶段。

HoloLens 2 模拟器

如果开发者暂时没有HoloLens 2 设备的话,大家也可以使用模拟器进行开发。如要安装HoloLens 2 模拟器,需要将操作系统升级到1809版本或以上。大家可以查看文末HoloLens 2 模拟器官方文档链接,进行学习。

开发套件

要开发HoloLens 2 的应用,就离不开MRTK v2了。MRTK提供了一整套在MR设备上操作、交互及协同的框架。在HoloLens一代时候,我们还可以不使用MRTK自行开发,但到了HoloLens 2 的时代,我们几乎已经离不开MRTK v2了(或者说,绕开它的成本很高,且毫无意义)。如果你之前的应用是用MRTK v1开发的,可以根据官方教程,将MRTK v1开发的应用迁移到MRTK v2。

MRTK v2相比老版本做了大量进化,它在上一代开发套件上进行了大量重构,横跨了VR/AR/MR,同时增加了对OpenVR的支持,使其覆盖面变得更加宽泛。经过重构的Input模块,使得所有设备的不同输入方式可以被包容在一起,开发者可以用相对统一的思路来处理各种不同设备的输入方式。

重构也使MRTK v2有了更为清晰的模块化结构,更灵活的配置性和更好的扩展性,基于MRTK Package结构进行的开发,使得它的扩展性得到了空前的提升。

最后,从MRTK v2的路线图来看,目前发布的只是RC1版本,开发团队在后面的规划中还有更多的内容,让我们拭目以待。

本能的交互理念

HoloLens 2 无论是从硬件还是软件都加入了本能交互的理念,这些本能交互设计在输入技术上包括了像Inside-Out追踪、手势追踪、眼动追踪及自然语言等无缝多类型模式。这些输入方式在MRTK v2开发上也有诸多体现。

自然手势

HoloLens 2 可以用最自然的方式让双手和虚拟物体交互,它通过机器学习能够近乎实时捕捉手部的21个关节,并通过这些关节来耦合对应的输入指令。这也意味着我们可以掌控整个手部的动作。有趣的是,在微软混合现实开发者日(MRDD)上微软官方推荐也是用Leap Motion来对这种操作进行简单模拟。手部位置的追踪和基础手势已经内置在MRTK v2之中,只要使用默认的配置制作的应用,当你伸出双手,你就能看到有一双虚拟的手完整的套在你的手上,并随着你的手实时运动。

HoloLens手势互动2

使用默认的设置,我们也可以随意用手抓取近处的虚拟物体,当物体较远时,还可以用手部伸出的射线来像光标一样选取。而各种丰富的手势甚至不需要我们写一行代码就可以实现。当然,如果要实现真正可用的功能,还是需要用代码把这些功能整理到你的应用之中。

MRTK v2中提供了一个能够体验全部HoloLens 2 输入方式和UI的示例场景,上手时,开发者们可以优先考虑用它来进行初次体验。

眼动追踪

眼动追踪,顾名思义就是能够通过识别用户的眼动来进行交互操作。它可以帮助用户在使用时选择目标,阅读时上下移动视线能够滚动导航帮助阅读以及将用户体验时的关注点进行统计分析。MRTK v2提供了一系列眼动追踪的组件来帮助开发者设计项目。但是需要注意的是,由于眼动追踪相对来说敏感度较高,开发者在项目眼动追踪的交互设计时,应注意避免眼动追踪对项目交互流程进行的误操作干扰。

共享空间锚

做过多人协同的MR应用的开发者都知道,空间不能共享是一件很痛苦的事情。当我们有多台MR设备需要在一个共同场景中同步时,每一台设备对空间的理解都不相同,我们往往需要逐个调整每一台设备中的空间锚,才能让这些设备中看到的画面看起来在同一个位置。

微软在HoloLens 一代阶段曾经设计了一套API,能够将空间信息序列化,并通过网络传输给其他HoloLens,让其他设备的空间与这台设备共享,但是当时的这一套机制实用性却不太强。一方面,空间信息序列化后过于庞大,经常达到上百MB的容量,网络传输困难;另一方面,其他设备下载空间信息后,有很大概率无法和自身识别的空间进行匹配,导致经常不能使用。随着HoloLens 2 的到来,微软也发布了新的Azure Spatial Mapping。这次是直接将空间信息通过简单的REST API上传到Azure,由Azure管理并存储,其他端则是从Azure下载。我们也在微软总部进行了简单的测试,上传下载的速度还是很快的,比之前做了大幅的优化。

Azure Spatial Anchor的加入让混合现实场景的分享与交互不仅只针对HoloLens 2 这类支持UWP平台的混合现实设备,还兼容了ARKit和ARCore等AR技术的平台,支持Pad和智能手机等多类终端也参与到共享空间锚信息中。当然,我们必须要连上Azure公有云才能访问此服务,在纯内网环境中就无法使用了,这时候还需要开发者自己写相应的映射服务。