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