# 開發 VR 多人遊戲的技術挑戰

整理學習自 CSDN 博客 http://blog.csdn.net/xoyojank/article/details/54669020

目前絕大數的 VR 遊戲, 其實就是美術做個場景, 程序實現一下交互, 然後就可以拿去上線了, 難怪 2016下 半年 VR 熱度開始冷卻, 因爲忽悠太多了. 單人和多人 VR 遊戲的技術含量完全不是一個量級的. 只有耐心把地基打好, 才能建造一座高樓. 下面是從他人博客裏抽離出來的我認爲很有說服力的闡述了我們開發者開發 VR 多人遊戲會遇到的主要問題與挑戰.

Avatar

做爲一個多人遊戲, Avatar 是必須的. 而很多單機的 VR 遊戲只有兩隻手. 有些多人 VR 遊戲就是隻做了一個頭加兩隻手的形象, 說是”可信度”>”真實度”. 雖然這個思想是沒錯, 但只有頭跟手在表現力上也太搓了點. 這麼做的原因是 VR 設備只提供了頭顯和兩隻控制器的 Transform, 所以沒辦法完美地模擬出身體其它骨骼的運動. 或許有人說可以像其它網遊那樣使用美術製作的動畫, 但是那樣的話, 就失去了”可信度”, 畢竟面對面交流的感覺, 是需要身體語言的, 而 VR 設備三個骨骼的 Transform 就可以表達出很多信息了.

所以, 要想讓玩家的 Avatar 生動起來, 必須把他身體的動作同步到 Avatar 上面. 但是, 由於沒有身體的其它骨骼關節的信息, 只能依靠 FullbodyIK 的技術進行模擬. 目前看來, 做得比較好的中間件有 FinalIK 和 IKinema. 頭部的轉動 IK 是最容易實現的, 類似傳統遊戲中的 AimIK/LookAt 等; 胳膊的 IK 稍困難, 需要避免與身體的穿插, 還要保證肘部關節和肩部關節的角度不會超出約束範圍, 不然會看着像骨折了; 下半身的 IK 是最難的, 因爲雙腿需要跟着上半身做彎曲/下蹲/轉身/邁步等, 跳躍和彎腰更是目前無法完美模擬的.

VR 遊戲中的移動

說到 VR 遊戲中的移動, 很多人已經有個共識就是會暈. 所以, 對於小範圍的移動, 通常是使用 RoomScale 的空間走動; 對於大範圍的, 目前通用方法是使用傳送. 雖然也有駕駛類的, 但是與特定遊戲玩法相關性比較大, 這裏不做討論. RoomScale 的移動對於單人來說, 很好處理, 但是反應到其它玩家的 Avatar 上就是一個問題了. 因爲在邏輯上, 他們的 Transform 並沒有變化, 只是頭跟手的 Transform 發生了變化. 如果 Avatar 的設計有腿的話, 就需要腿跟隨頭部移動和轉向, 這樣出來的效果十分詭異, 因爲正常人是下半身帶動上半身移動/轉向的, 而VR裏是頭和手帶動上半身, 上半身再帶動下半身, 出現的動作就會不協調. 2017 年應該會上市很多 HomeScale 的頭顯, 採用類似 Hololens 的 SLAM 定位技術, 這時候腿部表現就是不可避免的了.

手勢

除了肢體語言, 手勢也是一種極富表現力的交流手段. OculusTouch 的 Touch 特性用來模擬拇指/食指/中指的動作, 進行一下組合就能實現很多種常見的手勢, 配合肢體語言, 可以極大地增強面對面交流時的真實感. 當然這個沒什麼技術含量, 會做動畫狀態機就能做, 難的是手拿物體的動作. 如果只有固定的幾種東西, 那就可以針對每個物體做不同的手抓住的動畫. 但是如果想用雙隻手交替拿物體的任意部位, 這種預置動畫是滿足不了需求的. VirtualGrasp 就做了這樣的技術, 可以讓手指在不同物體的不同部位, 都能讓手指貼到物體表面上, 做到了比較自然的抓握動作.

多人之間溝通

