Hololens 2 自今年2月份公布以來(lái),引起了業(yè)界的廣泛關(guān)注。對(duì)于開(kāi)發(fā)者而言,如何進(jìn)行HoloLens 2 上應(yīng)用開(kāi)發(fā)是大家關(guān)注的焦點(diǎn)之一。
編譯架構(gòu)
HoloLens 2 支持的最低部署環(huán)境為RS5(Windows 10 April 2018 Update),并且需要將WindowsSDK 升級(jí)至18362及以上版本,大家可以安裝“Windows10 May 2019”或者1903的SDK。在編譯架構(gòu)上,HoloLens 2目前能夠使用ARM架構(gòu),Unity 2018.3.X版本能夠發(fā)布ARM32位,而ARM64位目前還暫未開(kāi)放。
開(kāi)發(fā)工具
開(kāi)發(fā)工具建議首選Unity。它完善的工具鏈,C#的開(kāi)發(fā)環(huán)境,天生的跨平臺(tái)特性,豐富的第三方插件,都使得Unity成為最方便好用的開(kāi)發(fā)載體。開(kāi)發(fā)者至少需要升級(jí)到2018.3以上版本,因?yàn)槟壳癠nity2019版本還不夠穩(wěn)定,所以目前建議大家使用Unity2018進(jìn)行開(kāi)發(fā)。
Unreal引擎也已經(jīng)官方支持HoloLens 2了,但SDK暫時(shí)還未開(kāi)放。Unreal引擎能夠打造高質(zhì)量的3D內(nèi)容,在一些場(chǎng)景下HoloLens 2 可產(chǎn)生更好畫(huà)面效果。UE4的XR 框架和設(shè)備特定API不但能夠具備HoloLens 2 的各項(xiàng)功能開(kāi)發(fā),還支持頭戴式設(shè)備(HMD)和AR集成設(shè)備,在跨平臺(tái)兼容的擴(kuò)張性上幫助開(kāi)發(fā)者們獲得更多的支持。
我們建議比較硬核的開(kāi)發(fā)者或者擁有自主研發(fā)3D引擎的公司,可以選擇使用原生DirectX開(kāi)發(fā),這樣開(kāi)發(fā)效率會(huì)提升。 OpenXR的runtime支持也已經(jīng)加入,但還屬于比較早期階段。
HoloLens 2 模擬器
如果開(kāi)發(fā)者暫時(shí)沒(méi)有HoloLens 2 設(shè)備的話(huà),大家也可以使用模擬器進(jìn)行開(kāi)發(fā)。如要安裝HoloLens 2 模擬器,需要將操作系統(tǒng)升級(jí)到1809版本或以上。大家可以查看文末HoloLens 2 模擬器官方文檔鏈接,進(jìn)行學(xué)習(xí)。
開(kāi)發(fā)套件
要開(kāi)發(fā)HoloLens 2 的應(yīng)用,就離不開(kāi)MRTK v2了。MRTK提供了一整套在MR設(shè)備上操作、交互及協(xié)同的框架。在HoloLens一代時(shí)候,我們還可以不使用MRTK自行開(kāi)發(fā),但到了HoloLens 2 的時(shí)代,我們幾乎已經(jīng)離不開(kāi)MRTK v2了(或者說(shuō),繞開(kāi)它的成本很高,且毫無(wú)意義)。如果你之前的應(yīng)用是用MRTK v1開(kāi)發(fā)的,可以根據(jù)官方教程,將MRTK v1開(kāi)發(fā)的應(yīng)用遷移到MRTK v2。
發(fā)套件.png)
MRTK v2相比老版本做了大量進(jìn)化,它在上一代開(kāi)發(fā)套件上進(jìn)行了大量重構(gòu),橫跨了VR/AR/MR,同時(shí)增加了對(duì)OpenVR的支持,使其覆蓋面變得更加寬泛。經(jīng)過(guò)重構(gòu)的Input模塊,使得所有設(shè)備的不同輸入方式可以被包容在一起,開(kāi)發(fā)者可以用相對(duì)統(tǒng)一的思路來(lái)處理各種不同設(shè)備的輸入方式。
重構(gòu)也使MRTK v2有了更為清晰的模塊化結(jié)構(gòu),更靈活的配置性和更好的擴(kuò)展性,基于MRTK Package結(jié)構(gòu)進(jìn)行的開(kāi)發(fā),使得它的擴(kuò)展性得到了空前的提升。
最后,從MRTK v2的路線(xiàn)圖來(lái)看,目前發(fā)布的只是RC1版本,開(kāi)發(fā)團(tuán)隊(duì)在后面的規(guī)劃中還有更多的內(nèi)容,讓我們拭目以待。
本能的交互理念
HoloLens 2 無(wú)論是從硬件還是軟件都加入了本能交互的理念,這些本能交互設(shè)計(jì)在輸入技術(shù)上包括了像Inside-Out追蹤、手勢(shì)追蹤、眼動(dòng)追蹤及自然語(yǔ)言等無(wú)縫多類(lèi)型模式。這些輸入方式在MRTK v2開(kāi)發(fā)上也有諸多體現(xiàn)。
自然手勢(shì)
HoloLens 2 可以用最自然的方式讓雙手和虛擬物體交互,它通過(guò)機(jī)器學(xué)習(xí)能夠近乎實(shí)時(shí)捕捉手部的21個(gè)關(guān)節(jié),并通過(guò)這些關(guān)節(jié)來(lái)耦合對(duì)應(yīng)的輸入指令。這也意味著我們可以掌控整個(gè)手部的動(dòng)作。有趣的是,在微軟混合現(xiàn)實(shí)開(kāi)發(fā)者日(MRDD)上微軟官方推薦也是用Leap Motion來(lái)對(duì)這種操作進(jìn)行簡(jiǎn)單模擬。手部位置的追蹤和基礎(chǔ)手勢(shì)已經(jīng)內(nèi)置在MRTK v2之中,只要使用默認(rèn)的配置制作的應(yīng)用,當(dāng)你伸出雙手,你就能看到有一雙虛擬的手完整的套在你的手上,并隨著你的手實(shí)時(shí)運(yùn)動(dòng)。
互動(dòng)2.gif)
使用默認(rèn)的設(shè)置,我們也可以隨意用手抓取近處的虛擬物體,當(dāng)物體較遠(yuǎn)時(shí),還可以用手部伸出的射線(xiàn)來(lái)像光標(biāo)一樣選取。而各種豐富的手勢(shì)甚至不需要我們寫(xiě)一行代碼就可以實(shí)現(xiàn)。當(dāng)然,如果要實(shí)現(xiàn)真正可用的功能,還是需要用代碼把這些功能整理到你的應(yīng)用之中。
MRTK v2中提供了一個(gè)能夠體驗(yàn)全部HoloLens 2 輸入方式和UI的示例場(chǎng)景,上手時(shí),開(kāi)發(fā)者們可以?xún)?yōu)先考慮用它來(lái)進(jìn)行初次體驗(yàn)。
眼動(dòng)追蹤
眼動(dòng)追蹤,顧名思義就是能夠通過(guò)識(shí)別用戶(hù)的眼動(dòng)來(lái)進(jìn)行交互操作。它可以幫助用戶(hù)在使用時(shí)選擇目標(biāo),閱讀時(shí)上下移動(dòng)視線(xiàn)能夠滾動(dòng)導(dǎo)航幫助閱讀以及將用戶(hù)體驗(yàn)時(shí)的關(guān)注點(diǎn)進(jìn)行統(tǒng)計(jì)分析。MRTK v2提供了一系列眼動(dòng)追蹤的組件來(lái)幫助開(kāi)發(fā)者設(shè)計(jì)項(xiàng)目。但是需要注意的是,由于眼動(dòng)追蹤相對(duì)來(lái)說(shuō)敏感度較高,開(kāi)發(fā)者在項(xiàng)目眼動(dòng)追蹤的交互設(shè)計(jì)時(shí),應(yīng)注意避免眼動(dòng)追蹤對(duì)項(xiàng)目交互流程進(jìn)行的誤操作干擾。
共享空間錨
做過(guò)多人協(xié)同的MR應(yīng)用的開(kāi)發(fā)者都知道,空間不能共享是一件很痛苦的事情。當(dāng)我們有多臺(tái)MR設(shè)備需要在一個(gè)共同場(chǎng)景中同步時(shí),每一臺(tái)設(shè)備對(duì)空間的理解都不相同,我們往往需要逐個(gè)調(diào)整每一臺(tái)設(shè)備中的空間錨,才能讓這些設(shè)備中看到的畫(huà)面看起來(lái)在同一個(gè)位置。

