Hololens 2应用开发系列(2)——MRTK基础知识及配置文件配置(上)

news/2024/7/27 8:38:18/文章来源:https://blog.csdn.net/qq_44746401/article/details/136414600

Hololens 2应用开发系列(2)——MRTK基础知识及配置文件配置

  • 一、前言
  • 二、MRTK基础知识
    • 2.1 MRTK概述
    • 2.2 MRTK运行逻辑
    • 2.3 MRTK配置文件介绍
    • 2.4 MRTK服务
  • 三、配置文件使用
    • 3.1 总配置文件
    • 3.2 相机配置
    • 3.3 其他配置
  • 参考文献

一、前言

在前面的文章中,我们已学习了使用MRTK在Unity中设置混合现实场景并进行程序模拟,其中,对于检查器中MRTK的各项配置大家可能还难以捉摸。虽然微软官方为我们提供了一些使用教程,但内容却缺乏对项目的针对性,使我们在了解过程中,难以确定某些设置是否是我们所需要的,这样设置是否正确。因此本文在介绍这些配置之前,先对MRTK的基础知识进行讲解,然后再对具体配置进行介绍。下面,让我们开始吧。
MRTK

二、MRTK基础知识

2.1 MRTK概述

MRTK是一个由微软公司驱动的统一、跨平台、支持AR/MR/VR设备开发的框架。它支持如Hololens、HTC、Oculus等多种设备,并添加了多种对不同XR插件的支持,如OpenXRWindows XRARCore XR等,各个XR SDK对应着不同类型的设备和平台,在Unity编辑器的项目设置中,我们可以在选择指定平台后找到其对应的XR插件,如下图所示。
XR SDK
具体来说,MRTK本身提供了一系列预构建的组件和服务,包括输入系统、交互对象、空间感知、UI元素以及演示场景等,但它并不直接处理底层XR平台的具体实现细节,比如硬件驱动通信或操作系统级的接口调用,而XR SDK则是专门用来整合和管理特定XR功能的软件开发套件,它们通常提供更底层的API来访问和控制硬件的功能,例如眼动追踪、手势识别、空间定位等。不同的XR SDK针对不同的硬件平台进行优化,以确保应用程序能够充分利用各个平台的独特功能。针对HoloLens 2我们通常使用OpenXR来进行项目的编写和构建。如需针对其他平台配置MRTK,请参考微软官方文档。
MRTK利用Unity配置MR应用的所有功能特性,需要我们使用配置文件Profiles对这些功能进行管理,通过配置文件,我们不仅可以定制所有功能,还可以替换掉默认的功能执行方式来执行自己的逻辑。·

2.2 MRTK运行逻辑

区分于Unity对象管理和生命周期控制的核心逻辑以及程序设计的核心逻辑(通过继承MonoBehaviour类依靠对象的事件函数编写应用,或使用单例模式控制共享运行组件),为保障AR/MR应用对全局内容和全部生命周期的控制,MRTK把所有需要共享运行的组件改成了服务(Service),构建了一个服务容器,对上提供服务,对下执行具体实现,大大提高了整体框架的灵活性和可扩展性。参考MRTK2体系结构概述,其体系架构如下图所示。
MRTK体系架构
MRTK有多个核心服务,其互相配合或独立运行,全部共享相同的生命周期——启动、注册、更新和卸载,该生命周期与Unity的MonoBehaviour生命周期不同。MRTK对象(即之前提到的MixedRealityToolkit对象)用于管理其服务的生命周期和运行,此对象可确保程序开始时,服务的启动和初始化按预定义的顺序进行。
在结构的最上层,MRTK采用事件驱动,通过MixedRealityToolkit对象内挂载的Unity对象函数,处理来自Unity分发的事件消息,实现Unity消息与MRTK服务之间的通信,确保数据从低层级通过事件处理函数向高层级之间的流通。

2.3 MRTK配置文件介绍

MRTK通过使用配置文件定义应用程序的功能和其适用的目标设备,因此,错误的配置文件可能会导致程序在指定设备上无法运行。MRTK有一个总体的配置文件,该配置文件是一个可编程对象,用于存储全局数据,同时其又包含了许多子配置文件的定义,形成了一个配置文件树,与此对应的,在配置面板(选中MixedRealityToolkit对象后,Inspector检查器中会自动添加MixedRealityToolkit的配置面板)上我们不难发现,每一个标签页面都有其相关的配置文件选择,如下图所示。
MRTK配置文件介绍
配置文件指导了MRTK的运行有哪些功能,这些功能大都以服务形式提供,因此,配置文件的正确使用很关键。在了解这些配置文件之前,请先行继续了解MRTK的服务基础知识。

