MR——Hololens2开发记载

一、混合现实与Hololens2设备简介

        

        传统的人机交互主要是通过键盘和触摸,包括并不能被精确识别的语音等。HoloLens的问世,为创造更加自然的人机交互体验指明了道路。Microsoft HoloLens 混合现实头显由Microsoft 公司于北京时间2015年发布的一款完全不受束缚的全息计算机,HoloLens眼镜可以通过追踪用户的头部和眼睛的位置和方向,以及识别周围环境的特征,来生成对应的虚拟对象,并通过光学投射的技术将其呈现在用户的视野范围内,用户可通过手势在真实环境当中与虚拟3D对象进行交互

        如图所示,继HoloLens之后,Microsoft公司在2019年推出了第二代混合现实设备HoloLens2,通过对HoloLens(第一代)全息计算功能的改进,它能够让用户更加方便地在混合现实环境中进行协作和交流,提高工作效率和精度。同时,该产品还提供了更多的功能和选项,让用户能够更加灵活地进行操作和控制,实现更加个性化的混合现实体验。

                

        HoloLens2通过配备了第二代自定义构建的全息处理单元,可进行手势交互、空间映射感知以及运动跟踪等功能的计算处理。HoloLens2的透明全息透镜,利用光波导的光线传输技术实现虚实融合的裸眼现实效果,结合设备内部的深度感知传感器及摄像头通过多传感器融合算法实现三维注册、手势识别、现实与投影结合、摄影摄像等。

        由于Hololens设备采用光波导显示技术,设备生成的全息图只能以叠加的方式覆盖在环境之上,即我们既能看到全息图也能看到其背后的真实环境,Hololens设备无法将环境信息移除,而我们也无法生成纯黑颜色,所以全息图不能渲染黑色(黑色会渲染成全透明),越明亮的全系图在Hololens设备中显示越清晰。

二、开发环境

1、Hololens部署——利用Unity开发

Hololens的部署有三种方式:①通过usb ②通过WIFI ③通过Web

但通过验证,USB来进行部署会是最简单的方式,不容易出错且耗时较少。目前已试过通过WIFI与WEB,这两个在我的电脑都有不同形式的问题错误出现,出于时间考虑,就单纯使用USB进行部署,以下是部署方式及注意事项。

  • 在Build Setting中将Build And Run on选择为USB Device
  • Target SDK Version选择为VS中所安装的SDK版本
    • unity--->VS,架构选择x64
    • VS----->Hololens,架构选择ARM64

2、Hololens调试

  1. 在Hololens中打开Microsoft Store,下载并安装Holographic Remoting。
  2. 打开Holographic Remoting,可以看到Hololens的IP地址。
  3. Unity中选择Window的XR,选择远程调试
    1. Emulation Mode 选 Remote to device,连接后直接在Unity场景中进行调试,可同步在Hololens2设备中显示出来。

3、常见开发问题

①XR Setting中出现多个XR SDK。

解决方案是打开  Window>PackageManager 然后删除所有有带XR名字的包。

hololens2部署时出现以上三个错误,但辨别根源无法确定。

需注意mrtk及VS版本问题,均需使用最新版,旧版存在bug。

③Unity打包VS部署Hololens2找不到WindowsMobile SDK

具体报错信息“WindowsMobile  version 10.0.xxx.0”

这不是Unity的Bug,而是MRTK的问题,主要原因是VS在编译的时候是默认UWP相关SDK在C:\Program Files (x86)\Windows Kits中的

解决方案一:(每次打包都得操作一次)在解决方案资源管理器中找到

[项目]>引用>Windows Mobile(带黄色感叹号)直接右键删掉

解决方案二:(从根源解决问题)把下载的WindowsMobile SDK从下载的目录

[Windows Kit Root Dir]\10\Extension SDKs\WindowsMobile

拷贝到C:\Program Files (x86)\Windows Kits\10\Extension SDKs\

而且这个问题只要官方不修复,按道理说每个人都会遇到,因为Window10SDK不能安装在URL过长的目录下也就是说不能安装到VS编译时的默认目录,所以在问题修复之前HoloLens开发者们只能硬生生踩到这个坑里了。

④关于VuforiaSDK最新版无法导入问题

从 PackageManager 再重新安装一遍 vuforia 旧版本(注意检查,如果有 Assets -> Editor -> Migration 这个目录,那么就删除掉 Migration 这个文件夹)

直接点击Feeds进入下载页面:点击 Download 进行下载。

下载完后解压缩,得到这样一个目录:

把 package 目录下的所有东西进行复制,然后来到我们项目的 Libary -> PackageCache 文件夹下(这个文件夹才是真正存放我们安装的 package 的地方):

打开 vuforia 的包:里面文件的名字和刚才复制的那些文件的名字是一样的。这里直接把这些文件全部删除掉,然后把刚才复制的粘贴进去即可。

