2015年9月8日 星期二

從人體舒適度討論Unity對於VR體驗的方向


作者:張鑫 & Kelvin Lo


本文為Unity Technologies 技術支持經理 張鑫與原廠講師 羅志達共同撰寫的文稿,旨在於讓更多投身VR領域的開發者在創建專案之前,從過去,現在與未來的多重角度來瞭解Unity對VR產業的支持

VR的發展歷史與現在火爆的原因

在開始瞭解如何創建一個VR項目之前,首先需要瞭解VR的一些歷史:1935年,小說家Stanley G.Weinbaum在他的小說中描述了一款虛擬現實的眼鏡,而該小說被認為是世界上率先提出虛擬現實概念的作品,故事描述的就是以眼鏡為基礎,包括視覺,嗅覺,觸覺等全方位沈浸式體驗的虛擬現實概念;1962年,一部名為Sensorama的虛擬現實原形機被Morton Heilig所研發出來,後來被引用到空軍,以虛擬現實的方式進行模擬飛行訓練。雖然隨後從1970年到1994年的二十多年間,VR領域有許多科學家相繼投入研究,但從整體上看,還僅限於相關的技術研究,並沒有生產出能交付到使用者手上的產品,直到1994開始,日本遊戲公司Sega和任天堂分別針對遊戲產業而推出Sega VR-1和Virtual Boy,在當時的確在業內引起了不小的轟動,但因為設備成本高,普及率並沒有很大,但也為VR硬體進軍To C市場打開了一扇門。

Sensorama原形機
圖片來源:Google images


現今VR產業火爆,起因是因為2012年Oculus Rift通過國外知名眾籌網站KickStarter募資到160萬美元,後來被Facebook以20億的天價收購。而當時Unity作為第一個支持Oculus眼鏡的引擎,引導了大批開發者投身VR項目的開發中,正式點燃了這場VR大戰,但當時吸引的族群多為遊戲開發者,直到2014年Google發佈了Google CardBoard,以非常低廉的成本通過手機來體驗VR世界,導致更多開發者紛紛加入這戰局,點燃了今日的"Mobile VR"大戰

圖片來源:Google images


縱觀當今市場,從獨立開發市場分析的結果,2017年會有超過1300萬的VR硬體產出,2020年更會超出5000萬台,總市值將達30億美元

VR原理與現狀深度探討


就目前的VR體驗而言,其最亟需解決的問題就是用戶體驗時的眩暈等身體不適問題。造成身體不適的原因很多,解析度、畫面重影、畫面延遲、深度感知不連續等等。人體全身上下有許多感知器官,時時刻刻都在不斷感知周圍訊息並傳給大腦,大腦不斷對這些訊息進行處理,判斷是否正常與「合理」。

所以,如果出現了大腦無法識別的衝突訊息,大腦就會感到「困擾」而產生不適感。以上所說的「重影」、「延遲」和「深度感知不連續」等,均會讓大腦感到「困擾」,因為這些現象在人們習以為常的生活中,幾乎是不可能出現的。因此這種情況極大加速了人們大腦的疲勞,甚至出現眩暈惡心等情況,大大縮短了VR體驗的時間。

目前,沈浸式VR的體驗時間一般為每次5-10分鐘,連續體驗不宜超過30分鐘。如何提供給用戶更棒的VR體驗,已經成了當今VR領域首要解決的問題。就目前而言,主流的硬體廠商都在以下幾個方向進行不懈的努力。


提高幀率、降低延遲度


一般來說,一款PC/手機遊戲的FPS只需保持在30 FPS以上,即可滿足玩家流暢遊戲的需求。但對於沈浸式VR體驗來說,30FPS是遠遠不夠的。這裡需要先解釋一下延遲度(Latency)這個概念。


如下圖所示,所謂"延遲度"是指從頭戴式設備的陀螺儀將方位訊息傳到PC開始,經過PC/手機的計算渲染,最後傳回到螢幕顯示的時間間隔。所以用戶眼睛真正看到的實際上是幾十毫米之前的場景。