2.4 MRTK服务

MRTK中的服务可分为三类:原生服务扩展服务数据提供者。MRTK负责协调处理服务间的交互,确保服务得到所需的事件消息(AwakeInitializeUpdateDestroy等)。MRTK的服务通过服务容器进行管理,服务容器的实现通过MixedRealityServiceRegistry类,它是服务的所有者,原生服务扩展服务都必须先在它上面注册才能使用。
原生服务顾名思义,是MRTK官方的服务类型,它提供了混合现实的核心功能服务,包含相机(Camera)输入(Input)边界(Boundary)传送(Teleport)空间感知(Spatial Awareness)诊断(Diagnostics)场景(Scene System) 七个模块。如果用户希望定义自己的服务处理逻辑,可继承BaseService或实现IMixedRealityService接口,以正确地被MixedRealityServiceRegistry服务容器管理。由开发人员创建的服务都称为扩展服务,MRTK在配置面板上提供了可视化的服务创建向导,后续将对其进行详细介绍。
数据提供者向特定服务(输入、空间感知)提供支持,所有数据提供者都需要实现IMixedRealityDataProvider接口,同时必须在服务配置文件中配置才能在MRTK中使用。

三、配置文件使用

微软官方为我们提供了配置文件配置指南,每个项目都需要根据项目功能、目标设备等进行配置。下面是针对Hololens 2设备配置文件的详细介绍。

3.1 总配置文件

MRTK的总配文件在配置面板的最上端,提供了若干默认配置。参考微软文档配置文件,其中,DefalutLeapMotionConfigurationProfile是用于配置手部追踪的特定配置文件,OpenXRConfigurationProfile是与OpenXR兼容设备的一个配置文件,OpenXR是一个由Khronos Group维护的开放标准,旨在简化和统一跨增强现实(AR)和虚拟现实(VR)平台的应用开发过程。而以Obsolete开头的,是已过时的配置文件,通常用于Unity 2019以前版本。
针对HoloLens设备,DefaultMixedRealityToolkitConfigurationProfile是一个通用配置文件,它未针对任何特定用例进行优化,可同时适用于HoloLens第一代和第二代设备。如果想要使用更适合其他平台的更高性能/具体的设置,可选择DefaultHoloLens2ConfigurationProfile或针对HoloLens1的DefaultHoloLens1ConfigurationProfile
总配置文件
DefaultHoloLens2ConfigurationProfile配置文件与通用配置文件DefaultMixedRealityToolkitConfigurationProfile之间的主要区别是启用了眼动追踪和视线输入模拟,而禁用了边界系统、传送系统等功能。
为了确保默认配置的有效性,MRTK锁定了默认配置文件的修改,因此我们需要通过Clone按钮来新建和定制自己的配置文件。
默认情况下,配置文件均位于项目根目录的Assets\MixedRealityToolkit.Generated\CustomProfiles文件夹中,您可在该目录找到针对您项目生成的配置文件。

3.2 相机配置

相机配置文件定义了所使用的渲染相机参数,该配置文件由主配置文件管理,在配置前,首先要确保相机系统的开启,即Enable Camera System被勾选。然后Camera System Type选择默认即可,它是MRTK预定的基础的摄像机系统类型,MRTK提供的默认类实现是MixedRealityCameraSystem,这块只有一种选项,暂时无需纠结,微软官方也尚未对其进行解释(如果您找到了相关说明感谢在文章下方分享并评论)。然后,根据需求选择所需的配置文件,Clone即可。此时,配置面板出现如下相机设置内容。
在这里插入图片描述
Camera Settings Providers相机设置提供程序负责处理与混合现实应用中的相机相关的设置和行为,它是为了处理不同混合现实平台和设备特定的相机设置需求而设计的,以增强不同的MR头戴式设备的不同的光学参数、渲染要求和立体视觉实现方式下的跨平台兼容性,并对镜头畸变、空间感知等进行优化。并非所有平台都需要相机设置提供程序。如果没有与运行应用程序的平台兼容的提供程序,Microsoft 混合现实工具包将应用基本默认值。同时,我们也可以针对自己的平台创建相机设置提供程序,详细可参考这篇文章。对于HoloLens 2应用开发,我们选择其默认的配置即可。
Display Setting显示设置是相机运用时的一些配置设置,包含Opaque(不透明的,针对VR)和Transparent(透明的,针对MR)两组设置,对于HoloLens 2,我们只需设置Transparent内容即可。其中包含近平面/远平面(元素渲染的最近最远距离,以为单位,建议为0.1和50)、清除标志(绘制过程中或帧刷新时内容,对于VR,此值设置为Skybox, 对于MR,设置为Color)、背景色(如果清除标志未设置为 Skybox,则将显示背景色属性)和图形质量
关于更多相机系统的概述,请参考微软官方文档相机系统概述 — MRTK2及其同级目录下的文件。

