GDC2017: 《Lone Echo》中的VR動畫

去年在Oculus Connect 3體驗過《Lone Echo》的多人競技玩法, 品質很高, 算是VR遊戲中的一線大作了. 正好今年GDC上他們分享了一些關於VR中角色動畫的一些經驗, 還是比較有借鑒意義的, 畢竟Avatar做了全身的VR遊戲少之又少.

這是一個太空失重背景下的遊戲, 可以用手抓住環境物體或者推牆進行反向的漂浮. 一開始他們是通過手部射線了檢測是不是抓住靜態幾何體, 通過讓身體與雙手保持與真人1:1的相對位置來驅動身體, 但是這樣對於抓/推動態的環境物體效果不是很好. 原因是遊戲邏輯的更新與物理引擎的更新會有次序上的問題.

後來抓取的實現修改成了基於物理的Constraint來代替射線.

有趣是他們在頭跟手之前也加了個Constraint, 這樣手抓到移動的物體上就可以帶動玩家進行漂浮移動了.

手抓物體的動作在多數VR遊戲中都是使用美術預先製作的動畫, 但《Lone Echo》中要求可以抓住世界中的任意表面. 所以他們通過程序化的方式來計算手指抓住物體時的角度.

針對單根手指來看這個問題, 其實就是求解三角形與圓盤的交點:

1. A*搜索靠近手掌的最近三角形

2. 根據相交邊找到相鄰的三角形

3. 持續這個過程直到不在圓盤範圍內

4. 計算與相交點接觸的手指角度, 取最大的那個來旋轉手指

5. 拇指使用另外的演算法, 分享中沒有提及

為了避免手與表面穿插, 需要在手掌與表面之間做一些距離和角度的約束.

雖然這樣做減少了一些走樣, 但是射線拾取到錯誤的表面會導致手掌吸咐到表面時的角度或位置偏轉過大, 與真實手的位置不同步後一下就讓人齣戲了(影響VR體驗). 所以需要選擇一個同步代價最小的位置.

雙臂的動畫是比較難模擬的, 這是因為我們只有三個點的位置(朝向): 頭, 左手, 右手. 對於肩, 胸, 肘的信息是我們是不知道的, 只能通過IK演算法進行估算.

在肩與手的位置確定的情況下, 我們只需要估算肘部的轉動角度, 肘部的彎曲角度只與肩到手的距離有關係, 是確定可以計算出來的.

肩部位置的估算涉及到鎖骨的伸展和朝向. 朝向指向手的方向, 伸展通過一條手肩距到伸展量的曲線映射進行估算.

胸部的朝向通過混合三個方向的權重進行估算: 頭的觀看方向, 頭到左手的方向, 頭到右手的方向. 運行時也會調整這些權重的分配, 因為手離胸近的時候它的權重就小了, 如果手在身後, 那就完全忽略掉它的影響.

手臂的長度是可以動態調整的, 因為虛擬手的位置必須與控制器的位置1:1進行同步.

所以手臂的IK估算一共有5步.

對於脊柱和雙腿的運動模擬, 主要是通過角度約束從脖子一級級往下傳遞, 與雙臂的IK是分開計算的. 由於《Lone Echo》是一個太空行走遊戲, 所以不需要處理雙腿與地面的走路/下蹲等, 只需要根據位置和速度進行模擬跟隨軀幹即可.

對於待機/推開/觀看等, 是通過疊加動畫師製作的動畫來實現的.

總結: 《Lone Echo》這種太空失重背景的遊戲比較少見, 所以其中的攀爬漂浮與雙腿的處理不是很具備通用性, 不過手指的抓握模擬與雙臂的IK解決思路是值得每個VR遊戲學習的, 目前也有一些IK中間件專門針對VR下的三點驅動的FullbodyIK做出了一些嘗試, 相信隨著技術的成熟, 以後的VR遊戲不再是只有一個頭和兩隻手了.


推薦閱讀:

如何開發一款老陰逼射擊遊戲?
【Unity】UGUI系列教程————UGUI基礎!界面拼接!
爐石製作人主講 - 以《爐石戰記》為例,探討跨平台遊戲的製作思維與設計
偏激地推薦一本書:《DOOM啟示錄》
(譯)GDC13 Summary Animation Bootcamp Part 3

TAG:虚拟现实VR | GDC | 游戏开发 |