这样,Unity从外部看,发现不出任何端倪,Unity 会认为安装的还是旧的版本。而实际上,已经偷梁换柱的把最新的版本成功导入到 Unity 中啦!

PackageManager认为我们安装的是旧的版本

而VuforiaConfig则显示我们已经是最新版本,而且API是可以正常调用的。

4、开发注意点

  1. Hololens的MRTK可以与高通的Vuforia进行联通使用,但是需要注意的时Vuforia需要最新版本,Package Manage中的版本不适合。同时需先启用Vuforia的ARCamera,再安装MRTK,软件会自动兼容。
  2. 预设体放置操作界面时,可对其进行解出关联,然后才能自由对里面的脚本对象进行操作,未解绑修改会直接影响预设体的原先内容。
  3. MRTK中HandConstraintPalmUp脚本可直接对手掌翻转进行操作。需使用手掌时需另外加入SolverHandler脚本。
  4. 项目开发过程中,更改版本或者新填SDK,要注意版本备份。
  5. 新填SDK开发,需另外开辟个项目进行试用,运行demo以及烧录到模拟器或者真机中运行测试,测试完毕后才能到项目中进行开发。

 三、MRTK常见操作

1、MRTK 支持编辑器中的输入模拟。

单击 Unity 的播放按钮以运行场景,然后使用以下按键来模拟输入:

  • 按 W、A、S、D 键可移动相机。

  • 在按住鼠标右键的同时移动鼠标可以四处浏览。

  • 按空格键(右手)或左 Shift 键(左手)以显示模拟双手

  • 按 T 或 Y 键以将模拟双手保持在视野中(按空格键(右手)或左 Shift 键(左手)可自由控制双手)

  • 按 Q 或 E(水平)/R 或 F(垂直)来旋转模拟双手

  • 按下Ctrl+Shift移动鼠标控制旋转手部关节

2、常用组件

1、附加 ObjectManipulator.cs 和 NearInteractionGrabbable.cs 脚本,使对象可抓取 。

ObjectManipulator 支持近距离和远距离交互。 可以使用 HoloLens 2 的精确手动跟踪输入(近距)、手部射线(远距)、运动控制器光束(远距)、HoloLens 凝视光标和隔空敲击(远距)来抓取和移动对象。

2、 将 BoundsControl.cs 分配到某个对象以使用边界框(用于缩放和旋转对象的界面)。 

3、 MRTK按钮使用一个ButtonConfigHelper组件来帮助您更改按钮的图标,文本和标签。

3、MRTK SDK包具体内容

①Microsoft.MixedReality.Toolkit.Unity.Foundation.2.6.1Must

②Microsoft.MixedReality.Toolkit.Unity.Tools.2.6.1Optional

③Microsoft.MixedReality.Toolkit.Unity.TestUtilities.2.6.1Optional

④Microsoft.MixedReality.Toolkit.Unity.Extensions.2.6.1Optional

⑤Microsoft.MixedReality.Toolkit.Unity.Examples.2.6.1Optional

四、MRTK概述及架构体系 

1、MRTK中主要的系统概述

①边界系统---- 边界系统为可视化VR应用中虚拟现实边界(Boundary)提供了支持。边界定义了使用者配戴VR头显可以移动的安全区域,边界是沉浸式体验的重要组成部分,可帮助使用者在佩戴VR头显时避免看不见的现实障碍。
②相机系统---- 相机系统使MRTK能够配置和优化特定硬件平台应用程序的相机,使用相机系统,可以对VR、AR、HoloLens设备编写一致的应用程序,而无需通过代码来区分和适配每种设备
③诊断系统---- 诊断系统提供了应用程序运行时的性能诊断工具,以方便分析应用程序性能问题。
④输入系统---- 输入系统以完全相同的界面处理不同的输入源输入,定义抽象操作,并可以通过光标和焦点形式驱动UI元素。
⑤场景系统---- 管理多场景工程各场景加载、切换、卸载任务。
⑥空间感知系统---- 空间感知系统提供对真实世界的环境感知,在HoloLens中,空间感知提供真实环境的场景表面几何网格,允许虚实交互。
⑦传送系统---- 对于沉浸式HMD体验(OpenVR、WMR),传送系统可用于在不实际移动使用者身体的情况下漫游虚拟环境。
针对HoloLens2设备,MRTK提供了默认的DefaultHoloLens2ConfigurationProfile配置文件及其所属子配置文件簇,该配置文件簇确保了所用配置通用可靠,在进行项目配置时,建议以该配置文件簇为基础进行针对性的优化,更快速和安全。
程序在运行中,配置文件可通过代码方式进行替换。

2、全息远端呈现

1、unity中运行,hololens端展示,同时在unity端可观看到,渲染在hololens本机上。(需要Hololens端安装软件)

2、渲染在PC端,渲染后的数据流传送到Hololens端展示,需要代码实现。

3、BoundsControl(边框控制)

