HoloLens开发初体验
介绍
HoloLens 是微软推出的一款增强现实(AR),也有人称之为混合现实(MR)设备。它的技术非常具有革命性,带上它就可以将虚拟世界叠加在现实世界之中,给人们带来虚拟和现实结合的沉浸体验。这样的交互更加自然便捷,很可能会成为几年后一种常见的人机交互方式。
现在已经发售的开发版参数可以在https://www.microsoft.com/microsoft-hololens/en-us/development-edition中查看,简要说一下,它有 64GB Flash 存储空间,2GB RAM ,2GB CPU 和 1GB HPU(我也不知道 HPU 是什么意思,官网上如是写),大约可以持续使用两三个小时,重量是 579g(戴在头上还是有些分量的)。
更多的官方介绍也可以移步 HoloLens 官网查看https://www.microsoft.com/microsoft-hololens/en-us。
在微软学生夏令营上的 Hackathon 环节中有幸接触到 HoloLens,我们希望开发一个类似于 Ingress 和部落冲突合体的实感游戏,并且可以多玩家互联,让玩家可以体验到兼爱非攻的思维。但是迫于没有 Unity 开发经验和时间限制(36h),我们就将目标定为一个拾取能量和补充能量的 Demo。
在这里总结一下这次 HoloLens 的大致开发流程,如果没空看这里的瞎扯,请直接看最下面的参考资料,有很多干货和大牛的文章很值得一读。
体验感受
官方的话说完了,说说我的感受吧。
刚拿到 HoloLens 的时候就发现了很多它的局限,没有想象中那么好。第一是它的视野有限(比想象中的还要要小很多,就像在眼前加了一台显示器,根本不够用!希望以后的版本可以解决这个问题),第二是计算能力不够(不过缺点也是优点,它是一台完整的 PC,不必像其他 VR 设备那样受到拖线的叨扰),第三是手势输入很困难,现在只有两个手势,一个是只用食指的点按,一个是五指张开的 Bloom,交互起来不是很方便。剩下的还有只支持英文,画面深度控制不合理会导致眼睛酸痛,机器太沉等等问题。
不过随着几天的体验,我发现了使用 HoloLens 的要领——站起来,更要走起来!当你站起来以后会发现整个世界都变了,不再是坐着使用 HoloLens 那种无感的场景。当你站起来的时候,可以看到所有被你钉在墙上,pin 在窗上,甚至浮在空中的窗口,当然你也可以将窗口边走边用手拽到一个合适的地方。现实世界和虚拟世界就这样毫不冲突地结合到了一起,甚至用了一会以后,你会忘记真实世界到底是什么样的,把 HoloLens 摘掉以后会很不适应无法控制窗口的感觉。交互操作也没有那么不堪,Bloom 手势非常漂亮,开始屏幕打开的那一瞬间,简直帅爆了!Cortana 的灵敏度也超乎我想象,我可以用我只有六级英语的水平和她轻松对话。最最值得一提的是,当你把一个物体,比如一个飞机模型或者一个地球,甚至整个银河系放置在桌子上的时候,你可以围着它进行 360° 观察,去看清楚每一个方向的细节,也可以点击某个星球进入那个星球或者将一个飞机放大,让它充满整个屋子。感觉是相当震撼!从来没有一款 VR 产品可以让我有这么真实但又虚幻的震撼感,HoloLens 的确做到了,非常完美!
开发前准备
- 准备:安装有 Windws10 的 PC,如果需要 HoloLens 模拟器的话需要 4GB 以上的内存和支持虚拟化的 4 核心以上的 CPU。
- 安装 Visual Studio 2015:任何版本都可,推荐使用免费的 community 版本,下载链接 https://www.visualstudio.com/
- 安装 Unity For HoloLens:普通的 Unity 版本是不支持 HoloLens 相关设置的,需要使用专门为 HoloLens 定制的 Unity 版本,下载地址 http://aka.ms/HoloLensUnity
- 安装 HoloLens Emulator:如果暂时没有 HoloLens 可以真机调试,可以使用模拟器代为调试,下载地址 http://go.microsoft.com/fwlink/?LinkID=823018
这次开发的目标是一个 3D 游戏,所以使用主要使用 Unity 对游戏进行开发,使用 VS 对代码进行调试以及传输至 HoloLens。
除了使用 Unity 开发以外,还可以使用 DirectX 进行开发,或者可以直接将开发好的 UWP 程序在 HoloLens 上运行。
开发过程
在 Unity 上进行游戏开发
首先在 HoloLens 定制版的 Unity 新建工程,然后需要改一下设置来适应 HoloLens。具体可以参考:https://developer.microsoft.com/zh-cn/windows/holographic/unity_development_overview
由于事件紧张,所以队友们都是在现学现卖,水平都是一天入门的级别,所以游戏效果并不是很好,就不去贴代码啦~大致的效果就是可以通过点击拾取从空中掉落的能量球并将拾取到的能量提供给自己的能量晶体。
处理游戏与 HoloLens 的交互
现在,假装在 Unity 上模拟器(或者生成 exe 文件以后)已经可以跑起来啦。但是因为 HoloLens 的交互方式和普通的鼠标键盘交互有很大的区别,所以我们还需要为 HoloLens 的交互进行处理。
先来说一下 HoloLens 交互的主要类型吧,HoloLens 提供了下面六组 API:
- 世界坐标 World coordinates
- 凝视输入 Gaze input
- 手势输入 Gesture input
- 声音输入 Voice input
- 空间声音 Spatial sound
- 空间匹配 Spatial mapping
我们这次需要使用的是凝视输入、手势输入和空间匹配。凝视能量球或者能量晶体,然后发射凝视射线,然后检测手势点击,如果检测到跟晶体碰撞并且进行点击,则拾取能量或者补充能量。在放置能量晶体的时候需要扫描整个空间,然后将晶体放置在一个表面上面,在能量球掉落的时候如果掉到地面上就自动消失。
在直接查看官方文档中的 API 介绍的时候非常晕,也并没有 API 使用的例子,所以直接参考官网给出的 Demo101学习怎么使用这些 API。通过阅读源代码并且理解相关含义以后大致明白其思路,并且加到自己代码中实验,发现可以运行。之后我们又发现了更好的办法——直接使用 Github 上面给出的 SDK 进行开发,步骤简化了不少,但是因为代码版本不匹配,所以很多库根本无法编译通过,只能删掉之。
在模拟器和真机上进行调试
- 将 Unity 工程导出,使用 Visua Studio(需要设置为 D3D 和 UAP),使用 USB 电缆连接 HoloLens。(也可以使用 WiFi 连接,这时需要主机和 HoloLens 连接到同一个 WiFi,在编译选项中的调试设备中选择 Remote,按照提示进行)
- 调整目标设备:在解决方案管理器中右键Package.appxmanifest 文件,选择查看代码,找到TargetDeviceFamily 标签,将其中的Name=”Windows.Universal”改为Name=”Windows.Holographic”,将其中的MaxVersionTested=”10.0.10240.0”改为MaxVersionTested=”10.0.10586.0”。
- 调整编译选项:改变目标为 x86(现在只支持 x86),并且将生成配置从 Debug 切换到 Release,调试设备选择 Device。
- 点击开始,经过编译和远程部署即可在 HoloLens 中打开。
- 具体步骤可以参考:https://developer.microsoft.com/zh-cn/windows/holographic/holograms_100
除了调试代码以外,还可以使用 Device Portal 查看 HoloLens 运行状态并且查看 HoloLens 中的实时画面。
- 首先在 HoloLens 的Settings中的Update里的For developers选项中打开 Device Portal 选项
- 使用 USB 或者 WiFi 连接,如果是 USB 连接的话,在浏览器里输入http://127.0.0.1:10080,如果是WiFil连接的话,输入HoloLens的https://<HoloLens 的 IP 地址>(可以在设置重的网络设置里查看)即可。如果需要安装安全证书则要进行安装。
- 然后按照提示输入 HoloLens 里显示的 PIN 码,然后设置 Portal 的登陆密码,接下来就可以查看管理 HoloLens 的各个设置了。
- 其实 Portal 也是运用了 HoloLens 提供的 Restful 接口进行编写的,所以可以使用 HoloLens 提供的 Restful 接口自行提取数据。
- 关于设置 Portal 的方法可以参考:https://developer.microsoft.com/en-us/windows/holographic/using_the_windows_device_portal
- 关于 Restful API 可以参考:https://developer.microsoft.com/en-us/windows/holographic/device_portal_api_reference
开发的最终效果
嗯,不多说了,很多功能都还有 BUG,直接上图。 嗯,如果发现这篇文章以后博客停更那一定是被队友打死了。 最后 Tip:由于 HoloLens 的计算能力有限,所以不要放置太复杂的模型上去,否则,后果自负(嗯,其实也没什么后果,就是黑屏而已啦)。
顺便再宣传一下知乎上面的回答吧:参加微软学生夏令营是一种什么样的体验? - 回答作者: 政子 http://zhihu.com/question/31743851/answer/59362202
这里还有一个自己录制的 HoloLens 真机使用视频:http://v.youku.com/v_show/id_XMTcwMjU0NDEwOA==.html?beta&#paction
有干货的参考资料
- HoloLens 官网:https://www.microsoft.com/microsoft-hololens/en-us(实用的东西非常多!)
- 微软学生俱乐部官网微信开发指南:第一弹 ,第二弹,第三弹 (干货非常多)
- MSP 的昌伟哥哥的博客:http://www.cnblogs.com/mantgh/
- 微软官方示例:https://developer.microsoft.com/zh-cn/windows/holographic/academy(一定要仔细看,跟着一两个例子做完基本就能入门了)
- 微软官方文档:https://developer.microsoft.com/zh-cn/windows/holographic/documentation(文档就不是很行,很多地方莫名其妙)
- 在 Unity 上 HoloLens 的开发 SDK:https://github.com/Microsoft/HoloToolkit-Unity 和 https://github.com/Microsoft/HoloToolkit
- HoloLens 文档翻译:https://github.com/HoloDocs/HoloLensDocs(这是 MSP 的昌伟哥哥写的,质量比较高,github 上还有很多,也可以参考其他的)