Unite 2017 Shanghai Unity技術(shù)經(jīng)理鮑健運(yùn):《運(yùn)用Unity開發(fā)HoloLens實(shí)戰(zhàn)技巧》
Unite 2017 Shanghai于5月11日-13日在上?!H會議中心召開,匯聚了來自全球的Unity開發(fā)者,發(fā)行商,培訓(xùn)家和愛好者們,Unity技術(shù)經(jīng)理鮑健運(yùn)分享《運(yùn)用Unity開發(fā)HoloLens實(shí)戰(zhàn)技巧》。
他介紹,目前HoloLens的官方制定應(yīng)用引擎為Unity;開發(fā)HoloLens只能使用64 位 Windows 10專業(yè)版、企業(yè)版、教育版;在場景設(shè)計方面,HoloLens理想的空間是在2米-3米;最后鮑健運(yùn)為大家分享了Unity開發(fā)者學(xué)習(xí)資源。
以下是VR陀螺整理的演講內(nèi)容(略有刪減):
鮑健運(yùn):我是Unity的技術(shù)經(jīng)理,主要負(fù)責(zé)技術(shù)推廣的工作。
HoloLens大家都知道,是微軟出品的一款設(shè)備,有很多很有意思的功能,Unity提供很多性給大家去開發(fā)HoloLens的應(yīng)用。
今天分享的內(nèi)容主要分為五個部分。
一:HoloLens與Unity
Unity是微軟HoloLens的官方制定應(yīng)用開發(fā)引擎,普天之下別無二家,只能用Unity開發(fā)HoloLens,這也是我們與微軟合作的比較好的表現(xiàn)。
HoloLens在Unity5.5版本的時候已經(jīng)可以正式開發(fā)了。
二:怎么在Unity系統(tǒng)環(huán)境準(zhǔn)備開發(fā)HoloLens的應(yīng)用
你首先要有64 位 Windows 10 專業(yè)版、企業(yè)版或教育版,很多家里用的電腦都是Windows的個人版,但是開發(fā)HoloLens不能使用個人版,只能使用專業(yè)版、企業(yè)版、教育版。4 核及以上 64 位 CPU,8G 及以上內(nèi)存,配置虛擬化與 Hyper-V。GPU 支持 DirectX 11.0 或以上,WDDM 1.2 驅(qū)動及以上的版本。
接下來是需要安裝什么樣的軟件,第一現(xiàn)在最新發(fā)布的Unity5.6可以安裝一下。Visual Studio 2015 Update 3,當(dāng)然現(xiàn)在也支持2017的版本,但我這里首先是2015版本。Tools (1.4) 和 Windows 10 SDK (特別標(biāo)注是10.0.10586,這是比較穩(wěn)定的版本,可以幫助大家很好地開發(fā))還有Windows Device Portal,可以通過它把HoloLens應(yīng)用和硬件設(shè)備連接起來,也可以適當(dāng)做些調(diào)試,但是你有Portal的話可以很便捷地開發(fā)。有必要的話你也可以安裝HoloLens的模擬器。
三:項(xiàng)目搭建
怎么搭建最簡單、快速的項(xiàng)目能夠做出HoloLens的應(yīng)用。
大家知道最簡單的就是創(chuàng)建項(xiàng)目。
我們要對主相機(jī)進(jìn)行調(diào)整,Hierarchy 中找到Main Camera,設(shè)置 Transform 的 Position 為 (0,0,0),對攝像機(jī)的Clear Flags 為 Solid Color,Background 為黑色,即 RGBA 為 (0,0,0,0),這是為什么呢?因?yàn)槲覀冮_發(fā)HoloLens應(yīng)用的同時肯定是要有與現(xiàn)實(shí)融合的功能在里面,我們在底層怎么做融合的呢?我們?nèi)oloLens Clear Flags的黑色,可以跟現(xiàn)實(shí)進(jìn)行想象。就像我們玩虛擬游戲的綠幕一樣,只不過這里是黑色的。Clipping Planes 的 Near 為 0.3 ~ 0.85 之間的值,因?yàn)镃lipping Planes Near可以調(diào)到比較合適的距離。
為什么需要0.85米的范圍呢?我們體驗(yàn)HoloLens最理想的距離是在近端1.25米和2米之內(nèi),其實(shí)2米是最合適的體驗(yàn)距離,這樣你放很近的東西在眼前也不會有不舒服的影響。
設(shè)置品質(zhì),可以找到Unity 編輯器菜單欄 Edit → Project Settings → Quality
找到 Windows Store 列,在 Default 選擇 Fastest確認(rèn) Fastest 為綠色的勾。這是為什么呢?主要是提高光性的,畢竟是用到攝像機(jī)采集以及和顯示的產(chǎn)品進(jìn)行融合,首先要保證流暢,再做其他的優(yōu)化。
等你創(chuàng)建完好的項(xiàng)目做構(gòu)建的時候還有些設(shè)計需要做。你可以找到Unity 編輯器菜單欄 File → Build Settings,選擇 Platform 中的 Windows Store,選擇 SDK 為 Universal 10,Target device 為 HoloLens,才能生成正常的能夠使用的。UWP Build Type 為 D3D,等一下我會解釋一下為什么是D3D。
UWP SDK 為 10.0.10586.0,Build and Run on 選擇 Local Machine,就是在本地進(jìn)行編譯并且打包運(yùn)行的效果,你需要勾選 Unity C# Projects,這樣會生成工程,能夠在VS里面打開,進(jìn)行額外的編輯。當(dāng)然肯定需要 Add Open Scenes,有一個場景能夠讓你編輯,將當(dāng)前 Scene 添加到 Scenes In Build。
首先解釋一下D3D的含義,如果開發(fā)了解windows知道有兩種應(yīng)用模式,一種是3D視圖應(yīng)用,另一種是XAML,2D的視圖應(yīng)用。針對HoloLens這兩種都可以,產(chǎn)生的問題就是你要用XAML只能做出2D的面板、虛擬鍵盤,你要獲取很好的體驗(yàn)的話,還是選擇3D的,所以我推薦大家使用D3D的模式。
UWP SDK有這幾個選項(xiàng),Latest installed Unity 5.6 自動對應(yīng)現(xiàn)有最新的SDK版本 10.0.15063,還有一個版本是10.0.10240.0,這是最早的,支持HoloLens的SDK版本,很多功能不能使用。有一個是0.0.10586.0 —— 推薦最低版本,支持 .Net 3.5。
這樣大多數(shù)的HoloLens都能進(jìn)行支持,如果設(shè)備沒有進(jìn)行更新的話,還是可以繼續(xù)使用的。還有一個版本是0.0.14393.0,Anniversary 版本,但很多應(yīng)用不支持。所以我推薦是10586這個版本。
開發(fā)選項(xiàng)的設(shè)置在 Build Settings 窗口點(diǎn)擊 Player Settings,打開之后填寫 名稱Company Name 與 Product Name,選擇 Windows Store 選項(xiàng)卡,展開 Other Settings 標(biāo)簽,有幾個選項(xiàng)需要勾選,首先要勾選 Virtual Reality SDKs,添加 Windows Holographic,這樣你開發(fā)出來的應(yīng)用是針對HoloLens。如果你不去勾選的話是生成不了HoloLens應(yīng)用的。
Depth Format是用來深度緩沖區(qū)的深度。有兩個效果,一個是16-bit depth,精度較低,物體非常接近時,會產(chǎn)生 Z buffer fighting 閃爍,因?yàn)槟阍O(shè)計的值不夠。24-bit depth,這個是推薦大家使用的,精度較高。
這是我們Unity開發(fā)AR、VR所用到的功能,Single Pass Instanced,單通道立體渲染。原有的模式是先畫完左眼再畫右眼,單通道是可以有多個指令,左邊畫完以后右邊也會同時畫,兩個眼睛之間不會有先后順序,幾乎達(dá)到同時的渲染效果,對體驗(yàn)者來說有很好的體驗(yàn)效果。
之后在 Build Settings 窗口點(diǎn)擊 Build,第一次要求你創(chuàng)建文件夾,這里面會放所有生成的項(xiàng)目,命名為App,導(dǎo)出 HoloLens 的 Visual Studio 項(xiàng)目文件夾。
在VS的模擬器當(dāng)中怎么用呢?打開VS,設(shè)置Target 為 Release,架構(gòu)用X86架構(gòu)。
我們可以在Unity編輯器環(huán)境當(dāng)中進(jìn)行模擬的調(diào)試,但是有個前提你需要安裝window10 Anniversary及以上的版本,這樣在5.6可以看到會多出來一個選項(xiàng),全息模擬器窗口。
對開發(fā)者來說大大節(jié)省了迭代時間,也可以幫助開發(fā)者有比較好的設(shè)計體驗(yàn)。
模擬有幾種模式,首先是模擬模式。一個是Room,就是默認(rèn)的客廳、簡單臥室、普通臥室。
在微軟提供的這一套環(huán)境當(dāng)中做了搭建,在設(shè)計當(dāng)中會有默認(rèn)空間的客廳,有桌子和椅子放置在里面,幫助你們在模擬器環(huán)境里面調(diào)試。
還有Gesture Hand。像左搖桿是控制里面有個虛擬人物前后左右的移動,右搖桿是控制虛擬任務(wù)抬頭、低頭、左轉(zhuǎn)、右轉(zhuǎn)。D-pad是控制虛擬人物上下移動,左右轉(zhuǎn)頭,以及左右有扳機(jī)鍵,A鍵模擬手掌點(diǎn)擊,Y鍵可以重置虛擬人物。
遠(yuǎn)程模式Remote Machine,HoloLens 的局域網(wǎng)地址,把地址輸入到選項(xiàng)里面,可以直接通過Unity使用。Enable Video/Audio就是啟用視/音頻輸入,Max Bitrate。最大比特率以及Connection Status連接狀態(tài)。當(dāng)然這需要用到一個軟件,微軟提供的Holographic Remoting Player。
模擬模式大多數(shù)的手柄都支持,但推薦的是 Xbox 360 或 Xbox One。
可以執(zhí)行圖像捕捉,但因?yàn)閳D像捕捉會使用本地相機(jī)(例如網(wǎng)絡(luò)攝像頭),無法使用HoloLens對應(yīng)的TryGetProjectionMatrix 或者 TryGetCameraToWorldMatrix來獲得矩陣的方式。
遠(yuǎn)程模式不支持語音(PhraseRecognizer語音識別),而是獲取編輯器所在主機(jī)的語音。不是通過HoloLens這個硬件獲取到語音信息,而是我這臺電腦能獲得的信息,主機(jī)PC端所有的音頻將重定向到設(shè)備上(而不僅是來自應(yīng)用方的)。
四:HoloLens交互開發(fā)功能
接下來會介紹一些HoloLens特有的交互開發(fā)的功能,會有比較重要的幾個。
比如說凝視,大家開發(fā)過VR應(yīng)用的話都會知道凝視的功能別家設(shè)備也有,但有幾個東西是其他幾家沒有的,比如說Gesture以及Voice語音控制,你可以說出單詞,HoloLens可以進(jìn)行判斷。
還有特別的空間掃描、空間音效以及世界坐標(biāo)器轉(zhuǎn)換。這里會推薦一個軟件HoloToolkit-Unity,它里面簡化了一些方法,寫了一些API,能幫助開發(fā)者更容易地開發(fā)HoloLens應(yīng)用。
首先講一下凝視的功能,在Unity的API里面很簡單。在HoloToolkit API里面會有幾個Gaze的開發(fā)方式,比如說GazeManager, GazeStabilizer, BasicCursor。這里面有幾點(diǎn)需要注意的,凝視是根據(jù)頭部的移動,而不是跟隨你的眼睛。
可以使用“光標(biāo)”或者其他視聽的提示幫助使用者進(jìn)行交互。比如說有些AR和VR應(yīng)用當(dāng)中也會看到,你在環(huán)境當(dāng)中找到目標(biāo)的時候屏幕中間會出現(xiàn)箭頭,提示你把頭往那個方向轉(zhuǎn),或者有聲音提示你往那邊走,這也是幫助凝視的操作。
這個和我前面提到的HoloLens最佳體驗(yàn)范圍也是相關(guān)的,2米是最好的范圍,物體的大小盡量控制在5到10厘米之間,這樣會有比較好的凝視體驗(yàn)。視錐角度也就在1.5到3度之間,會幫助開發(fā)者省掉不少的麻煩。
這是比較典型的使用凝視的例子,當(dāng)它移動到立方體上的時候,物體就變得高亮,這就變成類似選中的狀態(tài)。
Gesture,Unity有專門的API,會在UnityEngine.VR.WSA.Input里面找到相關(guān)的API,有針對GestureRecognizer和HoloToolkit的東西。
手勢的操作有這幾種。Tap:空中點(diǎn)擊,Hold:抓住對象,Manipulation:操縱對象 —— 移動控制,Navigation:導(dǎo)航操作——軸向操作。
怎么去創(chuàng)建手勢呢?第一步肯定是創(chuàng)建,然后制定,然后再進(jìn)行事件的綁定。
以Tapped為例,開始去捕捉手勢,當(dāng)我覺得差不多的時候就停止捕捉。
語音控制是HoloLens最有意思的地方,用的最多就是選擇某一樣?xùn)|西的時候可以把眼睛放在上面,這樣解放了很多操作方式,不單單是用手來操作,可以用語音來進(jìn)行操作。
怎么使用呢?首先你得引用,你要用到using UnityEngine.Windows.Speech,做新建和關(guān)鍵字字典的準(zhǔn)備,你要創(chuàng)建KeywordRecognizer ,你要放入語音識別的單詞,不太建議大家使用中文,因?yàn)檫@塊的識別還不是特別好。
接下來是初始化識別器,還有很有意思的事情叫“措辭”事件,當(dāng)識別完之后就可以啟用了。操作差不多的時候可以點(diǎn)Stop,必須也要進(jìn)行解綁。
語音控制必須要有“麥克風(fēng)”,才能讓所有的API生效,沒有API的話都沒有用。大家要使用語音功能的話必須保持正常穩(wěn)定的聯(lián)網(wǎng)狀態(tài),除了“Select”這個單詞以外,其他都需要用到語音助手去分析語音詞,所以在無網(wǎng)絡(luò)狀態(tài)下不要去怪我說一堆詞它沒有分析出來,因Cortana語音助理需要去分析你的詞。
HoloLens也支持聽寫的功能,但是聽寫跟語音功能兩者是排它的,你兩者只能取其一。
空間映射會用到比較基本的,像UnityAPI里面會有UnityEngine.VR.WSA。HoloToolkit API里面會有SpatialMappingManager, SpatialUnderstanding。
可以是比較特殊的地形表面,這邊都已經(jīng)有很多方法準(zhǔn)備好了。
SurfaceChangedDelegate會識別表面的變化,當(dāng)然也要注意空間映射識別的功能不是萬能的。
首先需要可感知的空間,而且是比較封閉的場景。大家記不記得我前面所說的,HoloLens理想的范圍應(yīng)該是5米以內(nèi)的空間,比較理想的空間應(yīng)該是在2米到3米左右,這樣封閉空間并不是特別大,所以你不需要找特別大的場景做感知。
還有一點(diǎn),一定要做優(yōu)化,不做優(yōu)化的話你的空間掃描數(shù)據(jù)量特別大。一定要用到遮擋、剔除這些功能,這會提升你HoloLens的體驗(yàn)。
空間音效是在整個HoloLens設(shè)計里面最簡單的,因?yàn)閁nity本來就支持很好的3D音效,你需要對AudioManager做簡單的設(shè)置,必須用48000 系統(tǒng)采樣率以及Microsoft HRTF 聲場定位技術(shù)。
HoloToolkit API就是專門用這個的,用到UAudioManager。空間音效在 MR/VR 沉浸式環(huán)境中非常重要,幫助你達(dá)到很好的空間感。
空間坐標(biāo),UnityAPI里面有WorldAnchor。而HoloToolkit API里面有TapToPlace, WorldAnchorManager.
我建議組合內(nèi)容使用單一的錨點(diǎn)。還有較遠(yuǎn)距離對象的錨點(diǎn)坐標(biāo)系盡量在 3 米以內(nèi),這和我前面說的理想的HoloLens大小空間體驗(yàn)是相關(guān)的。
五:學(xué)習(xí)資源
大家如果有興趣接觸,進(jìn)行Microsoft Hololens開發(fā)可以通過學(xué)習(xí)資源獲得更多的了解。
說到這里可以給大家介紹學(xué)習(xí)資源,只是你們不知道HoloLens有好用的地方。官方手冊里面有專門講windowsholographic的章節(jié),有專門的API文檔可以去查。
還有微軟自己官方的Holographic Academy里面有很多詳細(xì)的用例。
謝謝大家!
投稿/爆料:tougao@youxituoluo.com
稿件/商務(wù)合作: 六六(微信 13138755620)
加入行業(yè)交流群:六六(微信 13138755620)