社区原创|HoloLens 2开发初窥
The following article is from XRCV Author DataMesh
我们刚刚发布了微软和Unity共同推出HoloLens 2开发版的消息,HoloLens 2开发版提供了更多内容,帮助开发者推动实现自己的混合现实开发计划。本篇文章由来自DataMesh的Unity社区技术专家邬浩带领我们一窥HoloLens 2开发。
在五月初举行的MR Dev Days上,微软不仅正式公开了大量的开发内容,还开放了HoloLens 2开发动手实验室,我们有幸在数小时内快速构建了一个引擎拆解应用,下面视频将演示效果。
这么简单就能做出来这样的应用?在MRTK 2的帮助下真的不难,但首先我们需要了解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开发版的一部分。
更多Unity和HoloLens 2的最新信息,尽在Unity Connect平台(Connect.unity.com)。下载Unity Connect APP,请点击此处。
推荐阅读
官方活动
Unity将举行六一儿童节特别活动-动画工作坊,我们将带领孩子们进入动画制作的世界。欢迎小朋友们报名参加,家长可陪同参与。
活动时间:5月25日 10:00-16:00 (星期六)
报名链接:
https://connect.unity.com/events/animationworkshop
点击“阅读原文”访问Unity Connect