開發者帕圖茲分享六大移動機制的特性、局限及實施技巧
文章相關引用及參考:映維網
本文來自GameDev.tc的薩姆·帕圖茲(Sam Pattuzzi)
(映維網 2018年06月20日)在本文中,GameDev.tc的薩姆·帕圖茲(Sam Pattuzzi)將與我們探索一系成功的VR移動機制。對於每種方法,他都將解釋為何其有效,何時應使用,什麼地方不適合,以及提供用於「研究」的部分示例遊戲。以下是映維網的具體整理:
當你為一款遊戲構思出優秀的點子,並希望將其帶到VR中時,你首先遇到的挑戰之一是移動,或者說是移動機制。玩家如何移動對大多數遊戲而言都是基本要素,而且是你開發過程中的首要設計考量之一。VR中的移動機制與眾不同,如果正確地實施。你將能完全改變用戶的體驗。
1. 遊玩空間移動
這是一種非常普遍的移動方式,你甚至不會將其看作是一種移動機制。但對於我們將要討論的內容而言,在遊玩空間中自由移動可能是最為自然的移動種類。
1.1 如何沉浸用戶?
很簡單,我們令大腦認可眼睛所看的虛擬場景,然後我們在真實世界的運動能夠同步至虛擬空間,一一對應。這意味著我們的本體感和前庭系統將認可當前的狀態,它們的感知將與眼睛所看匹配。
1.2 局限
儘管遊玩空間移動很棒,但同樣存在著相當的限制,這意味著我們通常需要用其他移動機制進行補充。
受限於遊玩空間大小
只適合人類範疇的移動,不適合超人範疇的移動。
1.3 實施技巧
第一個挑戰是,令玩家對象(Unreal中的actor)追蹤camera的位置。
通常來說,頭顯移動通過camera相對於其父對象的移動而在引擎中再現。這意味著如果你有一個camera來作為玩家對象的子組件(一種非常常見的設置),你需要採用一定的技巧來移動玩家的遊戲空間。
我們假設以下這個設置(我將使用Unreal引擎作為示例,但這個概念同時適用於其他遊戲引擎):我們假設擁有作為玩家根的Capsule碰撞體。在那之下,我們擁有一個VRRoot場景組。在那之下,我們有Camera。所以我們就有了:
當我們在遊玩空間移動時,Camera將發生什麼事情呢?
你會注意到camera(黑色頭顯設備)相對於VRRoot和玩家中心都有偏移。知道玩家對象的實際位置沒有好處。
當camera在遊戲區周圍移動時,我們希望capsule緊隨其後。但我們無法將capsule製作成camera的一個子組件,原因有二:
在Unreal中,capsule必須是Character的根組件。
我們不想上下移動capsule,只想沿水平面移動。
所以我們可以做的是,將整個玩家移動到camera的位置(下面的紫色箭頭)。現在,這將使camera更遠離玩家中心,因為它是通過VRRoot進行相對定位。所以我們需要更新VRRoot的局部變換,從而令camera保持在同一個地方(下面的藍色箭頭)。
這種方法可以輕鬆結合其他的移動方式。
2. 傳送
傳送已經成為最常見的移動機制之一,因為它靈活,可以與遊玩空間移動相結合。但是,它同樣存在非常嚴重的缺點。
以防你不知道何謂傳送,傳送涉及指向你想要去的地方(通常是利用激光或標記),然後按下按鈕並在非常短的時間內達到這個位置。
2.1 如何沉浸用戶?
在傳送過程中,屏幕常常會淡出然後返回。這在移動發生時抑制了視覺系統,意味著大腦將無法否認它所看到的一切。
2.2 局限
沉浸感不是很夠
不逼真
移動時無法控制,而這可能是多人遊戲中的一個問題。
2.3 實施技巧
實施基本的機制非常簡單:
建立從控制器到地面的追蹤。
在那裡渲染某種標記(我使用一個帶有漸變材質的圓柱體)。
按下扳機鍵後,淡出camera並保存當前位置。
將玩家actor移到新位置。
camera淡入。
如果你想創建一個拋物線路徑,你可以在Unreal中使用以下組合:[UGameplayStatics :: PredictProjectilePath(),[USplineComponent]和[USplineMeshComponent])。
3. 原地慢跑
原地慢跑可以有多種形式,但主要思想是用原地慢跑的運動量來影響移動幅度。這可以帶來一種非常身臨其境的移動方式。
3.1 如何沉浸用戶?
與傳送不同,我們不會在運動過程中壓制視覺系統。相反,我們試圖通過上下跳動欺騙本體感和前庭系統。
請記住,前庭系統基本上是一個加速度計。就像加速度計一樣,當它經歷大量移動時,它無法準確地追蹤位置。我們可以聯想小孩子常玩的「貼驢尾巴遊戲」(用紗巾捂住眼睛,然後給黑板上的驢貼上尾巴)。可行的原因是大量的運動混淆了我們的位置感。
3.2 示例
我見過的最佳示例之一是「Freedom Locomotion VR」這個免費的技術演示作品。系統將根據手臂移動量和頭部擺動量來檢測運動程度。在初始校準之後,它能夠檢測你是否正在移動,以及速度有多快。
然後再配合以搖桿或觸控板,用戶將能指明運動方向。
這種方法的優點是,它可以釋放雙手來抓取對象或與環境進行交互。你不需要看著運動的方向,而且可以幫助你消耗卡路里。
3.3 局限
雖然這是一個很棒的系統,但這主要是適合於奔跑的模擬。而且,這不適合奔跑模擬。
3.4 實施技巧
一個簡單的實施方法是,將頭部擺動與搖桿的輸入方向和控制器的方向相結合。除了頭部運動檢測之外,這非常簡單。
檢測頭部運動的一種簡單方法是追蹤上下維度的速度。如果這樣做的噪點太多,一個簡單的指數移動平均值應該足以帶來流暢的信號。當然,隨著越來越複雜的技術出現,只有天空才是極限。
4. 駕駛艙模擬
我們在上面討論了人類運動,但對於需要駕駛機器的遊戲呢?這種遊戲非常適合就座式開玩,因為在現實世界中你就是需要這樣做。通常情況下,你會坐在控制面板的前方,然後周圍是不會移動的駕駛艙。這時,外面的世界將響應你的控制。
這非常適合飛行模擬體驗,競速遊戲,甚至是機甲對戰。
4.1 如何沉浸用戶?
這個移動機制與其他方式稍有不同。它不會欺騙任何人體系統,而是試圖給視覺系統一些可以鎖定的參考物。
4.2 局限
一個固定的駕駛艙可以大大減少感官之間的分歧。但如果發生極端加速,感官分歧將再次出現。最後,這隻適用於駕駛艙遊戲。
4.3 示例
Lunar Flight
Elite Dangerous
Microsoft Flight Simulator X
Project CARS 2
5. Blinkers(抑制外圍視場)
5.1 如何沉浸用戶?
外圍視覺對運動最為敏感,所以如果我們用這種方式來抑制外圍視覺感知,我們應該可以減輕運動不適的程度。它也很像上面描述的駕駛艙方法,不同點只是沒有將遊戲限制在駕駛艙模擬之中。
此外,附近的任何運動都會產生更強烈的運動信號,因此如果你靠近快速移動的對象,屏幕上的這個區域可能也需要進行遮擋。
5.2 局限
部分用戶不喜歡減少視場。儘管可以巧妙地實施,但當你專註於正要前往的地方時,視場減少將非常明顯。然而,朝注視點以外的任何方向移動都會導致更多的視場遮擋。事實上,根據Blinker的實施強度,這有可能導致完全的黑視。
5.3 實施技巧
在Unreal中,我使用了後期處理材質來實現這個效果。你必須將材質域設置為「Post Process(後期處理)」。
6. 攀爬
儘管這是非常特定的移動機制,攀爬對許多人而言是十分自然的移動方式。
6.1 如何沉浸用戶?
其有效是出於數個原因:
移動不是非常快。
控制器可以作為固定的參考點。
手臂運動可以欺騙本體感系統。
6.2 局限
這可以用於攀爬之外的用例,例如潛行遊戲。不過,這永遠都不會成為普遍性解決方案。
6.3 實施技巧
方法是追蹤手部開始抓取的位置。一旦獲取了這個位置,每一幀都需要更新用戶的位置,這樣手部才能位置在相同的位置。基本上是:FVector HandControllerDelta = GetActorLocation() – ClimbingStartLocation;
GetAttachParentActor()->AddActorWorldOffset(-HandControllerDelta);
7. 拓展延伸
很有可能的情況是,沒有單單一項解決方案可以滿足你的遊戲。你通常需要結合多種方法,甚至是發明一整套全新的機制。理解什麼是可行的解決方案,以及為什麼可以為你提供一個良好的基準來繼續探索新的方案。
在這篇博文中,我只是簡要探討了這些移動機制的實施細節。但是,我們在Unreal VR course on Udemy中詳細進行了介紹。
為什麼是Unreal引擎呢?儘管你可以選擇其他不同的引擎來開發VR體驗,但我認為Ureal提供了優秀的支持,而且你允許你用C++進行編程,從而最大化利用硬體的性能。
許多設計師或許會對C++感到害怕。如果你對編程沒有信心,Unreal同時提供了視覺語言Blueprint,希望幫助你更輕鬆地入門C++的基礎。
文章《開發者帕圖茲分享六大移動機制的特性、局限及實施技巧》首發於 映維網。
※如何在Oculus Go上安裝非官方應用程序
※卡馬克解釋VR視頻《Henry》5K版本背後的技術
TAG:映維VR |