閱讀93 返回首頁    go 阿裏雲 go 技術社區[雲棲]


為什麼在VR中投擲體驗很差——怎樣改善它


0?wx_fmt=jpeg

投擲 - 當你體驗VR,這是你做的第一件事之一。 你拿起那個虛擬的咖啡杯,扔掉它。 杯子,甜甜圈或球瘋狂轉動。 在這之前,你需要通過教程學習投擲。

這裏,我試圖把蘇打瓶子投到我麵前的空白板上。

0?wx_fmt=gif

有些投擲偏離的離譜。有的太低。其中一兩個影響到NPC了。或許,我們的虛擬現實第一節,它其實很難精準的投出。當我有這樣的體驗,我認為是因為自己不擅長VR。我們接受熟練掌握控製方法是遊戲學習曲線的一部分。但是,當投擲相同的動作但是結果非常不一樣,你就會非常沮喪了。

一個大力投擲快速的跌落……

 0?wx_fmt=gif

 嚐試用手來投擲一個瓶水。

而手腕的輕輕抖動可能造成對象這樣飛。

0?wx_fmt=gif

隻使用手腕來拋擲……


 Rescuties:一個接-投的兒童類投擲類遊戲 

在夏天,我一直在做一個休閑動作類的遊戲叫做:Rescuties。這是一個投擲和捕捉兒童喜歡的可愛動物的VR遊戲。

在虛擬現實中,若世界對做出的反映與我們直覺相矛盾,就會打破對遊戲沉浸感和玩家有挫敗感。作為一款投擲類的遊戲,Rescuties不能依賴機械本身就是令人沮喪的。
0?wx_fmt=gif 
這種沮喪是從遊戲設計一開始就伴隨出現。簡而言之,在虛擬現實遊戲中,投擲都是非常困難的,這是由於不能感知虛擬對象的重量。處理方法各不相同——但是大多數的遊戲都盡量去模擬你所持有的虛擬對象的物理屬性。你抓住一個對象,在遊戲中添加一些虛擬動量,然後關閉。

問題是:在顯示生活中感覺與虛擬世界發生的世界感覺是斷開的。當你拾起一個虛擬的物體,物體的質心和質心在手上的感覺有些分離。你的肌肉感覺很怪異。 

當你要投擲的時候,若隻是在這個或某個方向揮手,這種分離感覺沒有太大關係。若投擲時候,彎曲手臂,旋轉手腕(好的投擲的關鍵——“那就是手腕”(手腕發力(譯者注)))。當旋轉你真正的手腕時候,最後加到虛擬對象上的過大的動量,就像你用一個勺子甩出去一樣。 

有個非常不能忽視的現象。在許多虛擬現實遊戲,可以撿起一個離你手一英尺遠的物體。按下一個按鈕,物體就被附著在了手裏,但是它在固定的距離,把手變成一個彈射器。三英寸和十二英寸的差異意味著手腕輕輕的抖動就可以將一個對象扔過一個房間或者很難推動它。


 手腕像彈射器一樣運動 

0?wx_fmt=gif

在Rescuties遊戲中,你在追逐快速移動的嬰兒——想快速把他們送到安全區域。舊的方法會導致過於精細的控製和令人沮喪,不一致的體驗感受。為什麼不能扔的像我該有的感覺那樣呢?


 物理與虛擬重量 

更成功的投擲策略是要尊重物理引擎所建議的用戶的控製感覺。

測量你所持有真實生活中的對象,比如HTC Vive或Oculus Touch 控製器,而不是測量所持有的虛擬對象的投擲速度。這個是你手中能感覺到的重量和動量。那也是肌肉記憶的重量和動量————這個是人花費一生來發展的身體技能和本能———— 回應。
0?wx_fmt=png 

無論你手裏提起的是哪種虛擬物體,你所感覺到的物體重心不會改變。

將物理重量橋接到虛擬對象上是通過物理控製器的重心來確定遊戲中的速度的。首先,找到遊戲中真正的重心點位置。控製器會告訴你他們在遊戲場景中的位置;它取決於你的頭盔,並試圖去校正重心的位置。然後,相對與控製器跟蹤該點,通過改變位置來計算其速度。

這樣修改過後,測試人員在Rescuties中就表現好了很多——但是仍然看到和感覺到很多不協調的地方。

(有關嚐試向玩家傳遞虛擬重量的討論,請參考這篇文章——)一個非常規的方法,忽略人體對控製器重量感覺,利用視覺想玩家展示虛擬對象的行為。


 定時 

