1
| 本文作者: 田苗 | 2017-04-26 12:11 |
Solar VR 是騰訊互娛部門開(kāi)發(fā)的一款多人互動(dòng)社交應(yīng)用。2016 年的騰訊全球合作伙伴大會(huì)上,騰訊公布了此前在 VR 領(lǐng)域的嘗試,據(jù)36氪的報(bào)道,主要是騰訊智能創(chuàng)新業(yè)部和騰訊互娛研發(fā)部?jī)蓚€(gè)部門在做相關(guān)的事情。前者負(fù)責(zé)硬件開(kāi)發(fā)平臺(tái)部分,后者則是對(duì)游戲及內(nèi)容方面的探索。
據(jù)雷鋒網(wǎng)了解,騰訊互娛研發(fā)部副總經(jīng)理沈黎曾表示,在 Solar VR 中他們嘗試了人和虛擬世界的交互,并且還在探索人在虛擬世界中肢體語(yǔ)言或是面部表情。未來(lái),他們希望用戶和開(kāi)發(fā)者以 UGC 的方式在這個(gè)社交平臺(tái)上創(chuàng)造一些輕游戲的玩法。
李君白
而這次在 Unreal Open Day 上,雷鋒網(wǎng)見(jiàn)到了騰訊互娛前沿技術(shù)中心專家程序員李君白,他表示他們已經(jīng)開(kāi)始在做 Solar VR 中虛擬人物的表情捕捉,未來(lái)有可能實(shí)現(xiàn)四肢動(dòng)作的捕捉,實(shí)現(xiàn)效果或許比 Facebook Spaces 展示的還要好。不過(guò),Solar VR 最后什么時(shí)間上線,這個(gè)還不好說(shuō)?,F(xiàn)場(chǎng),他就 Solar VR 的一些開(kāi)發(fā)技術(shù)問(wèn)題做了分享,雷鋒網(wǎng)將他的分享內(nèi)容整理如下。
大家好!
我是來(lái)自騰訊前沿技術(shù)中心的李君白,今天為大家?guī)?lái)我們騰訊中心UE4引擎從事社交平臺(tái)的開(kāi)發(fā)經(jīng)驗(yàn)。做個(gè)簡(jiǎn)單的自我介紹,用Unreal3也是有很多年頭,開(kāi)發(fā)過(guò)不少的游戲,加入騰訊在《天涯明月刀》做自研引擎的架構(gòu)開(kāi)發(fā),現(xiàn)在負(fù)責(zé)Solar VR社交游戲平臺(tái)的開(kāi)發(fā)工作。
大概我PPT的提綱會(huì)在這這樣的幾個(gè)部分,做輕娛樂(lè)平臺(tái)的背景的介紹,開(kāi)發(fā)過(guò)程當(dāng)中的技術(shù)分享經(jīng)驗(yàn),最后是去年下半年的Demo的演示過(guò)程。

首先是背景介紹,大家知道為什么我們做輕社交的娛樂(lè)平臺(tái)呢?眾所周知VR是全新的領(lǐng)域,在VR下很多的開(kāi)發(fā)領(lǐng)域都面臨著革新和創(chuàng)新,我們的應(yīng)用是立足于以社交平臺(tái)為基礎(chǔ)的開(kāi)發(fā)定義。我們需要帶給人們的是一種玩家交互之間的沉浸感和交互臨場(chǎng)感。
社交比起純粹的VR來(lái)說(shuō)黏性和用戶反復(fù)體驗(yàn)性是非常強(qiáng)的。以市面上的VR游戲?yàn)槔?,很多都是以一次性體驗(yàn)和經(jīng)驗(yàn)的效果,這樣讓玩家再次進(jìn)入這樣的體驗(yàn)需求。其實(shí)市場(chǎng)上對(duì)社交VR有很多先行者,包括AltspaceVR、Rec Room,還有Facebook Spaces。
VR的社交是完全嶄新的,可以期待有想象空間的區(qū)域。根據(jù)我們長(zhǎng)期數(shù)據(jù)統(tǒng)計(jì)的結(jié)果,以Rec Room的周活躍用數(shù)超過(guò)其他幾個(gè)VR社交應(yīng)用的綜合,所以我們覺(jué)得輕娛樂(lè)是關(guān)鍵。
我們有了Solar VR的構(gòu)想和嘗試,大家可以想象在這樣的空間里面好友聚在一起可以打牌,可以參加唱歌、開(kāi)會(huì)。到最后會(huì)給大家演示這樣的Dome。
這也是我們?cè)陂_(kāi)發(fā)過(guò)程當(dāng)中會(huì)對(duì)社交玩法中的某些元素進(jìn)行提取,比如說(shuō)這是打牌的私人會(huì)所的空間,大家可以在一起去玩。
為什么選擇 UE4?
再回到UE4的情況,為什么選擇UE4作為VR的渲染引擎呢?
其實(shí)有很多優(yōu)點(diǎn),剛才很多分享嘉賓也寫出來(lái)了,不一一列舉了,對(duì)我來(lái)說(shuō)更看重的是可靠的引擎基礎(chǔ)和高質(zhì)量的渲染架構(gòu)。我知道UE4的語(yǔ)音質(zhì)量和渲染質(zhì)量在業(yè)內(nèi)是領(lǐng)先地位了。對(duì)完善的工具鏈要重點(diǎn)提出,工具鏈?zhǔn)鞘袌?chǎng)上的優(yōu)勢(shì),在長(zhǎng)期的UNREAL過(guò)程當(dāng)中累計(jì)了很多可靠性非常強(qiáng)的工具鏈,無(wú)論從美術(shù)的資源支持還是從程序的生成過(guò)程都是非常好的。這樣完善的工具鏈會(huì)帶來(lái)整開(kāi)發(fā)流程上的順暢性和高效性。

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