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