在五月初舉行的MR Dev Days上,微軟不僅正式公開了大量的開發內容,還開放了HoloLens 2開發動手實驗室,我們有幸在數小時內快速構建了一個引擎拆解應用,效果如下:
這么簡單就能做出來這樣的應用?在MRTK 2的幫助下真的不難,但首先你需要了解HoloLens 2的一些開發基礎知識,在本篇文章中我們就來介紹從混合現實開發者搭建開發環境角度的新特性。
開發環境
開發HoloLens2應用的電腦必須安裝有Windows SDK 18362以上版本,也就是要安裝“Windows 10 May 2019”或者說1903的SDK。Windows本身需要是1809以上,也可以升級到1903(如果沒有推送,可以加入Insider Preview選擇Fast Track,有風險)。
開發工具
開發工具首選還是Unity。完善的工具鏈,C#的開發環境,天生的跨平臺特性,豐富的第三方插件,都使得Unity成為最方便好用的開發載體。至少要升級到2018.3以上的版本。因為目前Unity2019版本還不夠穩定,所以在較長時間之內,都將建議使用Unity2018進行開發。
Unreal引擎也已經官方支持HoloLens 2,但暫時SDK還沒有被放出。Unreal引擎能夠打造非常高質量的3D內容,在一些場景下HoloLens 2可產生更好畫面效果。本來這次Build大會上的HoloLens 2 demo就是使用這套Unreal SDK制作的整套的登月火箭展示,效果相當不錯,可惜由于一些不穩定因素當場演示失敗。
比較硬核的開發者還可以選擇使用原生DirectX開發,如果水平高的話效率會高很多,這樣做的大多是一些擁有自研3D引擎的公司。OpenXR的runtime支持也已經加入,但還比較早期。
由于HoloLens2仍然運行的是UWP程序,所以不管你使用任何環境,最終還是需要Visual Studio 2017進行打包發布。
MRTK v2
要方便地開發HoloLens2應用,最關鍵的是MRTK v2。MRTK提供了一整套在MR設備上操作、交互及協同的框架,在HoloLens一代的年代,我們還可以不使用MRTK自行開發,但到了HoloLens2的時代,我們幾乎已經能繞不開MRTK v2了(或者說,繞開它的成本很高,且毫無意義。后文會再詳細討論MRTK v2)。也許你之前的應用就是用MRTK v1開發的,如果是這樣,官方提供了教程,可以將MRTK v1開發的應用遷移到MRTK v2。
HoloLens 2 或 模擬器
有HoloLens 2當然要用HoloLens 2啦!
沒有HoloLens2設備的話,我們也可以使用模擬器進行開發。如要安裝HoloLens2模擬器,需要將操作系統升級到1809版本或以上。
編譯架構
HoloLens2已經進化到ARM架構,因此在Visual Studio中,發布平臺要選擇ARM。Unity 2018.3版本尚不能支持ARM64,所以目前發布的平臺只是ARM32。如果要使用ARM64,需要等待Unity 2019穩定。
開發套件(MRTK v2)
MRTK v2相比老版本做了大量的進化,不客氣地說,MRTK v2絕對是目前MR開發最強大的套件,沒有之一。MRTK v2的代碼進行了大量重構,橫跨了AR/VR/MR(統稱XR),同時,由于增加了對OpenVR的支持,MRTK v2的覆蓋面變得更加廣泛,可以直接支持HTC Vive和Oculus Rift等VR設備,擁有強大的輸入兼容性。經過重構的Input模塊,使得所有設備的不同輸入方式可以被包容在一起,開發者可以用相對統一的思路,來處理各種不同設備的輸入方式。
重構也使得MRTK v2有了更清晰的模塊化結構,更靈活的配置性和更好的擴展性。基于MRTKPackage結構進行的開發,使得它的擴展性得到了空前的提升。從下面的package結構圖可窺一斑。
使用方面,除了很多組件變得更加清晰好用之外,還引入了大量的配置文件,可以方便地設置MR中的各種核心功能,還可以創建自己的配置以便切換。
最后,從MRTK v2的路線圖來看,目前發布的只是RC1版本,而開發團隊顯然有更大的野心,在后面的規劃中還有更多的內容,讓我們拭目以待。
自然手勢
HoloLens 2給人印象最深刻的特性,就是可以用最自然的方式,讓雙手和虛擬物體交互了。通過我們此前提到的Azure Kinect深度攝像頭實時抓取高分辨率深度數據,HoloLens 2通過機器學習能夠近實時捕捉手部的最多25個關節,效果接近Leap Motion,這也就意味著我們可以掌控整個手部的動作(有趣的是,在MR Dev Day上微軟的官方推薦也是用Leap Motion來對這種操作進行簡單模擬)。手部位置的追蹤和基礎的手勢已經內置在MRTK v2之中,只要使用默認的配置制作的應用,伸出雙手,我們就能看到有一雙虛擬的手完整的套在你的手上,并隨著你的手實時運動。
使用默認的設置,我們就可以隨意的用手抓取近處的虛擬物體,如果物體較遠,還可以用手部伸出的射線來像光標一樣選取。我們可以用手觸摸物體,用手抓,用手指捏,可以按、可以推、可以撥動UI。如果你只是簡單的想嘗試所有這些,甚至不用寫一行代碼就可以實現。當然了,如果要實現真正可用的功能,還是需要用代碼把這些功能整理到你的應用之中。
值得一提的是,MRTK v2中提供了一個能夠讓人體驗全部HoloLens2輸入方式和UI的示例場景,上手時,可以優先考慮用它來進行初次體驗。
視線追蹤
視線追蹤也是這次設備帶來的重要新功能,設備可以追蹤使用者的眼睛所觀察的方向,可以真正做到一個眼神就知道你要做什么。通過MRTK v2提供的功能,我們能獲取使用者當前眼鏡所注視的位置,可以用視線來選取物體,滾動文本,甚至可以統計使用者視線聚焦的位置情況,以便更好的分析使用者的操作習慣。
但是,由于視線移動非常靈活,過度使用視線追蹤有可能會造成使用者的困擾,產生大量違背使用者意圖的誤操作,因此官方建議只在合適的地方嘗試使用視線追蹤,并多加測試。
共享空間錨
做過多人協同的MR應用的開發者都知道,空間不能共享是一件多么痛苦的事情。當我們有多臺MR設備需要在一個共同場景中同步時,由于每一臺設備對空間的理解都不相同,我們往往需要逐個調整每一臺設備中的空間錨,才能讓這些設備中看到的畫面看起來在同一個位置。
微軟在HoloLens 1階段曾經設計了一套API,能將空間信息序列化,并通過網絡傳輸給其他HoloLens,讓其他設備的空間與這臺設備共享。然而當時的這一套機制實用性卻不強。一方面,空間信息序列化后過于龐大,經常達到上百MB的容量,網絡傳輸困難;另一方面,其他設備下載空間信息后,有很大概率無法和自身識別的空間進行匹配,導致經常不能使用。隨著HoloLens 2的到來,微軟也發布了新Azure Spatial Mapping。
Azure Spatial Mapping可以讓不同的MR設備之間共享空間認知,不止HoloLens之間分享,還可以涵蓋ARKit和ARCore。與之前不同,這次是直接將空間信息通過簡單的REST API上傳Azure,由Azure管理并存儲,其他端則是從Azure下載。我們在Redmond進行了簡單的測試,上傳下載的速度還是很快的,比之前應該是做了大幅的優化。世紀互聯版Azure據說也要上線該服務,尚不清楚國內版性能會怎么樣。
另外,Azure Spatial Mapping還提供了一些附加的功能,例如可以累加式地添加空間錨,不必在一次運行時完全添加,可以在以后打開程序時再次添加;例如還可以在空間錨之間創建聯系,幫助使用者進行尋路,獲取距離當前空間錨最近的空間錨,等等。
有了Azure Spatial Mapping,我們就可以很容易地在不同的MR設備之間共享空間錨信息,多設備協同時的前期調校工作會變得更加簡便。唯一的問題在于,我們必須而且當然要連上Azure公有云才能訪問此服務,在純內網環境中就無法使用了,這時候還是需要自己寫相應的映射服務。
-
操作系統
+關注
關注
37文章
6941瀏覽量
124157 -
開發
+關注
關注
0文章
370瀏覽量
41058 -
HoloLens 2
+關注
關注
0文章
12瀏覽量
5537
原文標題:【技術干貨】HoloLens 2開發初窺
文章出處:【微信號:vrtuoluo,微信公眾號:VR陀螺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論