多人交流, 那溝通是少不了, 但是 VR 遊戲沒人會用鍵盤去玩的, 所以語音聊天成了多人 VR 遊戲必須做的一個基礎功能. 不過 VR 中的語音聊天不僅僅是像 YY 那樣開個房間就好, 而是需要把聲音空間化, 做成 3D 音效, 這樣纔像是從玩家 Avatar 的嘴裏發出來的聲音, 2D 音效在 VR 裏是相當違和的. 再進一步, 需要考慮聲音的反射和遮擋, 這個目前還沒有在實際產品中看到比較完美的技術方案, 大家最多隻是做個混響效果. Oculus Audio SDK 中有 Sound Spatialization 的技術, NVIDIA 有 VRWorks Audio, AMD 也有 TrueAudio, 因爲大家都意識到, 在 VR 中, 聲音的重要性, 不亞於畫面.

說話口型

說話時有了聲音, 那 Avatar 的嘴要動吧? 這就是涉及到 LipSync 的技術了. LipSync 不是什麼新技術了, 在 AAA 遊戲中用得很多, 只不過大家用的都是離線生成的口型數據, 而 VR 語音聊天是需要實時生成的口型的. 如果只是單音節識別, 還算比較簡單, Oculus 的 LipSync 就是這樣, 效果一般. 再進一步就是需要考慮前後聲音的相關性, 做出口型的連續變化, 而不是簡單的插值. 這方面目前看着效果比較好的是 SpeechGraphics 做的中間件. 最難的是情緒識別, 因爲嘴能動了, 臉還是僵硬的, 看着也是很假. 另外, 語音識別什麼的, 也是有可以用的時候, 畢竟在 VR 裏做交互和做文字輸入什麼的, 沒有直接說話來得輕鬆.

臉部表情

上面說到了臉部的表現, 最最基本的, 需要做個表情吧? 簡單的卡通風格用貼圖畫就可以, 偏寫實的風格就需要用綁定大量臉部骨骼或者導出 MorphTarget 去表現表情的變化. 一旦使用了基於 Mesh 的表情製作方案, 動畫美術就瘋了, 綁定一張臉的 Rig 就累個半死. 不知道 DCC 工具中有沒有比較快速綁定臉部骨骼或者生成 MorphTarget 的技術, 不然製作成本是個問題. 好了, 等美術做好了幾個表情動畫, 問題來了, 我怎麼觸發呢? 體感控制器上就那麼幾個按鈕, 總不能都用來觸發表情吧? 那就做個 UI? 等你選完早就不笑了. 用身體動作觸發? 老是會誤觸發, 一會兒哭一會兒笑的, 跟精神病一樣.

眼神的控制

有了口型變化, 有了表情變化, 爲什麼還有兩隻死魚眼呢? 這時候又需要做眼神的控制了. 隨機眨眼是比較簡單的, 難的是視線方向的控制. 因爲目前的量產頭顯都不帶眼動追蹤的功能(只聽說 FOVE 有), 所以你沒法知道對面玩家的眼睛到底在看哪裏. 那隻能做個策略來進行模擬, 比如根據聲音, 根據運動物體的位置, 根據頭部朝向的目標等, 怎麼調出來讓人覺得自然也是需要很多精力和時間反覆調整的.

物理模擬的坑

嗯, 臉部表現豐富了, 肢體動作也有了, 其它方面也要跟上吧? 頭轉了, 頭髮是不是也要甩一甩? 身體動了, 衣服是不是也要飄一飄? 這又掉進物理模擬的坑裏了, 大量 AAA 級遊戲都有比較成熟的方案, 不再多說.

物理最麻煩的不是模擬, 而網絡同步. 在任何一個使用雙持體感控制器的 VR 遊戲中, 都少不了各種帶物理模擬屬性的物件, 可以拿起來扔之類. 而到了多人 VR 遊戲中, 這些物件的運動一樣需要同步到其它客戶端. 可能這一秒還在你手上, 下一秒就被其它人拿去了. 另外, VR 遊戲中現在大多是 90FPS, 手上拿的東西如果模擬稍微有點延遲立即就能察覺, 影響所謂的”手感”. 在場景多的物理對象很多的時候, 你用幀同步吧, 延遲太大; 你用狀態同步吧, 服務器跑個物理引擎又比較吃力, 下發的數據量也很大, 不知道玩家帶寬能撐住不. 再說了, 之前同步頭和手外加語音聊天已經佔用掉很大一部帶寬了, 留給物理對象的已經不多了.

End.

發佈了104 篇原創文章 · 獲贊 63 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章