基于MRTK_v1的WMR、HoloLens开发实践

什么是MRTK?

MRTK-Unity是一个由Microsoft驱动的项目,提供了一组组件和功能来加速Unity中的跨平台MR应用程序开发。

第一版的MRTK原名叫HoloToolKit,后面更名为MRTK,目前已经更新到MRTKv2版,新版支持HoloLens2。本文我将一代MRTK称为MRTK v1。

MRTK v1简述

发布包下载地址: https://github.com/Microsoft/MixedRealityToolkit-Unity/releases

发布包名称: HoloToolkit 2017.4.3.0 - Refresh

发布包说明:此版本针对Unity 2017.x产品

  • 支持 HoloLens1 & immersive headsets (混合现实耳机)
  • Unity版本:最低-Unity2017.2及以上,推荐-Unity2017.4 LTS(长期支持)
  • Visual Studio 2017(15.3或更高版本)
  • Win 10 SDK:最低-Windows SDK10.0.16299,推荐-Windows SDK 10.0.17134
  • Win10系统版本要求:Windows 10 Fall Creators Update (1709) 或者更新
    • 推荐系统版本:Windows 10 April 2018 Update (1803)

导入包并设置

选择菜单栏中的Mixed Reality Toolkit,分别Apply一下Project和Scene Settings,选项方面保持默认设置即可。
基于MRTK_v1的WMR、HoloLens开发实践
设置完成后,场景结构如下,这里我简单添加了几个物体方便测试。
基于MRTK_v1的WMR、HoloLens开发实践

  • MRTK为我们创建了一个相机预制体:MixedRealityCameraParent基于MRTK_v1的WMR、HoloLens开发实践
    • 查看相机挂载脚本我们可以得知它是能够同时支持HoloLens以及WMR头盔的,也就是我们这个项目能够在HoloLens和微软的VR头盔中运行,MRTK已经帮我们实现了在两种不同设备上的适配。

    • 在Inspector可以看到两种不同设备的参数

      Opaque-不透明 => 对应的是WMR设备,Quality质量选项被设置为了Ultra最高品质,由于WMR头盔是接在PC上的,性能关键在于PC,因此可以调到最高品质获得更好的显示效果。

      Transparent-透明 => 对应的是HoloLens设备,Quality质量选项被设置为了Very Low,由于受限于HoloLens是移动设备,硬件方面相对较弱,因此我们需要牺牲品质,提高帧速率,以保证软件的运行稳定性。

在WMR设备中运行测试

前置工作

接上头盔并配对好手柄

相关配置
1.用户高度

这里我创建的Plane地板坐标为(0,0,0,),因此我们还需要适当调高MixedRealityCameraParent以确保用户刚好站在地板上,这里我设置为(0,1.7,0),同时地板需要加上碰撞器,我们才能够使用手柄位移。基于MRTK_v1的WMR、HoloLens开发实践
如果不希望用户能瞬移其它带有碰撞器的物体上的话,勾选上Stay on the floor选项确保用户保持在地板上。

2.MotionController(手柄)
基于MRTK_v1的WMR、HoloLens开发实践
  • 这里我们可以将左右手柄模型替换成刀、枪之类的炫酷模型,通过设置Alternate Left/Right Controller属性,同时勾选上Always Use Left/Right Model
  • 如果不需要的话,最好把MRTK设置的默认备用模型ControllerRect去掉,要不然有时候手柄会莫名其妙就变成ControllerRect方块。
    基于MRTK_v1的WMR、HoloLens开发实践
开启抗锯齿优化显示效果

在头盔中测试,可以看到模型边缘锯齿是比较严重的,因此我们需要优化一下。基于MRTK_v1的WMR、HoloLens开发实践
选中相机,调整相机组件参数,将渲染路径修改为Forward并勾选上MSAA,正向渲染才能能够支持MSAA
基于MRTK_v1的WMR、HoloLens开发实践
Quality设置中,将抗锯齿等级调到最大基于MRTK_v1的WMR、HoloLens开发实践
再次测试,模型边缘锯齿的问题明显改善
基于MRTK_v1的WMR、HoloLens开发实践

在HoloLens1中运行测试

前置工作

在HoloLens中安装好Holographic Remoting应用,打开应用并记住显示的IP地址,后面要用到

使用Holographic Emulation测试

在Unity中选择 Window - Holographic Emulation ,输入HoloLens中显示的IP地址
基于MRTK_v1的WMR、HoloLens开发实践
点击Connect后再点击Unity的播放按钮,就可以在HoloLens中看到画面了。

这个功能虽然很方便,但特别地卡,时不时就卡死动不了,实属鸡肋。。。因此基本可以忽略,一般直接打包测试或者使用HoloLens模拟器测试(如果电脑支持的话)

打包

Build Settings

**注意:**这里演示使用的Unity版本是2018.4.1f1,实际应该使用2017.2 - 2017.4.1f1来打包,否则会有问题
基于MRTK_v1的WMR、HoloLens开发实践
Target Device:如果是需要发布到WMR设备上运行则选择PC,反之选择HoloLens

Player Settings

在XR Settings中将Stereo Rendering Mode设置为Single Pass单通道以提高渲染效率

注意:如果是发布到HoloLens,需要勾选上Windows Mixed Reality中的Enable Depth Buffer Sharing,图像才不会有抖动的问题。
基于MRTK_v1的WMR、HoloLens开发实践

输出应用程序包

  • Build完成后,打开生成好的解决方案,右键解决方案 - 应用商店 - 创建应用程序包
    基于MRTK_v1的WMR、HoloLens开发实践
  • 选择旁加载包 - 下一步,勾选x86 Release,创建包
    基于MRTK_v1的WMR、HoloLens开发实践

安装应用

  • 导航到上面应用程序包输出的位置
    基于MRTK_v1的WMR、HoloLens开发实践

  • 对于WMR设备,双击安装包安装即可

  • 对于Hololens设备,我们需要在Windows设备门户中安装,首先要确保HoloLens与使用的PC处于同一局域网内。
    然后在浏览器中输入HoloLens设备的IP地址,配对好后就可以进入如下界面为HoloLens安装应用。
    基于MRTK_v1的WMR、HoloLens开发实践
    我们也可以通过VS将应用部署到HoloLens,记得要设置为Release x86
    基于MRTK_v1的WMR、HoloLens开发实践
    选择远程计算机,这里手动输入HoloLens设备的IP地址,或者在检测到的设备中选择,等待部署完成就可以在HoloLens中看到安装好的应用了。
    基于MRTK_v1的WMR、HoloLens开发实践

References:
HoloToolkit 2017.4.3.0发行信息
Unity 2017 XR 开发技巧