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 实现及踩坑记录_第1张图片

 如果没有安装,点击右侧,下载安装即可

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

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第2张图片

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

Currently selected scripting backend (IL2CPP) is not installed

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

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第4张图片

参考博客: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 实现及踩坑记录_第5张图片

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

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第6张图片

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

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

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

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

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第7张图片

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

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

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

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第8张图片

 

下面使用VS打开SpectatorViewSample.sln

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

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第9张图片

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第10张图片

 

接下来,将设备使用自带的USB线连接到电脑上等待识别,识别完成后点击部署

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

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

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

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第11张图片

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

 

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

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

 

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第12张图片

安装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】到你常用的项目目录中,这里不要破坏目录层级

 

采集卡相关坑:

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

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

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

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

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

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

 

opencv配置相关坑:

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

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第14张图片

 

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

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

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

 

1.Calibration

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

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

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第15张图片

在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,所以我改的是下图位置的部分

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第16张图片

 

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

这里的坑:

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第17张图片

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 实现及踩坑记录_第18张图片

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第19张图片

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第20张图片

 

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第21张图片

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第22张图片

 

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第23张图片

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

 

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第24张图片

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

Unity 3D Hololens 第三人称视角Spectator View 实现及踩坑记录_第25张图片

 

在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

完结。。。

 

 

你可能感兴趣的:(Hololens,第三人称视角,Unity)