Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

硬件需求

1.两台Hololens设备

2.一个视频采集卡

3.一个有HDMI输出的摄像机

4.一根正常的HDMI线,一根HDMI转MicroHDMI的线(因为相机的HDMI接口是小口的HDMI接口)

实现过程记录:

首先我在某宝租了两台hololens设备,在某东买了一个视频采集卡,手头有一架支持HDMI的单反。

Unity使用的是2017.4.16版本,

在Build Setting中切换平台为windows

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

 如果没有安装,点击右侧,下载安装即可Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

 安装好之后会报错显示,没有安装Win10 SDK

我们打开Visual Studio Installer,选择自己的VS版本,点击【修改】,选择【单个组件】,添加如下组件

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

 这些内容大约有13个G,安装完成后,重启unity发现SDK安装成功,但报了新的错误如下

Currently selected scripting backend (IL2CPP) is not installed

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

 解决办法是,进入Player Setting,找到Windows平台,将Other Setting中Scripting Backend 改成.Net即可

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

参考博客: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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

参考博客:https://blog.csdn.net/u014778991/article/details/54965132

更新成功后,再次Build,又出了新的错误,如下

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

看这个描述,貌似是让我把Nuget再还原回3.5的版本 =.= !。。。。。。。。。。。。。。。。

于是我就去官网重新下载nuget的3.5版本,替换回来,重新Build

这回多等了一会,就可以发布成功了 -。- 

===========================================================》》

Build的时间比较长,发布好的文件如下

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

-=-=-=-=-=-=-=-==-= 20190221

下面来操作从git上下载的官网示例项目,拷贝一份(养成好习惯),因为我这边采集设备还没有到货,就先做下将项目部署到Hololens上。

使用Unity打开目录 SpectatorView\SpectatorViewSample 下的Unity工程

因为上面我们已经做好了准备工作,这里直接Build出来。。。(官方项目是只有一个Cube,并且手势“捏”会出现白色sphere)

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

 

下面使用VS打开SpectatorViewSample.sln

如果却少VS的组件,打开时可能会提示,按需求安装即可(强烈建议将VS安装到C盘,否则可能会出各种莫名其妙的问题)

下面将调试设备选择成Device,在调试前可以将自己电脑的Windows 10 系统设置成开发模式

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

 设置开发模式的方法:左下角Windows,点击设置,搜索开发者选项,设置一下即可,(同样会下载一些东西)

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

 

接下来,将设备使用自带的USB线连接到电脑上等待识别,识别完成后点击部署Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

会看到项目在编译,然后会提示要求输入设备的PIN码,这里的PIN码是指Hololens的PIN码

获取hololens的PIN码:Setting-Update& Security-For Developers-Device-discovery 的 Pair 会出现PIN码。

获取到PIN码后,输到VS中。

然后在解决方案管理器右键属性中,将平台选择为x86

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

接下来再发布,项目在hololens端会直接运行。到这部署阶段完成

 

==============20190326

延迟了很久,今天采集卡到货,继续往下调

 

首先来调采集卡,把线接上,安装Desktop Video Installer v10.11.4

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

安装Blackmagic DeckLink SDK10.11.4 和 opencv 3.4.1 (Opencv的版本我这边只能使用固定的版本即3.4.1)

接下来接好设备,如图

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

 

下面正式开始第三视角的各个步骤

1.Calibration

2.Compositor

3.编译并部署Provider

4.双hololens无线连接unity,在unity端远程实现第三视角

 

准备工作:

官网下载官方第三视角工程:https://github.com/Microsoft/MixedRealityCompanionKit/tree/master/SpectatorView

整体拷贝文件夹【SpectatorView】到你常用的项目目录中,这里不要破坏目录层级

 

采集卡相关坑:

我这里用的采集卡其实是采集盒,为了在笔记本也可以使用,所以可能就会有接触不好,采集不到信息的问题

那么如何判断我的采集卡是否接触良好呢?

待补图Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

在资源管理器中,打开【声音,视频和游戏控制器】,下面要有三个BlackMagic的内容,并且无黄色叹号,代表接触良好。

如果不够三个,换接口插,

如果有黄叹号,插好采集卡,然后重启计算机

 

opencv配置相关坑:

openvc所谓的安装,其实就是解压,解压到任意路径即可(不要有中文)

接下来就要配置环境变量,坑就在环境变量的结尾一定要有斜杠,不然后面会有很蛋疼的问题

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

 

声明:因为有两台hololens,这里

和相机在一起的hololens称为:第三视角提供者

另一台称为:第三视角使用者

 

1.Calibration