3.3 其他配置

除了前面提到的相机(Camera)配置,还包含输入(Input)边界(Boundary)传送(Teleport)空间感知(Spatial Awareness)诊断(Diagnostics)场景(Scene System) 等内容,而文章不宜过长,接下来的博客内容中,我将对其进行介绍。其中,**输入(Input)**尤为重要,MRTK所面对的输入错综复杂,除了前面提到的输入模拟外,还有实际的手势、语音、手柄、控制器等多种类型的输入设备,很多功能也建立在其之上,同时,我们也可以创建自己的输入。
在接下来的专栏中,我将用一篇文章详细全面地介绍输入配置的相关内容,感谢大家持续关注!!!

参考文献

[1] 汪祥春.HoloLens 2开发入门精要:基于Unity和MRTK[M]. 北京:清华大学出版社,2021.
[2] MRTK2-unity开发文档[EB/OL].https://learn.microsoft.com/zh-cn/windows/mixed-reality/mrtk-unity/mrtk2,2022.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_997338.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有一点好看的wordpress外贸独立站模板

手机配件wordpress外贸网站模板 充电器、移动电源、手机膜、手机电池、手机壳、手机转接头等手机配件wordpress外贸网站模板。 https://www.jianzhanpress.com/?p3809 车载电器wordpress外贸网站模板 车载吸尘器、空气净化器、行车记录仪、车载充电器、车载影音导航等车载电…

两数之和(c++ 、c)

给定一个整数数组nums和一个整数目标值target,请你再该数组中找出和为目标值target的那两个数,并返回它们的数组下标 题目介绍方法一思路及算法复杂度分析 方法二:哈希表什么是哈希表思路及算法C中unordered_map用法复杂度分析 方法三&#x…

C++ STL自定义排序

更具体的看【速记】C STL自定义排序 - 知乎 (zhihu.com) sort sort第三个位置放的greater<int>和less<int>萌新可能会弄错&#xff0c;这两个单词不是更大和更小的意思&#xff0c;而是大于和小于&#xff0c;并且比较就是自定义排序中的前者和后者。 如果是less…

【CSP试题回顾】201503-3-节日

CSP-201503-3-节日 关键点&#xff1a;格式化输出 在C中&#xff0c;格式化输出通常利用iostream库中的功能&#xff0c;特别是iomanip头文件提供的一系列操作符。这些操作符用于控制输出格式&#xff0c;如宽度、填充、对齐方式等。在你提供的代码中&#xff0c;用于格式化输…

电脑要用多少V的电源?电脑电源输入电压是市电

台式电源的输出电压是多少&#xff1f; 电脑电源输出一般有三种不同的电压&#xff0c;分别是&#xff1a; 12V、5V、3.3V。 电脑电源负责给电脑配件供电&#xff0c;如CPU、主板、内存条、硬盘、显卡等&#xff0c;是电脑的重要组成部分。 工作电流根据不同的硬件及其使用状…

Linux 开发工具 yum、git、gdb

目录 一、yum 1、软件包 2、rzsz 3、注意事项 4、查看软件包 5、安装软件 6、卸载软件 二、git操作 1、克隆三板斧 2、第一次使用会出现以下情况&#xff1a; 未配置用户名和邮箱&#xff1a; push后弹出提示 三、gdb使用 1、背景 2、使用方法 例一&#xff1a…

根据标准化开发流程---解析LIN总线脉冲唤醒的测试方法和用例设计思路

前言&#xff1a;本文从标准化开发流程的角度&#xff0c;以LIN总线脉冲唤醒为切入点。从测试工程师的角度来讲测试工作应当如何展开&#xff08;结合我干测试总结出来的测试经验&#xff09;。希望大家都能从中有收获&#xff01;&#xff01;谢谢&#xff01;&#xff01; 1…

设计模式(十三)抽象工厂模式

