首先分享一段TED Talk,这个是全球顶级的演讲,一般演讲跟IT男都没啥关系,比较内敛对吧,或者就没啥这方面细胞,乔布斯的演讲还不错,每次新品发布都挑逗观众G点,可惜人家不是IT男。能在TED Talk演讲,唯一的要求就是,你要够牛逼,要多牛逼?放到全世界你都是够牛逼就差不多了,然后再锻炼一下演讲技巧多排练几次就好。这个视频是微软的同事在介绍Hololens带来的梦想中的人与人之间的交互体验。
TED Talk Hololens视频
Hololens的宣传视频就很多很多了,但绝大多数都是加入后期制作的,而以直播的形式出现就很少了。Hololens本身支持实时全息影像展示的,打开Web管理器就行,不过吐槽一下这个真不稳定,开没几秒就会卡死了。这个混合影像的视角很小,就是你带着Hololens看到的矩形区域那部分。但如果做直播分享给别人一起看,这就明显不够了,于是就有了这个第三人称视角的解决方案。先上链接https://developer.microsoft.com/zh-cn/windows/holographic/spectator_view 这个新鲜出炉的Sepctator View,就是笔者后面要谈的实现技术了。用摄像机拍摄,摄像机可以是高达4K的画面效果,然后再叠加Hololens看到的全息影像,perfect。
要做到这个首先需要2个Hololens,一个带HDMI输出的摄像机,推荐Canon 5D MarkIII,1张视频采集卡,(一般笔记本都有HDMI接口,但请注意这个只是用来做视频输出的,不能作为输入,就更不能采集了,要搞清楚接口和卡是不同的概念),推荐Blackmagic的采集卡,原因很简单,有现成代码不用改了,否则换了一个你都不知道是源代码有问题,还是自己摄像机的sdk有问题,还是方法问题。采集卡推荐的是
Intensity Pro 4K不过这个是PCIe接口的只能插到台式机上,推荐使用intensity有雷电和Usb3.0接口,雷电当然更好不过稍微贵点,当然这款就不支持4K了,只能到1090p。需要的连接线就不说了,值得一提的是要把Hololens固定在摄像机上是个小问题,可以3D打印但不是那么随手可得,这个自己看着办哈。
首先试一试摄像机的链接是否好的,连上intensity,打开Blackmagic Media Express,看看能不能看到摄像机看到的画面,如果黑的,(看看是不是盖子没打开,我晕,太傻了),如果还是黑的,看看是不是没有enable实时影像,笔者没有使用官方推荐的佳能5D3,用的是nikon的,要按一下Lv按钮,相机屏幕显示什么这里就显示什么。好了继续。
然后要做个架子把hololens固定在摄像机上面,推荐用的是3d打印。笔者没有,只好用草根做法,拿了块泡沫,任何电器箱子里面总会有泡沫吧。没有,那就去买个电器吧:) 用美工刀切一切,大小合适后给红色音箱那挖2个洞,然后在应该的地方用泡沫垫一垫。相机可以用三脚架固定,三脚架有水平仪,笔者在泡沫上也放了一个水平仪,来保证hololens也是水平的。(这个没有?笔者是从服务器机柜那里拿的。没有服务器机柜?买一个机柜吧)
然后还需要做校准的黑白方格板,就是那个人拿着晃来晃去的黑色方格白色方格相间的那个,在Calibration\CalibrationPatterns目录下有个全图和半图,官方说打印全图,不过我看那个人拿的挺大的,如果全图打在A4上太小了,于是就大了2张A4的半图拼起来。官方说要放在硬板上,没有硬板,笔者就拿了个笔记本的箱子,刚好比2张A4纸大点,贴上去就好了。
以上硬件部分终于准备完了。下面开始软件部分。
首先是Calibration项目,直接编译会报错,缺h文件,这些可以通过还原nuget就好了,(不要傻傻的去找h文件,因为真的能找到,但这是一条不归路)。还原的时候如果不通,那就开吧。记得还要去stdafx.h改一下hololens的登陆用户名密码。编译成功后不是在vs里面运行,而是去Calibration\x64\Release里面找Calibration.exe,用管理员运行吧,否则可能写文件会出错。然后就学着官方那个人举着你的板让相机和hololens识别一下,2个设备都会去识别,识别到了会拍照,hololens拍照的时候会亮白灯,你就知道工作正常了,然后回到电脑按一下回车,去我的文档\CalibrationFiles里面,就会有你的亮照,分别是相机拍的,和hololens拍的,还有个CalibrationData.txt,嗯,按照官方的自己比对数据再调一调吧。有个值得说的是,官方说Stereo RMS的范围是20-50,不过这个txt里面却说越小越好。事实上是这样的,当视野越广的时候,这个数字会变大,把相机镜头拉长视角变小接近hololens的视角的时候,这个可以趋向0,笔者用的后者。最后把这个txt复制到assets目录下。来个亮照。
然后做compositor项目,没什么好说的,还原nuget,生成64位和32位解决方案。因为笔者电脑是64位的,大多数人的都是吧,所以64位的给unity用,32位的给hololens用,如果32位的给unity会报错找不到dll。笔者执行CopyDLL.cmd失败,闪一下就没了怎么知道成功还是失败?开CMD运行就知道了。于是看着cmd运行的结果,手动复制那些dll到assets目录。这步好了。
最后,打开Unity项目,不用设置什么了,前面已经把该放的都放进来了,双击打开Sharing场景一切都有了。只需要SpectatorViewManager里面的spectator view IP为hololens的ip就可以了。修改点击菜单HoloToolkit-Sharing Service-Launch Sharing Service,就打开了服务器端。点击菜单Spectator View-
Compositor打开界面窗口,点击运行,Duang,神奇的第三人称视角就完美的出现了。
细心的朋友可能发现了,一直到这一步其实都只需要1个hololens就可以了,后面如果Sharing Service IP的那个hololens进来后可以操作这些hologram。做完这些笔者无比的自豪感涌现啊,别看前面写的那些步骤好像一步一步做就行了,笔者遇到的坑无数啊,多数是在编译上面,会让你怀疑人生,笔者差点把win10都重装了。好了,Enjoy yourself!
后记,有段时间没有碰Hololens了,之前玩的时候还是5.4版本,现在用了5.5.0f3,居然unity生成的代码编译都通不过,以为是nuget的问题,升级nuget还报错,于是买了个,终于升级到最新的5.3.0居然说要visual studio 2017才可以,降到5.2.2可以编译了,部署到hololens的时候直接停止运行了,换了另一台电脑发现代码没问题,于是把笔记本的VS重装了。吃螃蟹第一人不好当,人生真的是折腾,也不知道还能折腾多久。