4月24日,騰訊互娛前沿技術中心專家李君白在Unreal Open Day上詳細分享了騰訊為什麼做以及如何做輕社交平臺Solar VR的經驗。
騰訊在VR領域的探索和嘗試,主要有騰訊智能創新業部和騰訊互娛研發部兩個部門承擔,其中前者負責了硬件開發平臺部分,後者則是在遊戲內容及社交方面進行探索。
從2015年開始,騰訊互娛事業部就在VR內容領域開始進行了相關嘗試。其中,2015年下半年做了代號為Comet 的項目,這是一款太空飛行射擊遊戲,重點在遊戲引擎、渲染、操控進行了探索。2016年上半年,做了代號為Solar VR的項目,這是一個多人互動的輕社交應用,類似Facebook Spaces和Altspace ,允許多用戶在VR中一起打牌、畫畫、社交等。
4月24日,騰訊互娛前沿技術中心專家李君白在Unreal Open Day上詳細分享了騰訊為什麼做以及如何做好輕社交平臺Solar VR的經驗。以下為87870稍作調整和整理後的演講:
我是來自騰訊前沿技術中心的李君白,今天為大家帶來我們騰訊中心UE4引擎從事社交平臺的開發經驗。我個人使用Unreal3也有很多年頭了,開發過不少的遊戲,加入騰訊在《天涯明月刀》做過自研引擎的架構開發,現在負責Solar VR社交遊戲平臺的開發工作。
我今天的分享包括三個部分,做輕娛樂平臺Solar VR的背景介紹、開發過程當中的技術分享經驗以及去年下半年的Demo的演示過程。
首先是背景介紹,大家知道為什麼我們做輕社交的娛樂平臺嘛?眾所周知VR是全新的領域,在VR下很多的開發領域都面臨著革新和創新,我們的應用是立足於以社交平臺為基礎的開發定義。我們需要帶給人們的是一種玩家交互之間的沉浸感和交互臨場感。
社交比起純粹的VR來說黏性和用戶反覆體驗性是非常強的。以市面上的VR遊戲為例,很多都是以一次性體驗的效果,這樣很難吸引玩家再次進行體驗。其實市場上有很多社交VR先行者,包括Altspace VR、Rec Room以及Facebook Spaces。
VR的社交是完全嶄新的,有很大可以期待的想象空間。根據我們長期的數據統計結果,Rec Room的周活躍用數超過其他幾個VR社交應用的總數,所以我們覺得輕娛樂是關鍵。
於是,我們有了Solar VR的構想和嘗試。大家可以想象在這樣的空間裡面好友聚在一起可以打牌,可以參加唱歌、開會。我們在開發過程當中會對社交玩法中的某些元素進行提取,比如,打牌的私人會所空間,大家可以在一起去玩。
那麼,為什麼選擇UE4作為VR的渲染引擎呢?其實UE4有很多優點,在此不一一詳細列舉了。
我更看重的是可靠的引擎基礎和高質量的渲染架構。UE4的語音質量和渲染質量在業內處於領先地位。對完善的工具鏈要重點提出,工具鏈是市場上的優勢,在長期的Unreal使用過程累計了很多可靠性非常強的工具鏈,無論從美術的資源支持還是從程序的生成過程都是非常好的。這樣完善的工具鏈會帶來整個開發流程上的順暢性和高效性。
在講過Solar VR項目背景後,現在分享一些開發過程中的經驗,希望能夠與大家進行討論。
首先我們的原型是在Unity上實現的,後來決定要遷移到Unreal平臺上,這其中有很多的切換,比如說代碼、數據、開發流程等的切換。從Unity切換到Unreal上來,我們用了一個星期的時間。
在代碼切換上有幾個方面,其一是把原來的服務器的代碼移植到客戶端。其他移植過程中最主要的問題就是第三方插件,大家大可以放心,大多數第三方知名的插件在Unreal中都可以得到相應的切換。
數據都是可以重用的,但場景是需要重新構建的,如果需要的話也可從Unity導出場景列表,再從Unreal中一次性導入。這取決於場景和重新工作。
Unreal需要建立比較完善的CR的持續構建的體系,來保證美術和策劃能夠及時地得到更新的程序。
我為大家介紹一下我們的技術選型。我們使用了Unreal Delicated server,傳統的遊戲後臺都會使用數據包重複、服務器寫套邏輯。我們選用的是Unreal自用的Unreal Delicated server同步的邏輯,為什麼這樣選擇呢?有幾個原則。
因為是社交遊戲,有大量的物理交互在裡面。我們很看重物理,想在服務器單獨寫引擎,這個代價很高的,我們想一用DS server直接實現優勢。我們可以把服務器的代碼移到服務器上來,在一些小的團隊服務器人員在緊張的情況下就可以不用參與遊戲邏輯的開發,而是由客戶端程序員去參加,這是很有利的一點。包括整個過程當中,服務器後臺也只佈置了一位人員做後臺DS server的開發。我們用這套系統的話會有籤權的體系。我們用Client端向Game Server申請遷入的時候,就產生了Generate Token ID,再通過註冊從GS上返取回玩家數據以後再往客戶端發送通知,再把Room信息送過去,再把切割信息跟DS對上,DS做過簽證的驗證以後,Clinet和DS server就建立了連接。建立這樣的連接以後,後面的遊戲都可以直接進行通信,就不用依賴於後臺的任何邏輯,後臺只負責登陸登出和數據庫訪問。後面我們還會做一些像DS Masager來管理創建和銷燬,這樣整套東西可以在這樣的服務器架構下完美地運作起來。
說到了DS server,有一個坑要跟大家分享一下。我們開發過程中會遇到很多的Replicate的問題。它的方法會帶來一些問題,比如當我們Server想寫一個代碼的時候,哪怕經過了若干楨服務器想做函數代用,本以為Clent已經拿到了,但過程是不確定的。
另外一個例子也是一樣的,哪怕是在同一楨裡寫兩個條件,在Clent仍然無法保證A比B先得到,所以是不能依賴於Replicate的。
我覺得不能依賴於replicate讓邏輯得到充分的保證,我們把關鍵的數據copy好以後,在合適的時候通過RPC的方法發出去,這樣可以在服務器端拿到RPC,這個順序就可以得到一定的保證。
剛才都是技術選型的背景,現在要回到主題,就是說在VR中開發應用有什麼特性?在VR下最主要的關鍵因素有幾個。一是,我們有一些基礎交互的操作,在社交的前提下,我們更重視人面對面地交流,其實每一舉、每一動包括嘴型、IK表現都是被對方仔細觀察的。所以,這個東西的要求比一般的遊戲都要高很多。
除此之外,VR是沉浸式體驗的環境。在這種環境下,玩家對聲音的敏感度是非常高的。所以,這就要求我們對Spatial Audio3D聲音的設計和實現都要提出更多的需求。當然VR下最永恆的話題就是優化,因為投顯設備都是要求90楨率的情況下,優化和效率永遠是VR繞不開的話題,在關鍵上要做一些取捨。
VR交互上還有很多的設計,包括手部動作的設計、交互動作延遲、手臂、腳部、角色VR下移動、口形語音同步力反饋、Camera控制、手勢識別等。這些主題在交互前提下都是非常重要,但由於時間關係,我隨便提出兩點跟大家分享一下。
首先是一個手勢的識別。大家知道,可以識別手指按下未按下的狀態,通過這種動態的辨別可以在用Animation Layer + Mask合成動畫過程,美術手只要提供張開和閉合的動畫可以讓完整地模擬出來。
對於物件交互來說,有很多種,但是每一種都需要我們仔細地去實現。比如,我們用拳打東西的時候要考慮到伸開手的時候動作是什麼樣的,閉合的時候是什麼樣的,打出去以後和力度產生的衝擊力有多大,帶來了力反饋這種參數的調整,或者說是搖一搖功能,需要去測搖一搖的頻率、力度是多少。交互的動作都需要去精細地調整。
這裡我們做了結論的分享,關於多人情況下扔東西延續的分享。我們可以把楨同步和狀態同步稍微融合了一下,做了這樣的優化。
在手拿到東西之前,我們手的同步是通過自己的手本身的同步來做的。當我們拿起東西和鬆開東西當中的第二階段,我們是通過狀態同步的。當我們發出指令來同步狀態,我們手在拿東西的過程當中東西是可以跟著手繼續運動,這樣的情況下本地玩家是感受不到任何延遲的,體驗是比較好的。
我們把手扔出去的時候可以同步對象的位置和朝向,可以把他角速度和朝向速度都同步,在模擬最後的時候,速度比較小的時候可以把它的速度慢慢回到服務器應該的位置上,這樣玩家在網絡情況波動的情況下也能感到比較好的體驗。
我再說說VR中交互物件開發和玩法設計。我們的遊戲是想在遊戲中實時創建和銷燬以藍圖為單位的交互物件,在遊戲當中可以拿出來成直接可以玩的遊戲的設計。
這樣的情況下面臨一個問題,物件在VR中有多種多樣性,對於交互來說,用戶的學習成本非常高。我們的設計師後來想出通過討論做出一種方法,比如大家看這是一個手柄的控制器把所有的AB、XY都定義成功能鍵,我們再把手柄反面的鍵定位為Action鍵,這樣三種基本元素的組合形成了整個交互物件的最基礎操作。
這樣做有兩個好處,玩家的學習成本會非常低,他們拿到物件以後試試A和B就可以知道怎麼用,這對我們移植非常有利。在這樣的基礎建立好以後,我們開始了敏捷的迭代開發,可以讓程序員並行地開發很多種原型,甚至考慮讓玩家UGC創建出內容為我們的遊戲增加內容,保持內容的持續性。
在這一方面,我們的團隊在比較短的時間內驗證了很多的玩法。有一些是剛開始的設想實現了以後就放在那裡,大家討論哪一個東西比較好。比較好的情況下會投入美術資源優化,這些東西都是建立在操作基礎上,所以所有東西都是以這樣的基礎下開發,就會很快地開發出很多原型讓大家來體驗。
引擎開發源碼,如果團隊有一定的能力能夠把控源碼的質量和方法,應該使用源碼去進行開發,為什麼?因為用源碼以後可以做底層的優化。對於一些升級來說,可以選擇性地升級一些新的Unreal引擎帶來的想法。這也是開源的優勢。
最後想給大家的分享的是,引擎開發當中騰訊社交組件Plugin的繼承有兩個,一個是Apollo Voice,它是第三方語音交互的集成,大家可能不是很熟悉。《王者榮耀》的開黑語音大家應該很清楚,平臺都是以這樣的平臺為基礎,後面有專門的語音服務器來組織語音的傳送和多人對話。VR社交裡面聲音是非常重要的一點,會提供給很多後處理的聲音來處理,包括混響以及空間聲音定位,這都是比較有意思的。Apollo Voice也是作為公司的組件。
後面是QQ的遠程桌面共享。這個大家年輕的時候都幫妹子遠程修電腦時用過,但是我們把它集成到VR中以後,可以實現很多很有意思的嘗試,比如說,直播電競解說、大屏看電影、多人同屏協作工作、遠程開會等。我們把圖片、模型、文本、聲音都直接從電腦裡拖到VR世界中,就像是從異空間拉入到VR世界中,在VR世界中產生虛擬的世界。
後面就是一些有意思的展示。這是《英雄聯盟》的直播體驗,是去年年底Demo的展示,可以調整裝備。自拍杆拍出來的照片可以搖一搖;語音球可以給玩家的同伴留語音,可以搖一搖點贊,並且把它傳送給其他社交好友,作為語音留音箱。多人連線可以一起組隊。這是直接從遊戲裡面拿出來玩的《德州撲克》,這是剛才說的可以從電腦裡直接把照片、模型拖拽到虛擬世界當中,這是剛才一開始說的,除了可以打牌還可以在一起唱歌,這是我們做的K歌的星空劇場,你唱歌高興的時候機器人還可以跟你一起互動。