Notifications
Article
社区原创|HoloLens 2开发初窥
Published a month ago
150
0
我们刚刚发布了微软和Unity共同推出HoloLens 2开发版的消息,HoloLens 2开发版提供了更多内容,帮助开发者推动实现自己的混合现实开发计划。本篇文章由来自DataMesh的Unity社区技术专家邬浩带领我们一窥HoloLens 2开发。

开发环境

操作系统及SDK
开发HoloLens 2应用的电脑必须安装有Windows SDK 18362以上版本,也就是要安装Windows 10 May 2019或1903的SDK。Windows本身需要是1809以上,也可以升级到1903。
请注意:如果没有推送,你可以加入Insider Preview选择Fast Track,但存在一定风险。
开发工具
开发工具首选Unity。完善的工具链、C#的开发环境、天生的跨平台特性、丰富的第三方插件资源,这让Unity成为最方便好用的开发工具。
我们需要使用Unity 2018.3以上的版本,Unity 2018.4 LTS版本刚刚发布,这是一个长期稳定的版本,仅以大家选用进行开发。
由于HoloLens 2仍然运行的是UWP程序,所以不管使用任何环境,最终还是需要Visual Studio 2017进行打包发布。
MRTK v2
想要方便地开发HoloLens2应用,最关键的是MRTK v2。MRTK提供了一整套在MR设备上操作,交互及协同的框架。
在HoloLens 1的年代,我们还可以不使用MRTK自行开发,但到了HoloLens 2的时代,我们几乎已经能绕不开MRTK v2了,或者说绕开它的成本很高,且毫无意义。也许你之前的应用就是用MRTK v1开发的,你可以将MRTK v1开发的应用迁移到MRTK v2。
HoloLens 2或模拟器
有HoloLens 2当然要使用HoloLens 2。如果没有,我们可以使用模拟器进行开发。
请注意:如要安装HoloLens 2模拟器,需要将操作系统升级到1809版本或以上。

编译架构

HoloLens 2已经进化到ARM架构,因此在Visual Studio中,发布平台要选择ARM。Unity 2018.3版本尚不能支持ARM 64,所以目前发布的平台只是ARM 32。如果要使用ARM 64,需要等待Unity 2019稳定。

开发套件MRTK v2

MRTK v2相比老版本做了大量的进化,绝对是目前MR开发最强大的套件。
MRTK v2的代码进行了大量重构,横跨了AR/VR/MR,同时由于增加了对OpenVR的支持,MRTK v2的覆盖面变得更加广泛,可以直接支持HTC Vive和Oculus Rift等VR设备,拥有强大的输入兼容性。经过重构的Input模块,使得所有设备的不同输入方式可以被包容在一起,开发者可以用相对统一的思路,来处理各种不同设备的输入方式。
重构也使得MRTK v2有了更清晰的模块化结构,更灵活的配置性和更好的扩展性。基于MRTKPackage结构进行的开发,使得它的扩展性得到了空前的提升。
我们可以从下面的package结构图可窥一斑。
MRTK v2在使用方面,除了很多组件变得更加清晰好用之外,还引入了大量的配置文件,可以方便地设置MR中的各种核心功能,还可以创建自定义的配置以便切换。
最后,从MRTK v2的路线图来看,目前发布的只是RC1版本,而开发团队显然有更大的野心,在后面的规划中还有更多的内容,让我们拭目以待。

自然手势

HoloLens 2给人印象最深刻的特性,就是可以用最自然的方式,让双手和虚拟物体交互了。
通过Azure Kinect深度摄像头实时抓取高分辨率深度数据,HoloLens 2通过机器学习能够近实时捕捉手部的最多25个关节,效果接近Leap Motion,这意味着我们可以掌控整个手部的动作。
手部位置的追踪和基础的手势已经内置在MRTK v2之中,只要使用默认的配置制作的应用,伸出双手,我们就能看到有一双虚拟的手完整的套在你的手上,并随着你的手实时运动。
使用默认的设置,我们就可以随意的用手抓取近处的虚拟物体,如果物体较远,还可以用手部伸出的射线来像光标一样选取。
我们可以用手触摸物体,用手抓、用手指捏、可以按、可以推、可以拨动UI。如果你只是简单的想尝试所有这些,甚至不用写一行代码就可以实现。当然了,如果要实现真正可用的功能,还是需要用代码把这些功能整理到你的应用之中。
值得一提的是MRTK v2中提供了一个能够让人体验全部HoloLens 2输入方式和UI的示例场景,上手时可以优先考虑用它来进行初次体验。

视线追踪

视线追踪是HoloLens 2带来的重要新功能,设备可以追踪使用者的眼睛所观察的方向,可以真正做到一个眼神就知道你要做什么。
通过MRTK v2提供的功能,我们可以获取使用者当前眼镜所注视的位置,可以用视线来选取物体、滚动文本、甚至可以统计使用者视线聚焦的位置情况,以便更好的分析使用者的操作习惯。
但是由于视线移动非常灵活,过度使用视线追踪有可能会造成使用者的困扰,产生大量违背使用者意图的误操作,因此官方建议只在合适的地方尝试使用视线追踪,并多加测试。

共享空间锚

开发过多人协同的MR应用的开发者都知道,空间不能共享是一件多么痛苦的事情。当我们有多台MR设备需要在一个共同场景中同步时,由于每一台设备对空间的理解都不相同,我们往往需要逐个调整每一台设备中的空间锚,才能让这些设备中看到的画面看起来在同一个位置。
微软在HoloLens 1阶段曾经设计了一套API,能将空间信息序列化,并通过网络传输给其他HoloLens,让其他设备的空间与这台设备共享。然而当时的这一套机制实用性却不强。
一方面,空间信息序列化后过于庞大,经常达到上百MB的容量,网络传输困难。另一方面,其它设备下载空间信息后,有很大概率无法和自身识别的空间进行匹配,导致经常不能使用。随着HoloLens 2的到来,微软发布了新Azure Spatial Mapping。
Azure Spatial Mapping可以让不同的MR设备之间共享空间认知,不止HoloLens之间分享,还可以涵盖ARKit和ARCore。与此前不同,这次是直接将空间信息通过简单的REST API上传Azure,由Azure管理并存储,其它端则是从Azure下载。
我们在Redmond进行了简单的测试,上传下载的速度还是很快的,比之前应该是做了大幅的优化。世纪互联版Azure据说也要上线该服务,但尚不清楚国内版性能情况。
Azure Spatial Mapping提供了一些附加的功能,例如:可以累加式地添加空间锚,不必在一次运行时完全添加,可以在以后打开程序时再次添加;还可以在空间锚之间创建联系,帮助使用者进行寻路,获取距离当前空间锚最近的空间锚等等。
使用Azure Spatial Mapping,我们就可以很容易地在不同的MR设备之间共享空间锚信息,多设备协同时的前期调校工作会变得更加简便。
唯一的问题在于,我们必须要连上Azure公有云才能访问此服务,在纯内网环境中就无法使用了,这时候还是需要自己写相应的映射服务。

小结

通过本文的介绍,你已经对HoloLens 2开发有了一定的初步了解。后续我们将分享使用HoloLens 2和Azure Kinect进行开发。Unity也将提供Unity Pro专业版和PiXYZ Plugin的三个月免费试用作为HoloLens 2开发版的一部分。
Tags:
Unity China
588
Comments