硬件需求
1.两台Hololens设备
2.一个视频采集卡
3.一个有HDMI输出的摄像机
4.一根正常的HDMI线,一根HDMI转MicroHDMI的线(因为相机的HDMI接口是小口的HDMI接口)
实现过程记录:
首先我在某宝租了两台hololens设备,在某东买了一个视频采集卡,手头有一架支持HDMI的单反。
Unity使用的是2017.4.16版本,
在Build Setting中切换平台为windows
安装好之后会报错显示,没有安装Win10 SDK
我们打开Visual Studio Installer,选择自己的VS版本,点击【修改】,选择【单个组件】,添加如下组件
这些内容大约有13个G,安装完成后,重启unity发现SDK安装成功,但报了新的错误如下
Currently selected scripting backend (IL2CPP) is not installed
解决办法是,进入Player Setting,找到Windows平台,将Other Setting中Scripting Backend 改成.Net即可
参考博客:https://blog.csdn.net/GGlance/article/details/82379892
做好之后我们直接用新建的空项目Build一下,
《《=========================这部分是走的弯路,就不删除了,大家借鉴一下吧=============================
发现第一步Restoring Nuget Package直接卡在那鬼畜,一抖一抖,卡在中间的就是不动,上网查询资料后,解决办法如下
使用Cmd更新NuGet,具体操作
找到Unity安装目录,我的是D:\Program Files\Unity 2017.4.16\Editor\Data\PlaybackEngines\MetroSupport\Tools
在cmd中进入这个目录 执行 nuget.exe update -self
参考博客:https://blog.csdn.net/u014778991/article/details/54965132
更新成功后,再次Build,又出了新的错误,如下
看这个描述,貌似是让我把Nuget再还原回3.5的版本 =.= !。。。。。。。。。。。。。。。。
于是我就去官网重新下载nuget的3.5版本,替换回来,重新Build
这回多等了一会,就可以发布成功了 -。-
===========================================================》》
Build的时间比较长,发布好的文件如下
-=-=-=-=-=-=-=-==-= 20190221
下面来操作从git上下载的官网示例项目,拷贝一份(养成好习惯),因为我这边采集设备还没有到货,就先做下将项目部署到Hololens上。
使用Unity打开目录 SpectatorView\SpectatorViewSample 下的Unity工程
因为上面我们已经做好了准备工作,这里直接Build出来。。。(官方项目是只有一个Cube,并且手势“捏”会出现白色sphere)
下面使用VS打开SpectatorViewSample.sln
如果却少VS的组件,打开时可能会提示,按需求安装即可(强烈建议将VS安装到C盘,否则可能会出各种莫名其妙的问题)
下面将调试设备选择成Device,在调试前可以将自己电脑的Windows 10 系统设置成开发模式
设置开发模式的方法:左下角Windows,点击设置,搜索开发者选项,设置一下即可,(同样会下载一些东西)
接下来,将设备使用自带的USB线连接到电脑上等待识别,识别完成后点击部署
会看到项目在编译,然后会提示要求输入设备的PIN码,这里的PIN码是指Hololens的PIN码
获取hololens的PIN码:Setting-Update& Security-For Developers-Device-discovery 的 Pair 会出现PIN码。
获取到PIN码后,输到VS中。
然后在解决方案管理器右键属性中,将平台选择为x86
接下来再发布,项目在hololens端会直接运行。到这部署阶段完成
==============20190326
延迟了很久,今天采集卡到货,继续往下调
首先来调采集卡,把线接上,安装Desktop Video Installer v10.11.4
安装Blackmagic DeckLink SDK10.11.4 和 opencv 3.4.1 (Opencv的版本我这边只能使用固定的版本即3.4.1)
接下来接好设备,如图
下面正式开始第三视角的各个步骤
1.Calibration
2.Compositor
3.编译并部署Provider
4.双hololens无线连接unity,在unity端远程实现第三视角
准备工作:
官网下载官方第三视角工程:https://github.com/Microsoft/MixedRealityCompanionKit/tree/master/SpectatorView
整体拷贝文件夹【SpectatorView】到你常用的项目目录中,这里不要破坏目录层级
采集卡相关坑:
我这里用的采集卡其实是采集盒,为了在笔记本也可以使用,所以可能就会有接触不好,采集不到信息的问题
那么如何判断我的采集卡是否接触良好呢?
在资源管理器中,打开【声音,视频和游戏控制器】,下面要有三个BlackMagic的内容,并且无黄色叹号,代表接触良好。
如果不够三个,换接口插,
如果有黄叹号,插好采集卡,然后重启计算机
opencv配置相关坑:
openvc所谓的安装,其实就是解压,解压到任意路径即可(不要有中文)
接下来就要配置环境变量,坑就在环境变量的结尾一定要有斜杠,不然后面会有很蛋疼的问题
声明:因为有两台hololens,这里
和相机在一起的hololens称为:第三视角提供者
另一台称为:第三视角使用者
1.Calibration
这一步的详细步骤,网上已经有很多大神发出来了,下面会发出相关链接,我这里简单的地方就不再赘述
打开dependencies配置,opencv和black magic的路径,
打开stdafx.h中,找到如下内容,填写【第三视角提供者】hololens的登录用户名和密码
在vs中选择release,x64,
下面在解决方案上右键,还原Nuget,
接下来在Calibration上右键,生成
生成这步的坑:
有可能生成会失败报错,一般会出问题的地方只有路径配置错误或者opencv和采集卡SDK的版本不对应的问题,
1.路径配置错误,vs会报错找不到decklinkXXX,或者找不到opencvXXX,这里你就要检查一下你的路径了
2.opencv版本的问题,如果报错为,opencv的XXXX341,(结尾有一个数字),这个数字就代表,当前需要的opencv版本,这里的341就对应着opencv-3.4.1
下载对应版本替换即可。
还有一个要说的就是,全部使用vc14的内容,不要使用vc15!!!!
3.采集卡SDK,我这边没遇到问题,不过不要放在中文路径
下面编译成功后,可能会有两种情况
在根目录找到x64,release,里面的exe,右键管理员身份运行,闪退(这个问题我没有解决,可能有的人就不闪退)
我这里就是编译成功后,直接在vs端,调试运行程序
运行后可能会遇到白屏。opencv的环境变量配置是否正确,
如果运行后,画面没有相机的画面,那么你就要检查下你的采集卡接触是否良好(如何检查在上面已经写了,在资源管理器中看)
4.如果这里运行时白屏(或者蓝屏等等就是单色的啥也没有),找到DeckLinkManager.cpp,找到
videoDisplayMode = bmdModeHD1080p5994;
改成
videoDisplayMode = bmdModeHD1080p30;
注意要修改对应你相机分辨率的那一档,我的是1080P,所以我改的是下图位置的部分
如果到这步你的相机画面可以正常采集到,并显示在calibration.exe中,现在你就可以拿着棋盘格的那张纸,站在相机前面。
这里的坑:
相机会拍照,并保存照片到C盘的目录中(C盘,user,文档,CalibrationFile中),但hololens无论如何也不会拍照,并显示为红色,具体错误如下图
hololens采集不到图像并且不拍照的原因是,新机器没有添加过【网站证书和许可】,
我们把hololens通过自带的usb数据线连接到电脑(资源管理器发现hololens为已连接),打开Edge浏览器(推荐),在浏览器中输入 http://127.0.0.1:10080 回车进入,这时需要有一个人戴着这个配对的设备,打开网页时在hololens中会弹出pairing码
将paring码填到网页中,并按照网页上的提示,安装证书,和登录设备,登录成功后,网页会显示设备的管理界面
这时将hololens用usb连接到电脑上,再次运行calibration工程,即可成功拍照,
按照官方要求,拍了足够数量的照片后,在calibration上,按回车,即会生成校准文件
2.Compositor
这一步的主要工作就是通过解决方案Compositor来生成unity端必需的dll和一些其他文件,一共七个,如下
使用VS打开Compositor项目,确保dependencies.props的路径配置正确后,编译这个项目
注意,这两个项目都要编译一下,Release x64的,编译通过之后,运行copydll.cmd即可将这些文件复制到默认的unity工程SpectatorViewSample中
如果这一步失败,也可以手动将这些生成好的必须文件,添加到SpectatorViewSample工程中,目录请参考下图
只有正确提供了这些文件,unity端才能正确显示视频合成窗口
3.编译并部署Provider
Provider是第三视角提供者中,需要运行的程序,
使用VS打开SpectatorViewPoseProvider,这是一个已经写好的hololens工程,可以通过usb部署到hololens中,
我们需要将这个项目,部署到【提供者】的hololens中
这里就涉及到hololens和电脑的另一种配对关系,VS会提示需要Pair码,我们在hololens中,update的开发者选项中可以找到这台设备的pair码,输入到vs中即可。
运行成功后会在hololens中部署Provider程序。
4.双hololens无线连接unity,在unity端远程实现第三视角
要实现远程连接Unity与hololens,我们需要在hololens中安装一个程序
Hololens Remoting player
在Hololens内置的资源商店中可以找到它,安装好后在Hololens中打开Hololens Remoting player,会显示本机IP
下面在unity中,如果平台正确切换到了UWP平台,可以在Window-XR目录下找到Holographic Emulation,
使用这个功能需要勾选下面这个选项,如果点击Connect报错,就勾选选项后,重启unity
在Remote Machine中添加,Hololens Remoting player中显示的IP,确保unity和Hololens在同一个局域网内,
点击Connet变成绿点即成功。此时在unity端点击play,Hololens会直接运行当前程序。
Hololens Remoting player是将unity的画面,实时(将视频数据)同步到已连接的Hololens中,因此介于网络情况的关系,画面质量很低,运行不稳定,几分钟后基本就卡掉了。因此此功能仅推荐测试使用,不推荐实际项目中使用。
至此我们已经有一台Hololens部署好了Proivider(架在摄像机上),一台HoloLens准备使用Hololens Remoting player连接电脑,还有一台PC作为服务器。运行Provider(可以看见Hololens的画面是空间网格信息),打开合成器,在Unity端点击运行,可以看见使用Remoting链接的hololens和合成器均可以显示unity的画面。手动在Remoting链接的Hololens中拖拽盒子(或者你自己写的任何逻辑),就可以看到,合成器中的盒子会同步移动。
PS:第三视角十分不稳定,位置信息偏差大,易崩溃,受场地的灯光的影响和限制,并且需要无数次的测试,除非类似展会这种有固定场地固定灯光且可以无限测试的情况外,不推荐在实际项目中使用第三视角。至少第一代Hololens的第三视角很坑!
欢迎留言提问交流,也可加博主QQ群讨论交流 275726515
完结。。。