設備延遲度的形成原因。該圖取自Nvidia的技術文檔《Gameworks VR》。


如果延遲度過長,用戶實際看到的渲染場景是「一頓一頓」進行顯示的,這會增加VR體驗的不適感,甚至讓人感到眩暈。一般來說,延遲度需要小於20ms且越小越好,這樣才能保證較好的VR體驗。如果想要延遲度小於20ms,則必須要保證FPS至少達到75,甚至90以上。而必須兩眼都達到的情況下,即便是對於目前的主流家用PC機來說,也算的上是「苛刻」了。


雖然Oculus提出了Async Timewarp技術來盡可能在低幀率的情況下保證延遲度,但這個方法目前只適用於「頭部旋轉」(Rotation Timewarp)和小範圍慢速度的位置移動(Positional Timewarp)。對於快速移動和動態物體,效果仍有限。因此,這裡需要說明的是,在提高VR體驗時,沒有任何一種方法比"提高FPS"更為有效。


Async Timewarp方法比較適合與靜態場景的顯示,但對於動態物體,則會出現「重影」效果,進而造成一定的視覺不適。


提升解析度


目前的沉浸式螢幕需要近距離觀看,而營幕貼近眼睛很容易產生紗窗效應,使眼睛能夠看出屏幕中的格點,進而產生不適。坦白說,解析度問題需要依靠硬體方面的提升才能得以解決。


VR與人體的關係與注意事項


VR鏡頭的結構有如一雙眼睛有兩個平行的鏡頭,且各自擁有獨立的校准功能,眼睛往前看的情況下視角(FOV)範圍水平角度122°,垂直角度120°,如果是在頸部自由運動的範圍下,視角(FOV)能達到水平角度210°,垂直角度160°。有趣的是,如果以每度60x60像素來算,我們認為當螢幕技術進化到12K x 10K時,VR體驗將會非常趨近現實。

圖片來源:Google images

VR體驗最重要的環節還有聲音,但許多開發者忽略了聲音的重要性,試想把耳朵塞住看電影,整個體驗將完全沒有沈浸感,因為人的耳朵掌管許多事情,比如平衡感和聲音傳遞,它們就像是兩個心型麥克風,人腦通過聲音傳遞到兩只耳朵的強度和時間差計算出聲音的方向,分析出這段聲音是否需要被注意,進而決定你會選擇轉頭往音源方向看去,還是會選擇忽略這段聲音。也因為人腦有這樣的過濾機制,使得即使在很吵雜的環境里,如果有人叫你的名字,你也會特別容易感知到,這就是有名的"雞尾酒效應"


值得一提的是,人的耳朵接受到高頻音(3000Hz以上)時會下意識地往上看,而接受到低頻音(750Hz以下)時會往下看,因此在製作VR項目時,這都是有利於引導使用者視線走向的好方法

我們常常提到自己感覺到了速度,其實那指的是加速度,人體對於加速度是有感的。因此無論是飛機起飛或汽車加速時,你就能感覺到速度快速增加,但人體對於"速度"本身是感覺不到的,當飛機飛行到穩定速度時,你能在機艙內安穩地用餐而不會覺得飛機正在快速移動,而你現在也無法感覺到地球正在定速轉動

重力感是唯一我們無法欺騙身體的感覺,比如在某個VR項目中過雲霄飛車翻轉了180度,但實際上你的身體清楚地意識到其實你重力還是朝下,這時沈浸感就會降低,除非該專案真的搭配了能轉180度的椅子才建議做這樣的設計。

人體比想像中更容易感到疲倦,如果長時間配戴VR設備,不管是眼睛還是手都很容易產生疲勞感。如果過於頻繁地引導玩家改變聚焦距離也很容易使人感到疲倦,我們建議最佳的距離是2M-5M。而以目前的硬體設備的性能來看,最佳的內容體驗時間大約是5分鐘-10分鐘,時間過長人體就會產生疲勞感。其他比如突然晃動鏡頭,突然停止畫面或是幀率過低都會讓人體產生不舒服的感覺