请直接看原文:设计模式&#xff08;十三&#xff09;抽象工厂模式_抽象工厂模式告诉我们,要针对接口而不是实现进行设计。( )-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- …

Android 消息恢复 - 如何在 Android 上检索已删除的短信

最新调查显示&#xff0c;手机每天发送和接收的短信数以亿计&#xff0c;尤其是Android智能手机。但与此同时&#xff0c;Android消息丢失也每天都在发生。因此&#xff0c;如何恢复Android手机上已删除的短信对于那些在设备中保存了一些重要信息的人来说似乎非常重要。 在这里…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:PanGesture)

拖动手势事件&#xff0c;当滑动的最小距离超过设定的最小值时触发拖动手势事件。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 接口 PanGesture(value?: { fingers?: number; direction?: PanDir…

js--DOM树简介

DOM树将HTML文档以树状结构直管段表现出来&#xff0c;也称为节点树。 1、节点Node 节点是DOM树中的单个点&#xff0c;包括文档本身、元素、文本以及注释都属于是节点。 元素节点&#xff1a;所有的标签&#xff0c;html是根节点 属性节点&#xff1a;所有的属性 文本节点&…

基于springboot+vue的医疗挂号管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

1 数据分析概述与职业操守 (3%)

1、 EDIT数字化模型 E——exploration探索 &#xff08;是什么&#xff09; 业务运行探索&#xff1a;探索关注企业各项业务的运行状态、各项指标是否合规以及各项业务的具体数据情况等。 D——diagnosis 诊断 (为什么) 问题根源诊断&#xff1a;当业务指标偏离正常值时&…

Git保姆级使用教程

一、版本控制 1.1 团队开发问题 企业项目一般以团队形式实施开发&#xff0c;那团队开发中会出现哪些问题呢&#xff1f; 小明负责的模块就要完成了&#xff0c;就在即将Release之前的一瞬间&#xff0c;电脑突然蓝屏&#xff0c;硬盘光荣牺牲&#xff01;几个月来的努力付之…

学习统一的Hyper - network用于多模态MR图像合成和缺失模态的肿瘤分割

Learning Unified Hyper-Network for Multi-Modal MR Image Synthesis and Tumor Segmentation With Missing Modalities Learning Unified Hyper-Network for Multi-Modal MR Image Synthesis and Tumor Segmentation With Missing Modalities背景贡献实验方法多模态合成方法超…

Go的安装

一. 下载地址 Go官方下载地址&#xff1a;https://golang.org/dl/ Go中文网&#xff1a;https://go.p2hp.com/go.dev/dl/ 根据不同系统下载不同的包。 二. 配置GOPATH GOPATH是一个环境变量&#xff0c;用来表明你写的go项目的存放路径。 GOPATH路径最好只设置一个&#xff0…

Linux系统:内核参数调优

目录 1、/proc目录 2、sysctl命令 3.1 控制源路由验证 3.2 控制内核的系统请求调试功能 3.3 控制核心转储是否将PID附加到核心文件名 3.4 控制TCP同步cookie的使用 3.5 在网桥上禁用netfilter 3.6 控制消息队列的默认最大大小 3.7 调试TCP内核参数 3.8 调试套…

Docker之若依项目部署

目录 一、搭建项目的局域网 1.1搭建局域网 1.2查看局域网 1.3注意&#xff1a;要关闭防火墙&#xff0c;关闭后要重启docker 二、redis安装 2.1创建目录 2.2修改redis.conf文件 三、MySQL安装 3.1安装 3.2设置远程连接 3.3创建数据库 四、若依后端项目搭建 4.1创建…

学习经验分享【NO.21】近期中文核心期刊目标检测论文理解

前言&#xff1a;最近比较忙&#xff0c;很久没有翻看知网论文了&#xff0c;看了下yolo改进相关的论文发现基于YOLOv5改进的核心期刊论文还是层出不穷&#xff0c;并没有因为已经是2024年了YOLOv9的出现而导致论文不好发&#xff0c;同时YOLOv8的论文也出了不少&#xff0c;所…

11 OpenCV 上采样与降采样,高斯不同(DOG)

文章目录 算子什么是高斯不同示例 算子 pyrUp(Mat src, Mat dst, Size(src.cols*2, src.rows*2)) 生成的图像是原图在宽与高各放大两倍 pyrDown(Mat src, Mat dst, Size(src.cols/2, src.rows/2)) 生成的图像是原图在宽与高各缩小1/2什么是高斯不同 定义&#xff1a;就是把同…