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基礎知識
2.1 MRTK概述
MRTK是一個由微軟公司驅動的統一、跨平臺、支持AR/MR/VR設備開發的框架。它支持如Hololens、HTC、Oculus等多種設備,并添加了多種對不同XR插件的支持,如OpenXR、Windows XR、ARCore XR等,各個XR SDK對應著不同類型的設備和平臺,在Unity編輯器的項目設置中,我們可以在選擇指定平臺后找到其對應的XR插件,如下圖所示。
具體來說,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有多個核心服務,其互相配合或獨立運行,全部共享相同的生命周期——啟動、注冊、更新和卸載,該生命周期與Unity的MonoBehaviour生命周期不同。MRTK對象(即之前提到的MixedRealityToolkit對象)用于管理其服務的生命周期和運行,此對象可確保程序開始時,服務的啟動和初始化按預定義的順序進行。
在結構的最上層,MRTK采用事件驅動,通過MixedRealityToolkit對象內掛載的Unity對象函數,處理來自Unity分發的事件消息,實現Unity消息與MRTK服務之間的通信,確保數據從低層級通過事件處理函數向高層級之間的流通。
2.3 MRTK配置文件介紹
MRTK通過使用配置文件定義應用程序的功能和其適用的目標設備,因此,錯誤的配置文件可能會導致程序在指定設備上無法運行。MRTK有一個總體的配置文件,該配置文件是一個可編程對象,用于存儲全局數據,同時其又包含了許多子配置文件的定義,形成了一個配置文件樹,與此對應的,在配置面板(選中MixedRealityToolkit對象后,Inspector檢查器中會自動添加MixedRealityToolkit的配置面板)上我們不難發現,每一個標簽頁面都有其相關的配置文件選擇,如下圖所示。
配置文件指導了MRTK的運行有哪些功能,這些功能大都以服務形式提供,因此,配置文件的正確使用很關鍵。在了解這些配置文件之前,請先行繼續了解MRTK的服務基礎知識。
2.4 MRTK服務
MRTK中的服務可分為三類:原生服務、擴展服務和數據提供者。MRTK負責協調處理服務間的交互,確保服務得到所需的事件消息(Awake、Initialize、Update、Destroy等)。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.