真實感與移情反映

其實人類並非像我們所想的那樣,希望從VR體驗中得到真實感,或者說對真實感的追求是有限度的,這是因為人的情感系統天生帶有移情反應,會把所有虛擬現實世界裡的物體和真實世界划上等號。如果在虛擬現實世界里看到一隻朝著你搖尾巴的小狗,你會主觀地認定它對你沒有傷害而降低警覺性,而當你的專案是恐怖遊戲時,這種移情反應將會是一個非常好的切入點。舉一個有趣的例子,當你去商場買衣服的時候,你會發現假人永遠都是沒有頭或是沒有五官的幾何圖形,如果假人有張人臉反而會令客人產生恐懼感,這是1970年日本機器人專家森政弘,根據Ernst Jentsch於1906年發表的"恐怖谷心理學"所提出的理論:當人類看到與自己形體相當的假人時會產生正面情感,但是隨著假人越接近真實的人類外表與行為時,人們則會突然產生劇烈的排斥與恐懼感,直到假人與正常人類外表與行為完全一致時才會消除這份恐懼感,這樣的曲線呈現看起來像是一個山谷,因此稱為"恐怖谷理論"


因為曲線呈現一個谷的形狀而被稱為恐怖谷理論
圖片來源:Google image



正因為移情反應,開發恐怖遊戲更適合使用真實世界的材質而非卡通材質,沈浸在虛擬現實內的玩家看到鋒利的刀會不由自主的想要避開,看到熊熊烈火會想要繞開,因為有這樣的反應,所以虛擬現實也非常適合用在軍事訓練上,讓士兵習慣在危險的環境中生活。


VR的目前市場分析與硬體介紹


雖然VR硬體百家爭鳴,但目前市場上大概有三種類型的設備


第1種.必須接上電腦的沈浸頭戴式設備(HMD),這種設備的代表就是Oculus Rift,其優點在於沈浸體驗很好,但由於是有線設備,其有限的移動範圍是個障礙,因此特別合適於雙腳不需移動的應用。設備本身價格比較昂貴,因此大多都是應用於to B的領域,現在該設備上的應用大多都是短時間體驗,因此非常適合展覽或是商業活動展示,但這類活動體驗的人數較多,因此如何保持設備的衛生將是個大問題。
除此之外,還有Sony的Morpheus和HTV的Vive等設備都即將問世。


第2種.需要自帶手機的VR(Mobile VR),現在人手一部手機,因此該類設備只要簡單地將紙版折成的可容納手機的盒子就能體驗,代表性的設備有Google Cardboard及Gear VR,雖然體驗沒有PC頭戴設備好,但由於成本低廉,易於攜帶,開發應用的流程也是手游開發者所熟悉的,因此今年有大量的開發者投入Mobile VR的開發行列,進而帶動了整個VR市場的發展。


第3種.整合VR+AR技術的新型態體驗,進入CR(Cinematic Reality)新領域,要知道市場上總是有往前衝的領頭羊,谷歌所推出的Google Glass就是一個案例,雖然現已成為絕響,但也造就後面的Microsoft Hololens, Magic Leap等新型態眼鏡的快速進化。未來眼鏡的輕量化,極強的電池續航力將是次世代VR設備的重點,但為了達到眼鏡輕量化的效果,代價就是身上必須背著一個用來運算的硬體,如果運行效果能達到預期,我們將踏入次世代VR領域。


除了上述大類之外,也有許多不同的VR裝置,比如投影VR或全息VR。


如何用Unity開發VR專案


Unity 從5.1開始就把VR SDK整合到引擎內,開發者只要下載最新的Runtime Driver之後,在Player setting設定內將Virtual Reality Supported打勾,並把眼鏡連接上電腦就能直接把專案轉為VR專案,預設的鏡頭會自動切換成為VR鏡頭,VR的開發過程將與開發一般專案無異,只有在按下Play按鈕時,Game View的視角才會切為VR雙鏡頭畫面
Player setting畫面


