Hololens 2應用開發系列(2)——MRTK基礎知識及配置文件配置(上)

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.pswp.cn/news/715664.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715664.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715664.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高效運維監測:全面掌控IT基礎設施與應用性能

在現代IT環境中,確保服務器、網絡設備和應用程序的穩定運行至關重要。為了實現這一目標,運維團隊需要一套高效、靈活的監測系統,能夠實時追蹤各種性能指標,并在出現問題時迅速發出警報。本文將詳細介紹這樣一套監測系統&#xff0…

WebServer -- 數據庫連接池

目錄 🎂基礎知識 🚩整體內容 🌼單例模式創建 🎂連接池(代碼實現) 初始化 獲取 && 釋放連接 銷毀連接池 🍑RAII 機制釋放數據庫連接 定義 實現 🎂基礎知識 什么是…

使用 Docker 部署 Answer 問答平臺

1)介紹 GitHub:https://github.com/apache/incubator-answer Answer 問答社區是在線平臺,讓用戶提出問題并獲得回答。用戶可以發布問題并得到其他用戶的詳細答案、建議或信息。回答可以投票或評分,有助于確定有用的內容。標簽和分…

Ps:歷史記錄面板

Ps菜單:窗口/歷史記錄 Window/History 歷史記錄 History面板提供了對圖像編輯過程中所進行更改的深入控制,可以讓用戶回溯并查看每一步操作,從而允許用戶輕松撤銷錯誤或比較不同的編輯效果。 ◆ ◆ ◆ 常用操作方法與技巧 “歷史記錄”面板…

CentOS7設置虛擬機語言為中文

1.查看本地安裝的語言 locale -a 是一個Linux命令,用于列出系統中可用的所有區域設置(locales)它包含了各種語言和地區的不同設置。 打開終端(右鍵open terminal)輸入 locale -a 查看本地安裝的語言: 其中z…

如何在Unity項目中使用Plastic SCM進行版本控制

引言 Plastic SCM是一個版本控制系統,專為處理大型項目而設計,特別適用于游戲開發中的Unity項目。它提供了強大的分支和合并工具,使團隊能夠高效地協作開發。 安裝和設置 安裝Plastic SCM 訪問Plastic SCM官網下載客戶端。根據您的操作系…

一些可以訪問gpt的方式

1、Coze扣子是新一代 AI 大模型智能體開發平臺。整合了插件、長短期記憶、工作流、卡片等豐富能力,扣子能幫你低門檻、快速搭建個性化或具備商業價值的智能體,并發布到豆包、飛書等各個平臺。https://www.coze.cn/ 2、https://poe.com/ 3、插件阿里…

EasyRecovery16電腦硬盤數據恢復軟件功能詳解

在數字化時代,人們在日常生活和工作中越來越依賴于電腦和移動設備。不管是個人用戶還是企業,數據的重要性都不言而喻。然而,數據丟失和損壞的風險也隨之增加,因此,數據恢復軟件的需求也日益增長。 EasyRecovery 16是一…

不同材質的油封及其使用溫度限制

油封,也稱為旋轉軸密封件,是防止潤滑油從機器和軸承內部間隙泄漏的重要部件。油封的有效性很大程度上取決于其承受運行過程中所暴露溫度的能力。 材料問題:不同材料及其溫度限制 制造油封所使用的不同材料可以承受不同的溫度范圍。這里有一…

【打工日常】使用docker部署在線Photopea用于linux下替代ps

一、Photopea介紹 linux沒有ps適配,對于有時候工作來說確實不方便,我找了很久,才找到了一款功能可以跟ps接近的在線軟件,使用docker部署就可以了。它是ps的最佳替代品之一,其界面幾乎與ps相同,只不過它是在…

Springboot+vue的醫藥管理系統(有報告)。Javaee項目,springboot vue前后端分離項目。

演示視頻: Springbootvue的醫藥管理系統(有報告)。Javaee項目,springboot vue前后端分離項目。 項目介紹: 采用M(model)V(view)C(controller)三層…

云軸科技ZStack與華東師范大學共建產教融合基地

近日,上海云軸信息科技有限公司(云軸科技ZStack)與華東師范大學上海國際首席技術官學院宣布,共同打造產教融合基地,以促進人才培養與產業需求的全方位融合。這一舉措旨在深化教育與產業的合作關系,培養更多…

實戰 | 使用YOLOv8圖像分割實現路面坑洞檢測(步驟 + 代碼)

導 讀 本文主要介紹使用YOLOv8圖像分割實現路面坑洞檢測(步驟 代碼)。 背 景 如上圖所示,現實生活中路面坑洞對車輛和駕駛員安全來說存在巨大隱患,本文將介紹如何使用YoloV8圖像分割技術來檢測路面坑洞,從而提示駕…

計算機網絡|Socket

文章目錄 Socket并發socket Socket Socket是一種工作在TCP/IP協議棧上的API。 端口用于區分不同應用,IP地址用于區分不同主機。 以下是某一個服務器的socket代碼。 其中with是python中的一個語法糖,代表當代碼塊離開with時,自動對s進行銷毀…

JS:原型與原型鏈(附帶圖解與代碼)

一、原型 寫在前面: 任何對象都有原型。 函數也是對象,所以函數也有原型。 1.什么是原型 在 JavaScript 中,對象有一個特殊的隱藏屬性 [[Prototype]],它要么為 null,要么就是對另一個對象的引用,該對象…

什么是片內片間均勻性?

均勻性在芯片制程的每一個工序中都需要考慮到,包括薄膜沉積,刻蝕,光刻,cmp,離子注入等。較高的均勻性才能保證芯片的產品與性能。那么片內和片間非均勻性是什么?如何計算?有什么作用呢&#xff…

遞歸與遞推(藍橋杯 c++)

目錄 題目一&#xff1a; 代碼&#xff1a; 題目二: 代碼&#xff1a; 題目三&#xff1a; 代碼&#xff1a; 題目四&#xff1a; 代碼&#xff1a; 題目一&#xff1a; 代碼&#xff1a; #include<iostream> #include<cstring> using namespace std; int …

react Provider Consumer 使用方法

相關文章 React Context的使用方法 跨幾個組件傳遞值或者方法的時候, 如果依賴父子組件傳值, 那勢必會很麻煩. 好在react提供了Provider 和 Consumer 1 調用react的createContext()方法, 產生生產者和消費者組件. // context.js import React from react let { Consumer, Pr…

node.js最準確歷史版本下載

先進入官網:Node.js https://nodejs.org/en 嫌其他博客多可以到/release下載:Node.js,在blog后面加/release https://nodejs.org/en/blog/release/ 點擊next翻頁,同樣的道理

數據結構:棧和隊列(隊列)

隊列的性質 一端進,從另一端出,先進的數據一定先出去,進數據的一端叫隊尾,出數據的一端叫隊頭 特點 保障公平性的排隊 #pragma once #include<stdlib.h> #include<stdbool.h> #include<assert.h>typedef int QDataType; typedef struct QueueNode {int v…