微軟在HoloLens 一代階段曾經(jīng)設(shè)計(jì)了一套API,能夠?qū)⒖臻g信息序列化,并通過(guò)網(wǎng)絡(luò)傳輸給其他HoloLens,讓其他設(shè)備的空間與這臺(tái)設(shè)備共享,但是當(dāng)時(shí)的這一套機(jī)制實(shí)用性卻不太強(qiáng)。一方面,空間信息序列化后過(guò)于龐大,經(jīng)常達(dá)到上百M(fèi)B的容量,網(wǎng)絡(luò)傳輸困難;另一方面,其他設(shè)備下載空間信息后,有很大概率無(wú)法和自身識(shí)別的空間進(jìn)行匹配,導(dǎo)致經(jīng)常不能使用。隨著HoloLens 2 的到來(lái),微軟也發(fā)布了新的Azure Spatial Mapping。這次是直接將空間信息通過(guò)簡(jiǎn)單的REST API上傳到Azure,由Azure管理并存儲(chǔ),其他端則是從Azure下載。我們也在微軟總部進(jìn)行了簡(jiǎn)單的測(cè)試,上傳下載的速度還是很快的,比之前做了大幅的優(yōu)化。
Azure Spatial Anchor的加入讓混合現(xiàn)實(shí)場(chǎng)景的分享與交互不僅只針對(duì)HoloLens 2 這類(lèi)支持UWP平臺(tái)的混合現(xiàn)實(shí)設(shè)備,還兼容了ARKit和ARCore等AR技術(shù)的平臺(tái),支持Pad和智能手機(jī)等多類(lèi)終端也參與到共享空間錨信息中。當(dāng)然,我們必須要連上Azure公有云才能訪(fǎng)問(wèn)此服務(wù),在純內(nèi)網(wǎng)環(huán)境中就無(wú)法使用了,這時(shí)候還需要開(kāi)發(fā)者自己寫(xiě)相應(yīng)的映射服務(wù)。