整理學(xué)習(xí)自 CSDN 博客 http://blog.csdn.net/xoyojank/article/details/54669020
目前絕大數(shù)的 VR 游戲, 其實(shí)就是美術(shù)做個(gè)場(chǎng)景, 程序?qū)崿F(xiàn)一下交互, 然后就可以拿去上線了, 難怪 2016下 半年 VR 熱度開始冷卻, 因?yàn)楹鲇铺嗔? 單人和多人 VR 游戲的技術(shù)含量完全不是一個(gè)量級(jí)的. 只有耐心把地基打好, 才能建造一座高樓. 下面是從他人博客里抽離出來的我認(rèn)為很有說服力的闡述了我們開發(fā)者開發(fā) VR 多人游戲會(huì)遇到的主要問題與挑戰(zhàn).
做為一個(gè)多人游戲, Avatar 是必須的. 而很多單機(jī)的 VR 游戲只有兩只手. 有些多人 VR 游戲就是只做了一個(gè)頭加兩只手的形象, 說是”可信度”>”真實(shí)度”. 雖然這個(gè)思想是沒錯(cuò), 但只有頭跟手在表現(xiàn)力上也太搓了點(diǎn). 這么做的原因是 VR 設(shè)備只提供了頭顯和兩只控制器的 Transform, 所以沒辦法完美地模擬出身體其它骨骼的運(yùn)動(dòng). 或許有人說可以像其它網(wǎng)游那樣使用美術(shù)制作的動(dòng)畫, 但是那樣的話, 就失去了”可信度”, 畢竟面對(duì)面交流的感覺, 是需要身體語言的, 而 VR 設(shè)備三個(gè)骨骼的 Transform 就可以表達(dá)出很多信息了.
所以, 要想讓玩家的 Avatar 生動(dòng)起來, 必須把他身體的動(dòng)作同步到 Avatar 上面. 但是, 由于沒有身體的其它骨骼關(guān)節(jié)的信息, 只能依靠 FullbodyIK 的技術(shù)進(jìn)行模擬. 目前看來, 做得比較好的中間件有 FinalIK 和 IKinema. 頭部的轉(zhuǎn)動(dòng) IK 是最容易實(shí)現(xiàn)的, 類似傳統(tǒng)游戲中的 AimIK/LookAt 等; 胳膊的 IK 稍困難, 需要避免與身體的穿插, 還要保證肘部關(guān)節(jié)和肩部關(guān)節(jié)的角度不會(huì)超出約束范圍, 不然會(huì)看著像骨折了; 下半身的 IK 是最難的, 因?yàn)殡p腿需要跟著上半身做彎曲/下蹲/轉(zhuǎn)身/邁步等, 跳躍和彎腰更是目前無法完美模擬的.
說到 VR 游戲中的移動(dòng), 很多人已經(jīng)有個(gè)共識(shí)就是會(huì)暈. 所以, 對(duì)于小范圍的移動(dòng), 通常是使用 RoomScale 的空間走動(dòng); 對(duì)于大范圍的, 目前通用方法是使用傳送. 雖然也有駕駛類的, 但是與特定游戲玩法相關(guān)性比較大, 這里不做討論. RoomScale 的移動(dòng)對(duì)于單人來說, 很好處理, 但是反應(yīng)到其它玩家的 Avatar 上就是一個(gè)問題了. 因?yàn)樵谶壿嬌? 他們的 Transform 并沒有變化, 只是頭跟手的 Transform 發(fā)生了變化. 如果 Avatar 的設(shè)計(jì)有腿的話, 就需要腿跟隨頭部移動(dòng)和轉(zhuǎn)向, 這樣出來的效果十分詭異, 因?yàn)檎H耸窍掳肷韼?dòng)上半身移動(dòng)/轉(zhuǎn)向的, 而VR里是頭和手帶動(dòng)上半身, 上半身再帶動(dòng)下半身, 出現(xiàn)的動(dòng)作就會(huì)不協(xié)調(diào). 2017 年應(yīng)該會(huì)上市很多 HomeScale 的頭顯, 采用類似 Hololens 的 SLAM 定位技術(shù), 這時(shí)候腿部表現(xiàn)就是不可避免的了.
除了肢體語言, 手勢(shì)也是一種極富表現(xiàn)力的交流手段. OculusTouch 的 Touch 特性用來模擬拇指/食指/中指的動(dòng)作, 進(jìn)行一下組合就能實(shí)現(xiàn)很多種常見的手勢(shì), 配合肢體語言, 可以極大地增強(qiáng)面對(duì)面交流時(shí)的真實(shí)感. 當(dāng)然這個(gè)沒什么技術(shù)含量, 會(huì)做動(dòng)畫狀態(tài)機(jī)就能做, 難的是手拿物體的動(dòng)作. 如果只有固定的幾種東西, 那就可以針對(duì)每個(gè)物體做不同的手抓住的動(dòng)畫. 但是如果想用雙只手交替拿物體的任意部位, 這種預(yù)置動(dòng)畫是滿足不了需求的. VirtualGrasp 就做了這樣的技術(shù), 可以讓手指在不同物體的不同部位, 都能讓手指貼到物體表面上, 做到了比較自然的抓握動(dòng)作.
多人交流, 那溝通是少不了, 但是 VR 游戲沒人會(huì)用鍵盤去玩的, 所以語音聊天成了多人 VR 游戲必須做的一個(gè)基礎(chǔ)功能. 不過 VR 中的語音聊天不僅僅是像 YY 那樣開個(gè)房間就好, 而是需要把聲音空間化, 做成 3D 音效, 這樣才像是從玩家 Avatar 的嘴里發(fā)出來的聲音, 2D 音效在 VR 里是相當(dāng)違和的. 再進(jìn)一步, 需要考慮聲音的反射和遮擋, 這個(gè)目前還沒有在實(shí)際產(chǎn)品中看到比較完美的技術(shù)方案, 大家最多只是做個(gè)混響效果. Oculus Audio SDK 中有 Sound Spatialization 的技術(shù), NVIDIA 有 VRWorks Audio, AMD 也有 TrueAudio, 因?yàn)榇蠹叶家庾R(shí)到, 在 VR 中, 聲音的重要性, 不亞于畫面.
說話時(shí)有了聲音, 那 Avatar 的嘴要?jiǎng)影? 這就是涉及到 LipSync 的技術(shù)了. LipSync 不是什么新技術(shù)了, 在 AAA 游戲中用得很多, 只不過大家用的都是離線生成的口型數(shù)據(jù), 而 VR 語音聊天是需要實(shí)時(shí)生成的口型的. 如果只是單音節(jié)識(shí)別, 還算比較簡單, Oculus 的 LipSync 就是這樣, 效果一般. 再進(jìn)一步就是需要考慮前后聲音的相關(guān)性, 做出口型的連續(xù)變化, 而不是簡單的插值. 這方面目前看著效果比較好的是 SpeechGraphics 做的中間件. 最難的是情緒識(shí)別, 因?yàn)樽炷軇?dòng)了, 臉還是僵硬的, 看著也是很假. 另外, 語音識(shí)別什么的, 也是有可以用的時(shí)候, 畢竟在 VR 里做交互和做文字輸入什么的, 沒有直接說話來得輕松.
上面說到了臉部的表現(xiàn), 最最基本的, 需要做個(gè)表情吧? 簡單的卡通風(fēng)格用貼圖畫就可以, 偏寫實(shí)的風(fēng)格就需要用綁定大量臉部骨骼或者導(dǎo)出 MorphTarget 去表現(xiàn)表情的變化. 一旦使用了基于 Mesh 的表情制作方案, 動(dòng)畫美術(shù)就瘋了, 綁定一張臉的 Rig 就累個(gè)半死. 不知道 DCC 工具中有沒有比較快速綁定臉部骨骼或者生成 MorphTarget 的技術(shù), 不然制作成本是個(gè)問題. 好了, 等美術(shù)做好了幾個(gè)表情動(dòng)畫, 問題來了, 我怎么觸發(fā)呢? 體感控制器上就那么幾個(gè)按鈕, 總不能都用來觸發(fā)表情吧? 那就做個(gè) UI? 等你選完早就不笑了. 用身體動(dòng)作觸發(fā)? 老是會(huì)誤觸發(fā), 一會(huì)兒哭一會(huì)兒笑的, 跟精神病一樣.
有了口型變化, 有了表情變化, 為什么還有兩只死魚眼呢? 這時(shí)候又需要做眼神的控制了. 隨機(jī)眨眼是比較簡單的, 難的是視線方向的控制. 因?yàn)槟壳暗牧慨a(chǎn)頭顯都不帶眼動(dòng)追蹤的功能(只聽說 FOVE 有), 所以你沒法知道對(duì)面玩家的眼睛到底在看哪里. 那只能做個(gè)策略來進(jìn)行模擬, 比如根據(jù)聲音, 根據(jù)運(yùn)動(dòng)物體的位置, 根據(jù)頭部朝向的目標(biāo)等, 怎么調(diào)出來讓人覺得自然也是需要很多精力和時(shí)間反復(fù)調(diào)整的.
嗯, 臉部表現(xiàn)豐富了, 肢體動(dòng)作也有了, 其它方面也要跟上吧? 頭轉(zhuǎn)了, 頭發(fā)是不是也要甩一甩? 身體動(dòng)了, 衣服是不是也要飄一飄? 這又掉進(jìn)物理模擬的坑里了, 大量 AAA 級(jí)游戲都有比較成熟的方案, 不再多說.
物理最麻煩的不是模擬, 而網(wǎng)絡(luò)同步. 在任何一個(gè)使用雙持體感控制器的 VR 游戲中, 都少不了各種帶物理模擬屬性的物件, 可以拿起來扔之類. 而到了多人 VR 游戲中, 這些物件的運(yùn)動(dòng)一樣需要同步到其它客戶端. 可能這一秒還在你手上, 下一秒就被其它人拿去了. 另外, VR 游戲中現(xiàn)在大多是 90FPS, 手上拿的東西如果模擬稍微有點(diǎn)延遲立即就能察覺, 影響所謂的”手感”. 在場(chǎng)景多的物理對(duì)象很多的時(shí)候, 你用幀同步吧, 延遲太大; 你用狀態(tài)同步吧, 服務(wù)器跑個(gè)物理引擎又比較吃力, 下發(fā)的數(shù)據(jù)量也很大, 不知道玩家?guī)捘軗巫〔? 再說了, 之前同步頭和手外加語音聊天已經(jīng)占用掉很大一部帶寬了, 留給物理對(duì)象的已經(jīng)不多了.
End.
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注