①一定要有boxcollider脚本,其他碰撞器不显示
②主要功能为缩放和旋转以及对应的hololen2材质,平移功能不建议使用BoundsControl组件,使用ObjectMainpulator来实现。
③可通过代码来实现

4、ObjectManipulator

(无人机操控可以用两个小圆球来控制,一个控制左右,一个控制前后、单个大圆球也可以)
①加入重力刚体rigidbody组件,可以模拟一个角速度和惯性。
②自动附带平移功能
③一定要有boxCollider脚本,用于控制物体
④与boundsControl不同,BoundsControl有相应边框,而且无法360自由旋转,只能通过变换边框4角进行控制,而ObjectManipulator无边框并且可以360旋转,更加真实。

5、ConstraintManager

①有个约束面板空间的功能
②管理约束组件的,仅与BoundsControl和ObjectManipulator两个组件配合使用。
③Auto与Manual的区别为,Auto模式添加的组件那是自动应用于整个对象物体,而Manual模式需要手动添加组件才能应用。

6、Interactable

①交互展示(外观),与ObjectManipulator组件的不同之处是ObjectManipulator侧重于对虚拟对象的操作,而Interactable侧重于交互过程。

7、指尖及手部可视化

①建议实际运行时取消手部关节和网格渲染的可视化
②指尖关节可加上

8、弹性系统与Dock系统

①弹性系统可实现回归原位的效果,针对操作圆球
②Dock系统为停靠系统,通常可进行归类停靠

9、按钮

①修改按钮大小,需要修改控件中三个地方的大小,分别为前面板、后面板及按钮交互大小

10、Slate面板与系统键盘

①Slate面板可以放置视频等其他操作
②系统键盘在Editor上显示不出来,但是可以通过代码里实现

11、ToolTips和Slider

①ToolTips为标注
②可增加ToolTipSpawner组件,实现聚焦时出现标注功能
③Slider为滑条

12、近身菜单、应用程序栏和进度指示器

①应用程序栏可增加虚拟对象的跟随、关闭功能按钮。

13、对话框和手势引导

①对话框通常由代码进行控制

14、运动跟踪

①使用PositionalLocatorState枚举进行检测当前运动跟踪状态,或者使用Unity中的Player简单设置当运动跟踪失败时显示的照片,减少用户焦虑。
②空间感知
无---不显示网格
可见-显示网格
遮挡-虚拟物体可被现实物体遮挡

15、空间感知操作(模拟和实际)

①可以通过设备门户生成当前空间的空间网格文件,直接用于模拟测试
②应用程序中尽量用代码来控制空间感知网格的开启或关闭

16、手势录制回放与手部菜单

①可以在untiy中录制相关的手势操作,并存在本地文件中,后续可以在unity中进行回放。
②功能:1、创建交互、操作过程的自动测试模板,不用每次都重复性测试操作
2、教育用户
3、重现问题

17、语音命令

①组件名:SpeechInputHandler

18、MRTK标准着色器

MRTK将渲染模式(Rendering Mode)分为不透明(Opaque)、镂空(Cutout)、渐变(Fade)、透明(Transparent)、叠加(Additive)、自定义(Custom)6种类型。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!对于使用Unity开发Hololens 2的MR应用程序,你可以参考以下步骤: 1. 安装所需的软件和工具:首先,确保你已经安装了Unity引擎和Hololens 2的开发工具包(HoloLens 2 Development Edition)。可以从Unity官网下载Unity引擎,而Hololens 2的开发工具包可以从Microsoft官网获取。 2. 创建新项目:打开Unity引擎并创建一个新项目。选择3D模板,并确保选择了Universal Windows Platform作为目标平台。 3. 配置项目设置:在Unity中,进入“Edit”菜单,然后选择“Project Settings”和“Player”。在Inspector窗口中,展开“Universal Windows Platform”选项卡,确保选择了正确的目标设备(Hololens 2)。 4. 导入Hololens 2的软件包:使用Unity的Package Manager导入Hololens 2的软件包,这将提供Hololens 2的功能和性能支持。 5. 创建场景和对象:使用Unity的编辑器创建场景,并向场景中添加所需的3D对象、UI元素和其他交互元素。 6. 调整摄像机设置:对于Hololens 2应用程序,摄像机设置非常重要。确保将摄像机设置为适应Hololens 2的视野范围和显示要求。 7. 添加MR功能:使用Hololens 2的软件包中提供的API和组件,添加MR功能,如手势识别、语音识别和空间映射等。 8. 进行测试和调试:在Unity引擎中,可以使用模拟器进行初步的测试和调试。但是最好在实际的Hololens 2设备上进行真实环境的测试。 9. 构建和部署应用程序:完成应用程序开发后,使用Unity引擎的构建工具将应用程序打包为Hololens 2所需的应用程序包(.appx)。然后,将该应用程序包部署到Hololens 2设备上进行使用。 希望这些步骤能够帮助你开始使用Unity开发Hololens 2的MR应用程序!如有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值