这一步的详细步骤,网上已经有很多大神发出来了,下面会发出相关链接,我这里简单的地方就不再赘述

打开dependencies配置,opencv和black magic的路径,

打开stdafx.h中,找到如下内容,填写【第三视角提供者】hololens的登录用户名和密码

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

在vs中选择release,x64,

下面在解决方案上右键,还原Nuget,

接下来在Calibration上右键,生成

生成这步的坑:

有可能生成会失败报错,一般会出问题的地方只有路径配置错误或者opencv和采集卡SDK的版本不对应的问题,

1.路径配置错误,vs会报错找不到decklinkXXX,或者找不到opencvXXX,这里你就要检查一下你的路径了

2.opencv版本的问题,如果报错为,opencv的XXXX341,(结尾有一个数字),这个数字就代表,当前需要的opencv版本,这里的341就对应着opencv-3.4.1

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

下载对应版本替换即可。

还有一个要说的就是,全部使用vc14的内容,不要使用vc15!!!!

3.采集卡SDK,我这边没遇到问题,不过不要放在中文路径

下面编译成功后,可能会有两种情况

在根目录找到x64,release,里面的exe,右键管理员身份运行,闪退(这个问题我没有解决,可能有的人就不闪退)

我这里就是编译成功后,直接在vs端,调试运行程序

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

运行后可能会遇到白屏。opencv的环境变量配置是否正确,

如果运行后,画面没有相机的画面,那么你就要检查下你的采集卡接触是否良好(如何检查在上面已经写了,在资源管理器中看)

4.如果这里运行时白屏(或者蓝屏等等就是单色的啥也没有),找到DeckLinkManager.cpp,找到

videoDisplayMode = bmdModeHD1080p5994;

改成

videoDisplayMode = bmdModeHD1080p30;

注意要修改对应你相机分辨率的那一档,我的是1080P,所以我改的是下图位置的部分

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

 

如果到这步你的相机画面可以正常采集到,并显示在calibration.exe中,现在你就可以拿着棋盘格的那张纸,站在相机前面。

这里的坑:

相机会拍照,并保存照片到C盘的目录中(C盘,user,文档,CalibrationFile中),但hololens无论如何也不会拍照,并显示为红色,具体错误如下图

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

hololens采集不到图像并且不拍照的原因是,新机器没有添加过【网站证书和许可】,

 

我们把hololens通过自带的usb数据线连接到电脑(资源管理器发现hololens为已连接),打开Edge浏览器(推荐),在浏览器中输入 http://127.0.0.1:10080 回车进入,这时需要有一个人戴着这个配对的设备,打开网页时在hololens中会弹出pairing码

将paring码填到网页中,并按照网页上的提示,安装证书,和登录设备,登录成功后,网页会显示设备的管理界面

 

这时将hololens用usb连接到电脑上,再次运行calibration工程,即可成功拍照,

按照官方要求,拍了足够数量的照片后,在calibration上,按回车,即会生成校准文件

 

2.Compositor

这一步的主要工作就是通过解决方案Compositor来生成unity端必需的dll和一些其他文件,一共七个,如下

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

使用VS打开Compositor项目,确保dependencies.props的路径配置正确后,编译这个项目

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

注意,这两个项目都要编译一下,Release x64的,编译通过之后,运行copydll.cmd即可将这些文件复制到默认的unity工程SpectatorViewSample中

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

 

如果这一步失败,也可以手动将这些生成好的必须文件,添加到SpectatorViewSample工程中,目录请参考下图

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

只有正确提供了这些文件,unity端才能正确显示视频合成窗口

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

 

3.编译并部署Provider

Provider是第三视角提供者中,需要运行的程序,

使用VS打开SpectatorViewPoseProvider,这是一个已经写好的hololens工程,可以通过usb部署到hololens中,

我们需要将这个项目,部署到【提供者】的hololens中

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

 

这里就涉及到hololens和电脑的另一种配对关系,VS会提示需要Pair码,我们在hololens中,update的开发者选项中可以找到这台设备的pair码,输入到vs中即可。

 

运行成功后会在hololens中部署Provider程序。

 

4.双hololens无线连接unity,在unity端远程实现第三视角

要实现远程连接Unity与hololens,我们需要在hololens中安装一个程序

Hololens Remoting player

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

在Hololens内置的资源商店中可以找到它,安装好后在Hololens中打开Hololens Remoting player,会显示本机IP

 

下面在unity中,如果平台正确切换到了UWP平台,可以在Window-XR目录下找到Holographic Emulation,

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

使用这个功能需要勾选下面这个选项,如果点击Connect报错,就勾选选项后,重启unity

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录

 

在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

完结。。。