VR專案的優化依照硬體差異會有不同的考量,但是與手機遊戲相比起來相對容易,在現今的手機上,我們建議保持下列幾點守則,以保證專案執行順暢:



1.絕對不能讓FPS突然下降
2.減少物體數量,減少物體曲面
3.多用靜態物體,採用烘焙光照
4.Draw Call保持100左右
5.小於100k的三角面
6.可以採用高解析的紋理來彌補
7.使用物理引擎來避免CPU消耗過大
8.採用LOD,遮擋剔除,批次運算


Unity 5.1的Profiling功能已經支援Oculus和Gear VR的直接報告,這代表只要裝置連接或是在同網段下,開發者就能透過Profiler來監控VR專案的效能並進行優化。




目前Unity的VR開發技術挑戰


傳統的VR渲染管線,是使用兩個相機按照視距擺放並對場景進行渲染。一般來說,渲染時需要在每個相機中依次掃描場景中需要渲染的物體,因此整個場景被渲染了兩次,如下圖所示。這種做法最為直觀簡單,但本身存在較高的性能浪費。同樣的場景,近乎一致的相機設置,卻進行了兩次視域體裁剪(Culling)操作,兩遍的圖形管線API以及雙倍的Drawcall佔用。因此,我們在Unity 5.1中針對VR的渲染管線進行了深度優化,比如場景裁剪(Culling)僅做一次,場景中的動態陰影也僅渲染一次等等。同時, Android多線程渲染功能和GPU skinning(僅OpenGL ES 3.0)技術的大力支持,讓VR方面的渲染性能得到了較大幅度的提升。


傳統的VR渲染管線。


接下來的Unity開發計劃還會加入更多VR設備相關的API,比如眼球追蹤API等。渲染管線也會繼續優化,預計5.1之後的渲染管線會有幾種走向:


1.渲染場景時,只掃描一次場景,每個物體只送出一次,但根據照相機的不同Viewport和Transform渲染兩遍。這方法較易實現,且與舊的VR渲染管線相比好些,大量的圖形管線API僅呼叫一次,但缺點是渲染時仍需要消耗兩倍的Drawcall。

改進後的VR渲染管線。


2.原理同方法1,不同的是通過Command Buffer(DX11)來送出和渲染場景中的物體。所以優點也方法1一樣,缺點同樣是兩倍的Drawcall消耗,以及需要硬體設備支援Command Buffer功能。

3.在掃描場景進行渲染時,通過硬體Instancing技術針對每個物體渲染兩個instance,一個用於左眼相機,一個用於右眼相機。這樣做的好處不僅保證了對圖形管線API的一次呼叫,同時還可以大幅降低Drawcall的佔用,即雖然顯示於兩個相機中,但只需要一倍的Drawcall。這方法的缺點是不支持Open GL ES 2.0的設備,同時與標準的Instancing技術也會產生衝突


結語


雖然VR硬體廠商如潮水般的湧入市場,但目前仍缺乏一個商業化思維,簡單來說就是尚未找到一個能夠賺錢的方法,但這和軟硬體發展有極大的關係與空間,相對於VR,反而AR領域目前還比較能夠找到商業模式。但VR前景仍被看好,我們也相信隨著更多人投身該行業,相應的商業模式也會迅速確立。

這幾年的科技產業變化突飛猛進,我們對於VR產業是相當樂觀的,預測短短幾年內我們就能在生活中體驗到各種VR或AR項目,以Unity的角度來看,保持技術領先,永遠以幫助開發者為前提,和所有的硬體公司和開發者保持良好互動,並提供一個良好的開發環境來創建出未來優質的VR產品,是我們不會改變的目標。

2 則留言:

關於我自己

我的相片
Unity台灣官方部落格 請上Facebook搜尋Unity Taiwan取得Unity中文的最新資訊