要精確的知道玩家什麼時間要投出一個東西?

在現實生活中,當投出一個東西,手指鬆開,物體開始脫離手掌,手指繼續在我們想要的方向上用力,直到完全脫離。或許我們通過手指來旋轉物體或試駕一個很微小的旋轉。

在大多數的遊戲中,使用食指下按扳機鍵來代替這種觸覺上的反饋。有個比按鈕更好的方案——在Rescuties中,在擠壓扳機到20%使手套也接近20%的行程,100%就是一個拳頭等等。——但是你不能感覺物體離開你的手掌,或通過手指來旋轉。拳頭的展開也僅僅是扳機鍵(可能是逐漸的)釋放。我發現,我想要在玩家手指鬆開時候,檢測到玩家的投擲信號。當扳機鍵壓力很緩慢——不是0%或一個很小的量,而是通過實驗設置經驗值來檢測拋出。
0?wx_fmt=png 
 手繪圖 
 

上圖顯示了抓取——保持——拋出周期過程中扳機鍵壓力隨時間的變化曲線。在這種情況下,用戶並不是一直100%的按下扳機鍵——比較常見的是HTC控製扳機鍵到80%,然後在使勁按下才會達到100%。首先,扳機鍵被按下來拾取對象,然後壓力或多或少的保持穩定,因為玩家抓住物體並甩出去投擲——在這裏會看到從扳機鍵傳感器的噪聲。玩家釋放扳機鍵,物體被拋出或下落。

信號噪聲和玩家心跳使扳機鍵強烈抖動。這需要使用閾值來檢測玩家的行為。具體來說,遊戲檢測到扳機鍵壓力(比方說)低於扳機鍵從玩家拾取物體開始時的峰值壓力的20%。這個閾值必須足夠高,這樣玩家才不會意外的丟下一個嬰兒——這個是我與測試人員功能更實驗和錯誤發現的,類似的,若在太低的壓力下就檢測抓到物體,就沒有足夠的餘量來檢測可靠的投擲或釋放。你將會得到我多次失敗中的一個:怪異的超快速的抓起丟掉,抓起丟掉的現象。


 速度幹擾 

 ▼ 

正確的速度測量和改進定時會大大緩解不一致性。但是由於源數據本身——速度測試是來自於硬件的——是帶有很大噪聲的。當頭盔或手柄快速移動的時候,噪聲尤其明顯。


 使用平滑算法來平抑噪聲 
 ▼  

我嚐試著使用一個速度平均值(也叫做低通濾波器)——但是這在某種程度上,會導致慢的投擲階段(甩)和最快的階段(釋放)都變慢。測試人員發現,扔一個東西異常艱難,就像在手裏扔東西一樣。(這是我在Rec Room遊戲的感覺)。

0?wx_fmt=gif

均值控製器速度的感覺還不錯,與上麵Job 模擬器對比就是結果太慢。 

我嚐試使用最近測量速度高峰,測試人員看到他的小動物與他期望的速度基本一致——但是並不總是朝著他想要的方向,因為最後的測試方向受到噪聲問題的影響。

真正需要做的是使用最後幾幀來做測試,並觀察其情況——也就是說,繪製一條趨勢線。通過簡單線性回歸給出更可靠的結果。最後,在需要時候,把它放到合適的地方。


0?wx_fmt=gif

可視化調試顯示紅色顯示測試速度的最後四幀,黃色來顯示回歸結果。


 怎樣改進Rescuties遊戲中的投擲體驗 

測量用戶感覺的質心位置的質心投擲速度——也就是控製器。

檢測用戶打算投擲的精確時刻——即扳機按鍵釋放時間。

充分利用測量的速度數據——進行回歸以便更好預測玩家意圖來。

0?wx_fmt=png 

若你對這些測試比較好奇,可以在Rescuties中有個“實驗室”菜單,在其中切換投放模式打開或關閉,切換速度是如何被測量的,以及控製多少幀在回歸或平滑中被消耗掉。

原文發布時間為:2017-01-18


本文來自雲棲社區合作夥伴“大數據文摘”,了解相關信息可以關注“BigDataDigest”微信公眾號

最後更新:2017-05-26 09:01:42

  上一篇:go  小技巧:檢查你本地及公共 IP 地址
  下一篇:go  小技巧:如何在 Kali Linux 中安裝 Google Chrome 瀏覽器