1
本文作者: 田苗 | 2017-04-26 12:11 |
Solar VR 是騰訊互娛部門開發(fā)的一款多人互動社交應(yīng)用。2016 年的騰訊全球合作伙伴大會上,騰訊公布了此前在 VR 領(lǐng)域的嘗試,據(jù)36氪的報道,主要是騰訊智能創(chuàng)新業(yè)部和騰訊互娛研發(fā)部兩個部門在做相關(guān)的事情。前者負責硬件開發(fā)平臺部分,后者則是對游戲及內(nèi)容方面的探索。
據(jù)雷鋒網(wǎng)了解,騰訊互娛研發(fā)部副總經(jīng)理沈黎曾表示,在 Solar VR 中他們嘗試了人和虛擬世界的交互,并且還在探索人在虛擬世界中肢體語言或是面部表情。未來,他們希望用戶和開發(fā)者以 UGC 的方式在這個社交平臺上創(chuàng)造一些輕游戲的玩法。
李君白
而這次在 Unreal Open Day 上,雷鋒網(wǎng)見到了騰訊互娛前沿技術(shù)中心專家程序員李君白,他表示他們已經(jīng)開始在做 Solar VR 中虛擬人物的表情捕捉,未來有可能實現(xiàn)四肢動作的捕捉,實現(xiàn)效果或許比 Facebook Spaces 展示的還要好。不過,Solar VR 最后什么時間上線,這個還不好說?,F(xiàn)場,他就 Solar VR 的一些開發(fā)技術(shù)問題做了分享,雷鋒網(wǎng)將他的分享內(nèi)容整理如下。
大家好!
我是來自騰訊前沿技術(shù)中心的李君白,今天為大家?guī)砦覀凃v訊中心UE4引擎從事社交平臺的開發(fā)經(jīng)驗。做個簡單的自我介紹,用Unreal3也是有很多年頭,開發(fā)過不少的游戲,加入騰訊在《天涯明月刀》做自研引擎的架構(gòu)開發(fā),現(xiàn)在負責Solar VR社交游戲平臺的開發(fā)工作。
大概我PPT的提綱會在這這樣的幾個部分,做輕娛樂平臺的背景的介紹,開發(fā)過程當中的技術(shù)分享經(jīng)驗,最后是去年下半年的Demo的演示過程。
首先是背景介紹,大家知道為什么我們做輕社交的娛樂平臺呢?眾所周知VR是全新的領(lǐng)域,在VR下很多的開發(fā)領(lǐng)域都面臨著革新和創(chuàng)新,我們的應(yīng)用是立足于以社交平臺為基礎(chǔ)的開發(fā)定義。我們需要帶給人們的是一種玩家交互之間的沉浸感和交互臨場感。
社交比起純粹的VR來說黏性和用戶反復(fù)體驗性是非常強的。以市面上的VR游戲為例,很多都是以一次性體驗和經(jīng)驗的效果,這樣讓玩家再次進入這樣的體驗需求。其實市場上對社交VR有很多先行者,包括AltspaceVR、Rec Room,還有Facebook Spaces。
VR的社交是完全嶄新的,可以期待有想象空間的區(qū)域。根據(jù)我們長期數(shù)據(jù)統(tǒng)計的結(jié)果,以Rec Room的周活躍用數(shù)超過其他幾個VR社交應(yīng)用的綜合,所以我們覺得輕娛樂是關(guān)鍵。
我們有了Solar VR的構(gòu)想和嘗試,大家可以想象在這樣的空間里面好友聚在一起可以打牌,可以參加唱歌、開會。到最后會給大家演示這樣的Dome。
這也是我們在開發(fā)過程當中會對社交玩法中的某些元素進行提取,比如說這是打牌的私人會所的空間,大家可以在一起去玩。
為什么選擇 UE4?
再回到UE4的情況,為什么選擇UE4作為VR的渲染引擎呢?
其實有很多優(yōu)點,剛才很多分享嘉賓也寫出來了,不一一列舉了,對我來說更看重的是可靠的引擎基礎(chǔ)和高質(zhì)量的渲染架構(gòu)。我知道UE4的語音質(zhì)量和渲染質(zhì)量在業(yè)內(nèi)是領(lǐng)先地位了。對完善的工具鏈要重點提出,工具鏈是市場上的優(yōu)勢,在長期的UNREAL過程當中累計了很多可靠性非常強的工具鏈,無論從美術(shù)的資源支持還是從程序的生成過程都是非常好的。這樣完善的工具鏈會帶來整開發(fā)流程上的順暢性和高效性。
前面做了Solar VR的背景,現(xiàn)在準備了一些開發(fā)過程當中的經(jīng)驗分享,希望大家能夠有討論和參與。
首先我們的原型在Unity上實現(xiàn)的,后來我們決定要遷移到Unreal平臺上,有很多的切換。比如說代碼、數(shù)據(jù)、開發(fā)流程的切換。從Unity切換到Unreal上來用了一個星期的時間。
從代碼切換有幾個方面一個是把原來的服務(wù)器的代碼移植到客戶端,因為我們還是采用了Unreal的技術(shù)。其他的移植過程當中最主要的問題就是第三方插件,大家大可以放心,大多數(shù)第三方知名的插件在Unreal中都可以得到相應(yīng)的切換,大的廠家都可以做的很好。
數(shù)據(jù)都是可以重用的,場景是需要重新構(gòu)建的,如果需要的話也是可Unity導出場景列表,再從Unreal中一次性導入。這取決于場景和重新工作。
Unreal需要建立比較完善的CR的持續(xù)構(gòu)建的體系,來保證美術(shù)和策劃能夠及時地得到更新的程序。
我會為大家介紹一下我們的技術(shù)選型,我們用了Unreal Delicated server,傳統(tǒng)的游戲后臺都會使用數(shù)據(jù)包重復(fù)、服務(wù)器寫套邏輯。我們選用的是Unreal自用的Unreal Delicated server同步的邏輯,為什么這樣選擇呢?有幾個原則。
因為是社交游戲,有大量的物理交互在里面,我們很看重物理在服務(wù)器單獨寫引擎,這個代價很高的,我們想一用DS server直接實現(xiàn)優(yōu)勢。我們可以把服務(wù)器的代碼移到服務(wù)器上來,在一些小的團隊服務(wù)器人員在緊張的情況下就可以不用參與游戲邏輯的開發(fā),而是由客戶端程序員去參加,這是很有利的一點。
包括整個過程當中服務(wù)器后臺也只布置了一位同學做后臺DS server的開發(fā)。我們用這套系統(tǒng)的話會有簽權(quán)的體系。我們用Client端向GameServer申請遷入的深刻,就產(chǎn)生了Generate Token ID,再通過注冊從GS上返取回玩家數(shù)據(jù)以后再往客戶端發(fā)送通知的過程,再把Room信息送過去。再把切割信息跟DS對上,DS做過簽證的驗證以后,Clinet和DS server就建立了連接,建立這樣的連接以后后面的游戲都可以直接進行通信,就不用依賴于后臺的任何邏輯,后臺只負責登陸登出和數(shù)據(jù)庫訪問。后面我們還會做一些像DS Masager來管理創(chuàng)建和銷毀,這樣整一套東西可以在這樣的服務(wù)器架構(gòu)下完美地運作起來。
說到了DS server有一個坑要跟大家分享一下,我們開發(fā)過程當中會遇到很多的Replicate的問題,它的方法是會帶來一些問題比如說像左邊的這種情況下,當我們Server想寫一個代碼的時候,哪怕經(jīng)過了若干楨服務(wù)器想做函數(shù)代用,本以為Clent已經(jīng)拿到了,但過程是不確定的。
另外一個例子也是一樣的,哪怕是在同一幀里寫兩個條件,在Clent仍然無法保證A比B先得到,所以是不能依賴于Replicate的。
我覺得不能依賴于replicate讓邏輯得到充分的保證,我們把關(guān)鍵的數(shù)據(jù)copy好以后,在合適的時候通過RPC的方法發(fā)出去,這樣可以在服務(wù)器端拿到RPC,這個順序就可以得到一定的保證。
剛才都是技術(shù)選型的背景,現(xiàn)在要回到主題,就是說在VR開發(fā)下應(yīng)用有什么特性,在VR下最主要的關(guān)鍵因素有幾個。一個就是我們有一些基礎(chǔ)交互的操作,在我們社交的前提下更重要因為我們的人面對面地交流,其實每一舉每一動包括嘴型、IK表現(xiàn)都是被對方仔細觀察的,所以這個東西的要求比一般的游戲都要高很多。
除此之外,VR是沉浸式體驗的環(huán)境,在這種環(huán)境下玩家對聲音的敏感度是非常高的,所以要求我們對Spatial Audio3D聲音的設(shè)計和實現(xiàn)都要提出更多的需求,當然VR下最永恒的話題就是優(yōu)化,因為投顯設(shè)備都是要求90幀率的情況下,優(yōu)化和效率永遠是VR繞不開的話題,在關(guān)鍵上要做一些取舍。
今天只能講一下VR交互,這上面還是有很多的設(shè)計,包括手部動作的設(shè)計、交互動作延遲、手臂、腳部、角色VR下移動、口形語音同步力反饋、Camera控制、手勢識別這些主題都是非常多的。在交互前提下都是非常重要,時間關(guān)系隨便抽了兩點跟大家分享一下。
首先是一個手勢的識別,大家知道是可以識別手指按下未按下的狀態(tài),通過這種動態(tài)的辨別可以在用Animation Layer + Mask合成動畫過程,美術(shù)手只要提供張開和閉合的動畫可以讓我們完整地模擬出來。
對于物件交互來說,有很多種,但是每一種都需要我們仔細地去實現(xiàn)的。比如說我們用拳打東西的時候要考慮到伸開手的時候動作是什么樣的,閉合的時候是什么樣的,打出去以后和力度產(chǎn)生的沖擊力有多大,帶來了力反饋這種參數(shù)的調(diào)整,或者說是搖一搖功能,需要去測搖一搖的頻率、力度是多少,交互的動作都需要我們?nèi)ゾ毜卣{(diào)整,這里給大家也放一個交互的體驗。這是一個互相拋接物體,最多人的情況下互相拋接物體是非常近的,這樣網(wǎng)絡(luò)延遲會帶來非常大的情況。
這里我們做了結(jié)論的分享,關(guān)于多人情況下扔東西延續(xù)的分享。我們可以把幀同步和狀態(tài)同步稍微融合了一下,做了這樣的優(yōu)化。
在我們手拿到東西之前,我們手的同步是通過自己的手本身的同步來做的,當我們拿起東西和松開東西當中的第二階段,我們是通過狀態(tài)同步的,當我們發(fā)出指令來同步狀態(tài),我們手在拿東西的過程當中東西是可以跟著手繼續(xù)運動,這樣的情況下本地玩家是感受不到任何延遲的,體驗是比較好的。
我們把手扔出去的時候可以同步對象的位置和朝向,可以把他角速度和朝向速度都同步,在模擬最后的時候,速度比較小的時候可以把它的速度慢慢回到服務(wù)器應(yīng)該的位置上,這樣玩家在網(wǎng)絡(luò)情況波動的情況下也能感到比較好的體驗。
除了VR這一塊兒還想說說VR中交互物件開發(fā)和玩法設(shè)計。我們的游戲是想在游戲中實時創(chuàng)建和銷毀以藍圖為單位的交互物件,在我們的游戲當中可以拿出來成直接可以玩的游戲的設(shè)計。
這樣的情況下面臨一個問題,我們的物件在VR中有多種多樣性,對于交互來說用戶的學習成本非常高,我們的設(shè)計師后來想出通過討論做出一種方法,比如大家看這是一個手柄的控制器把所有的AB、XY都定義成功能鍵,我們再把手柄反面的鍵定位為Action鍵,這樣三種基本元素的組合形成了整個交互物件的最基礎(chǔ)操作。
有兩個好處,玩家的學習成本會非常低,他們拿到物件以后試試A和B就可以知道怎么用,這對我們移植非常好。在這樣的基礎(chǔ)建立好以后我們開始了敏捷迭代的開發(fā),可以讓程序員并行地開發(fā)很多種原型,甚至考慮讓玩家UGC創(chuàng)建出內(nèi)容為我們的游戲增加內(nèi)容,保持內(nèi)容的持續(xù)性。
這里我們團隊在比較短的時間內(nèi)驗證了很多的玩法,有一些是剛開始的設(shè)想實現(xiàn)了以后就放在那里,大家討論哪一個東西比較好。比較好的情況下會投入美術(shù)資源優(yōu)化,一這些東西都是建立操作基礎(chǔ)上,所以所有東西都是以這樣的基礎(chǔ)下開發(fā),會很快地出來很多原型讓大家來體驗。
引擎開發(fā)源碼,如果團隊有一定的能力能夠把控源碼的質(zhì)量和方法,應(yīng)該使用源碼去進行開發(fā),為什么?我們用源碼以后可以做底層的優(yōu)化!像剛才的我們就可以集成到游戲當中去,很方便。對于一些升級來說,可以選擇性地升級一些新的Unreal殷勤帶來的想法。這也是開源的優(yōu)勢。
最后想給大家的分享的是引擎開發(fā)當中騰訊社交組件Plugin的繼承,有兩個,一個是Apollo Voice,它是第三方語音交互的集成,大家可能不是很熟悉,《王者榮耀》的開黑語音大家應(yīng)該很清楚,平臺都是以這樣的平臺為基礎(chǔ),后面有專門的語音服務(wù)器來組織語音的傳送和多人對話。VR社交里面聲音是非常重要的一點,會提供給很多后處理的聲音來處理,包括混響還有空間聲音定位,這都是比較有意思的。Apollo Voice也是作為公司的組件。
后面是QQ的遠程桌面共享,這個大家年輕的時候都幫妹子遠程修電腦都用過,但是我們把它集成到VR中以后可以實現(xiàn)很多很有意思的嘗試。比如說直播電競解說、大屏看電影、多人同屏協(xié)作工作、遠程開會。我們把圖片、模型、文本、聲音都直接從電腦里拖到VR世界中就像是從異空間拉入到VR世界中,在VR世界中產(chǎn)生虛擬的世界。
后面就是一些有意思的展示。這是《英雄聯(lián)盟》的直播體驗,這是去年年底Demo的展示,可以調(diào)整你的裝備,這是自拍桿的能力,拍出來的照片可以搖一搖,這是語音球,可以給你的同伴留語音,可以搖一搖點贊,并且把它傳送給你的社交好友,作為語音留音箱。多人連線可以在一起組隊,這就是直接從游戲里面拿出來玩的《德州撲克》,這是剛才說的可以從電腦里直接把照片、模型拖拽到虛擬世界當中,這是剛才一開始說的,除了可以打牌還可以在一起唱歌,這是我們做的K歌的星空劇場,你唱歌高興的時候機器人還可以跟你一起互動。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。