https://developer.microsoft.com/en-us/windows/holographic/install_the_tools
導讀:開發者們在陸續收到HoloLens開發者版的同時,也都着手了HoloLens應用的開發工作。本文作者從空間映射、場景匹配、自然交互等核心特性開始,以實踐詳解了如何使用Unity引擎開發一個簡單的HoloLens應用,並對自己的開發經驗進行總結和分享。
HoloLens概述
經歷數個月的期待與等待,筆者終於拿到了預訂的HoloLens開發者版本套件。作為市面上第一款發售的AR/MR設備,HoloLens開發者版本具有很多獨特的黑科技。今天,我們就來了解HoloLens的開發特性(參見圖1應用場景)。
圖1 Hololens應用場景
空間映射
借助微軟特殊定制的全息處理單元(HPU),HoloLens實現了對周邊環境的快速掃描和空間匹配。這保證了HoloLens能夠准確地在真實世界表面放置或展現全息圖形內容,確保了核心的AR體驗。
場景匹配
HoloLens設備能存儲並識別環境信息,恢復和保持不同場景中的全息圖像對象。當你離開當前房間再回來時,會發現原有放置的全息圖像均會在正確的位置出現。
自然交互
HoloLens主要交互方式為凝視(Gaze)、語音(Voice Command)和手勢(Gesture),這構成了HoloLens的基本輸入要素。同時傳統的鍵盤鼠標等設備也被支持,自然的交互方式更貼近人類習慣,提高了交互效率。
通用應用
HoloLens平台的操作系統為Windows Holograpic,同樣基於Windows 10定制。所以Windows 10 UWP通用應用程序可以順利地在HoloLens上運行。這不僅降低了研發和遷移成本,也讓開發效率大幅提升。
當然,說了很多HoloLens的特性和優點后,開發者版本也存在一些亟待解決的問題,比如視野較窄、凝視體驗不佳、抗光線干擾弱和重量續航等。但瑕不掩瑜,HoloLens帶來了真正的混合現實體驗,擁有着強烈的沖擊感,未來將大有作為。
開發一個HoloLens應用
在了解HoloLens設備后,我們來試着開發一個簡單的HoloLens應用,當然你也可以開發一個傳統的UWP應用。這里我們則采用Unity引擎來構建應用,使用Unity開發是官方推薦的做法。
開始之前
確保正確配置了開發環境,需安裝以下工具和SDK:
Visual Studio 2015 Update 1及以上版本;Windows 10 SDK 10586及以上版本;HoloLens模擬器,如圖2;Unity HoloLens技術預覽版。
以上工具和SDK均可在微軟官方網址獲取,詳細教程可以訪問:https://developer.microsoft.com/en-us/windows/holographic/install_the_tools。
圖2 HoloLens模擬器
集成HoloToolkit-Unity項目
在創建了標准Unity項目之后,我們需要集成微軟官方提供的HoloToolkit-Unity項目。HoloToolkit-Unity是微軟官方的開源項目,用於幫助開發者快速開發HoloLens應用,能夠快速為項目集成基本輸入、空間映射和場景匹配等特性。以下是此項目的結構和內容分析,如圖3。
Input目錄
GazeManager.cs用於快速集成凝視射線特性;GestureManager.cs用於快速集成手勢識別特性;KeywordManager.cs用於快速集成語音命令特性;CursorManager.cs用於快速集成可視化凝視組件。
Sharing目錄
Sharing Prefab組件用於快速集成場景共享特性。
SpatialMapping目錄
SurfacePlane Prefab組件用於描述和渲染真實世界表面;SpatialMapping Prefab組件用於快速集成空間映射特性;RemoteMapping Prefab組件用於快速集成遠程空間映射信息導入特性;
SpatialSound目錄
UAudioManager.cs用於快速集成空間聲音特性。
Utilities目錄
Billboard.cs用於實現跟隨用戶視線特性;Tagalong.cs用於實現跟隨用戶移動特性;Main Camera Prefab組件用於快速集成HoloLens標准主攝像機。
構建場景
新建空白場景后,我們需要刪除原有的Main Camera對象,同時從HoloToolkit目錄中拖拽一個Main Camera Prefab組件到場景中,如圖4,這樣就集成了滿足HoloLens需求的基本主攝像機。對於HoloLens,將主攝像機渲染背景設為純色,顏色設為RGBA(0,0,0,0)。因為任何純黑的顏色將會被HoloLens渲染為透明,以達到不遮擋現實世界的目的。此外,HoloLens建議攝像機視角近距離為0.85,這個距離最符合真實人眼的體驗。同時主攝像機位置必須重置為世界零點,即xyz(0,0,0),任何全息圖像將會以此為原點在周邊世界中繪制出來。
圖4 設置主攝像頭
然后點擊“Create Empty”創建一個空游戲對象,並將其命名為Input,如圖5。為Input對象添加核心腳本組件,分別為GazeManager.cs、GestureManager.cs、HandsManager.cs和KeywordManager.cs。這樣就集成了以上命令三大核心特性,對於凝視射線、手勢識別和語音命令功能,均建議使用單例來進行管理,這樣可以避免功能混亂。同時為凝視設置可視化的指針,可以提高用戶的交互體驗和效率。
圖5 集成輸入組件
接下來集成可視化凝視組件,從HoloToolkit目錄下拖拽CursorWithFeedback Prefab組件到場景中,如圖6。這樣當凝視在全息對象時,其表面會出現可視化凝視組件。當用戶手勢被識別到時,會出現一個藍色的手掌圖像,能夠貼心地告訴用戶可以操作了。
圖6 集成凝視組件
創建一個Cube對象和一個新的C#腳本,命名為HoloTest.cs。Cube作為我們的全息圖像主體,將它的Transform參數設為如圖7所示。這樣Cube的位置方便我們近距離觀察其實際變化情況,你也可以根據自己偏好來放置它。
圖7 設置Cube的Transform參數
HoloTest.cs腳本的功能為隨機更換對象的材質顏色,遵循GestureManager.cs中預設的OnSelect消息名稱,HoloTest.cs腳本中將會在OnSelect方法中實現此功能代碼如下:
publicvoidOnSelect() { //隨機變換物體顏色gameObject.GetComponent<MeshRenderer>().material.color = newColor(Random.Range(0, 255) / 255f, Random.Range(0, 255) / 255f, Random.Range(0, 255) / 255f); }
進入Input組件檢視選項卡,為KeywordManager.cs組件配置語音命令。圖8語音命令觸發時將會執行相應的組件行為。本例中,當我說出“test”時,機會即會Cube的OnSelect方法,來隨機改變Cube顏色。
圖8 設定語音關鍵詞行為
編譯項目
為了滿足HoloLens的需求,我們需要在Player Settings里面開啟Virtual Reality Support,並在下拉列表中選中Windows Holographic,如圖9。只有這樣HoloLens才會將此應用渲染為3D應用,這一點十分關鍵。
圖9 添加HoloLens支持
同時從工具欄Edit→Project Settings→Quality選項卡中,將UWP平台默認畫質設為Fastest,如圖10。這是為了降低性能開銷,官方推薦幀率為60fps。
圖10 設定默認畫質
如圖11,Build Settings視圖中選擇目標平台為Windows Store,SDK為Universal 10,點擊Build按鈕開始編譯UWP項目。
圖11 編譯Unity項目
部署調試應用
使用Visual Studio打開編譯后的UWP項目,在Debug選項上設置如圖12所示。
圖12 設置Debug選項
連接HoloLens到PC,完成Build和Deploy后,我們在HoloLens中打開此應用。實際效果如圖13所示。當我使用手勢點擊Cube時,它會隨機變化顏色;而當我說出語音命令“test”時,Cube仍會正常的變換顏色,這完全符合我們的預期。
圖13 實際效果圖
HoloLens開發總結
使用Unity引擎開發HoloLens應用是非常容易的事情,大部分流程與開發UWP項目並無不同。但仍有不少需要注意的雷區和特殊要求,以下就是部分要注意的部分:
Main Camera一定要按照官方要求配置,背景純色且RGBA值為(0,0,0,0),這樣才能避免遮擋現實內容;Gaze凝視特性需要我們使用Raycast來實現,注意處理射線未命中目標情形,默認凝視最遠距離為15米,若是未擊中物體,使用時可能會出現空引用異常;
3 . 手勢識別、拍照和語音命令等均需使用Windows特有API,空間映射和場景匹配需要使用HoloLens特有API;其他很多細節上的體驗,例如可視化凝視組件、目標區域可視化指引組件等,使用它們來給用戶提示,可以幫助用戶理解應用操作方法,提高使用體驗。
最后,AR/MR技術獨特的交互體驗與開發特性,代表了未來自然交互的發展方向,相較於目前成熟的VR技術,它們具有更光明的發展前景和更廣闊的用途。無論是微軟還是Magic Leap,它們無疑會是未來市場的引領者,而目前也是我們學習的黃金階段,能夠迎頭趕上這波浪潮,對於相關從業者具有重要的意義。
作者簡介:
張昌偉,全棧工程師,微軟最有價值專家。專注於iOS和.NET平台開發技術,首批AR開發者,目前全職從事HoloLens開發。