發(fā)布時(shí)間:2023-11-27 14:23:51 瀏覽量:119次
在4月12日的Unite 2016大會(huì)上,暴風(fēng)魔鏡高級(jí)產(chǎn)品經(jīng)理吳濤分享他用Unity3D開發(fā)VR游戲的經(jīng)驗(yàn),以下為分享實(shí)錄:
我自己是從2010年開始使用U3D開發(fā),之前是做大型端游,也用過虛幻引擎。2010-2011年,中國(guó)移動(dòng)游戲開始爆發(fā),就轉(zhuǎn)到U3D做一些U3D手游開發(fā),去年加入暴風(fēng)魔鏡從事應(yīng)用開發(fā)。
首先給大家分享一下我做Unity開發(fā)的積累的經(jīng)驗(yàn)吧,最早在去年的時(shí)候呢,我從手游的開發(fā)轉(zhuǎn)到了VR開發(fā)。當(dāng)時(shí),我們的產(chǎn)品迭代周期是比較快的,而且還在使用Unity4.X某個(gè)版本,剛剛接手VR開發(fā)的時(shí)候很多問題開始暴露,比如我們的資源制作成本增加,資源量增多,性能指標(biāo)提高很多,網(wǎng)絡(luò)環(huán)境要求更加苛刻,基于這些東西,我們也做了一些基于U3D自己的優(yōu)化。
基本上大家從事VR開發(fā)的時(shí)候,還是需要一些基礎(chǔ)團(tuán)隊(duì)的,建議大家都有工程師。大規(guī)模的話,還需要一些U3D工程師。目前我們團(tuán)隊(duì)有4個(gè)安卓,還有6個(gè)U3D工程師。安卓做接口界面,還有C++開發(fā)。
首先,第一要介紹一下我們的版本管理。我們當(dāng)時(shí)最早我在做這一塊的時(shí)候,當(dāng)時(shí)還是用了三點(diǎn)幾的版本,我們服務(wù)器要進(jìn)行OTA更新,當(dāng)時(shí)設(shè)計(jì)了一個(gè)版本管理的配置文件,大家可以看到基本上我們的制作方式是在右面,有每個(gè)資源的命名,還有一些標(biāo)志是否被壓縮,比如說最后具體的路徑。
我們當(dāng)時(shí)發(fā)現(xiàn)加載有點(diǎn)緩慢,所以之后把加到了VersionList上面,然后就進(jìn)行二次拼接,這樣保證本地版本和服務(wù)器版本的一致性。
為了去做剛才的版本管理的表,我將我所有的資源進(jìn)行了一個(gè)大概的分類,對(duì)每一個(gè)分類都增加另外一套配置,可以看到那面,包括我們自己自定義的所有文件的合成,同樣會(huì)帶來一些路徑,帶來一些資源的ID,帶來一些平臺(tái),當(dāng)然也有類型壓縮很多種方式,是否跟焦點(diǎn)綁定。
資源大概生成的過程的話基本上就是這樣子,我們會(huì)自己寫一個(gè)類似于生成的工具,然后我們資源制作完之后會(huì)放到自己的資源夾子,是跟美術(shù)資源分離,但會(huì)存在一個(gè)預(yù)制體和資源捆綁關(guān)系,將預(yù)制體進(jìn)行build生成Assetbundle,我將原有的進(jìn)行更新,再重新寫我的VersionList,保證自己的新生資源和老資源是一致的。
大家都知道一般現(xiàn)在老的Unity版本經(jīng)常資源會(huì)有一些泄露,比如說我們的美術(shù)資源經(jīng)常被別人反編輯出來拿到圖片拿到模型,所以說當(dāng)我生成這個(gè)之后,在那里做一次資源的加密,當(dāng)時(shí)制作是比較簡(jiǎn)單,現(xiàn)在會(huì)加更復(fù)雜的算法,比如一些越界對(duì)稱非對(duì)稱之類的,加這個(gè)之后呢我們遇到另外一個(gè)問題就是,因?yàn)閂R,很多模型不像之前做手游可以刪除一些,貼圖可以小一些,他很大,這里的話資源加密之后又做了自定義壓縮,當(dāng)時(shí)我們找了很多相關(guān)的庫(kù),最后是通過我自己的原碼,自己重新改過了一個(gè)自定義壓縮庫(kù),他基本上我們?cè)谧鐾赀@步之后比以前的降了30%左右,最后是資源管理和內(nèi)存管理,我當(dāng)時(shí)做的時(shí)候也是有一點(diǎn)困難,但是我當(dāng)時(shí)就很慶幸的時(shí)候認(rèn)識(shí)一個(gè)U3D工程師,首先是如果有相關(guān)連的時(shí)候會(huì)有三個(gè)游戲?qū)ο螅?dāng)我釋放一個(gè)的時(shí)候只將其中一個(gè)對(duì)象把他Release掉,另外兩個(gè)不會(huì),同樣第二個(gè)釋放掉也會(huì)把第二個(gè)Release掉,第三個(gè)全部Release掉的時(shí)候我彩繪全部UnLoad,有效降低內(nèi)存使用,不會(huì)產(chǎn)生任何內(nèi)存泄露。
同樣基于剛才的算法,增加一個(gè)索引表,增加一個(gè)索引計(jì)數(shù),做一些++和--的操作,直到Index為零的時(shí)候才釋放Bundle。
另外這是網(wǎng)絡(luò)更新,大家做網(wǎng)絡(luò)更新很多人還用U3D提供的3W接口下載,很早的時(shí)候一直采用那個(gè)接口,大概4年前到5年前做過一款3D的ARPU,當(dāng)時(shí)我要滿足我的腳本跨平臺(tái),要保證足夠的效率,解決一些崩潰性的問題,那個(gè)時(shí)候自己基于HTV接口實(shí)現(xiàn)3G緩沖下載,下載中會(huì)在內(nèi)存中存放小的斷點(diǎn)內(nèi)存數(shù)據(jù),之間的去寫數(shù)據(jù),然后當(dāng)這個(gè)小的斷點(diǎn)數(shù)據(jù)拿到內(nèi)存值寫到硬盤,之后下載到本地,下載完成跟本地文件進(jìn)行拼接,在中間的小內(nèi)存處理過程中會(huì)定期的去清理我的緩存,我知道大家有很多其他的接口可以完成緩存,但內(nèi)存開銷比較大。
我會(huì)開一個(gè)多線程去下載,這個(gè)下載效率我經(jīng)過以前在CDA測(cè)試,可能不是太權(quán)威的測(cè)試,性能可以提升大概30%到50%,另外就是Json數(shù)據(jù)優(yōu)化,那時(shí)候網(wǎng)絡(luò)很差,都是3G和2G,那時(shí)候?qū)儆诙踢B接的狀態(tài),發(fā)現(xiàn)最大的問題就是數(shù)據(jù)量很大,每次大家要等很久的時(shí)候,后面我做序列化壓縮,壓縮算法很簡(jiǎn)單,我每一次遇到List相關(guān)的我只保留第一個(gè)值,多余的相同的全部隱藏,這樣當(dāng)數(shù)據(jù)量比較大的時(shí)候,我們平均大概能優(yōu)化70%的量。
另外就是一些渲染性能,我們?nèi)绻蠹易罱谟肬3D5.4Beta版本可以發(fā)現(xiàn)里面增加很多接口,比如說GPU,當(dāng)時(shí)在我們使用的版本中是沒有的,當(dāng)時(shí)遇到了很多渲染性能的問題,因?yàn)楫?dāng)時(shí)的項(xiàng)目要求就是效果要好,畫面要極致,但要流暢,所以當(dāng)時(shí)做了很多擴(kuò)展。
有過開發(fā)經(jīng)驗(yàn)的人比較清楚我們的做法,基本上是進(jìn)他們進(jìn)行各種類型的合并。包括UV包括Texture。因?yàn)楫?dāng)時(shí)合并貼圖性能非常差,我們當(dāng)時(shí)是在網(wǎng)格合并索引合并頂點(diǎn)顏色的操作都是很快速完成,但貼圖的合并當(dāng)時(shí)是非常非常的延遲,那個(gè)時(shí)候我沒有辦法,就開始做一些C++擴(kuò)展,在這里我們建了一個(gè)共享線程,用GPU實(shí)現(xiàn)貼圖拼接,然后他是一個(gè)異步進(jìn)行的,渲染過程中可能會(huì)有很多模型,但是可能在一開始進(jìn)行的時(shí)候會(huì)有點(diǎn)慢,但你加載過程之后可能大概幾秒之后會(huì)把他合成一個(gè)周扣,就瞬間性能提升下來,如果5.4大家可以去看U3D的接口,應(yīng)該跟這個(gè)類似的算法。
有針對(duì)性的去使用著色器,在去年和前年的時(shí)候我在北京很多游戲公司的工程師還有老板去找過我,就說我們的游戲就性能很差,就是很多的機(jī)器跑不起來,或者很多的跑的不流暢,突然到某個(gè)角落的時(shí)候就開始卡了一下,我一般去到他們公司第一件事情看他們的文件夾,就說你的著色器到底有多少,美術(shù)使用多少,因?yàn)樵谥袊?guó)來說很多美術(shù)的經(jīng)驗(yàn)比較少的,可能對(duì)技術(shù)對(duì)渲染了解并不是太多,比如像一些可以用多少網(wǎng)格,多少三角形,有多少頂點(diǎn),多少?gòu)堎N圖,場(chǎng)景可以做多大,我要占多少內(nèi)存,其實(shí)這種有數(shù)據(jù)指標(biāo)的東西比較好掌握合理解,但是涉及渲染的時(shí)候,他們用起來開始產(chǎn)生困惑,比如經(jīng)??吹揭恍┕纠锩娴囊恍┯螒?,他很簡(jiǎn)單的一個(gè)游戲的模型,他要表達(dá)一個(gè)效果,然后他可能會(huì)使用很多的寄存器和很多的貼圖,但美術(shù)在使用著色器上只會(huì)用幾個(gè)參數(shù)和幾張貼圖,那個(gè)時(shí)候當(dāng)時(shí)也分析了他們的一些訴求,所以基于他們的渲染需求,我自己寫了很多的著色器方便他們做各種各樣效果,當(dāng)他們效果匹配的時(shí)候,基本上讓他們的著色器達(dá)到最優(yōu)化,分析ALU,讓他每次的每個(gè)使用是最優(yōu)化的,不會(huì)有多余浪費(fèi)和冗余。
我也是參考了一些插件中,一大部分是我自己寫的,另外就是地形系統(tǒng),最早我們就發(fā)現(xiàn)網(wǎng)格數(shù)比較大,比較浪費(fèi),雖然地刷很好用,那個(gè)時(shí)候就包括LED都很好用,但唯一一個(gè)就是最早的時(shí)候網(wǎng)格非常多,當(dāng)時(shí)開使用一些自己創(chuàng)建的一些地形,地形模型去在場(chǎng)景擺放,擺放過程中發(fā)現(xiàn)他沒有貼圖混合功能,然后我當(dāng)時(shí)就是有分析U3D的系統(tǒng),自己去開發(fā)了一個(gè)BlendShader還有地表混合著色器,我們的植被是可以刷的,樹干地表石頭都可以采取Blend繪制,然后整個(gè)模型只有一個(gè),網(wǎng)格數(shù)也是非常稀少的。
我以前去做一些游戲邏輯和人工智能,大家現(xiàn)在都知道大家都在寫腳本,但基本上我當(dāng)時(shí)也做過開發(fā),比如一些內(nèi)存加密等等,但是依然解決不了就開發(fā)的時(shí)候很多漏洞和調(diào)試問題,尤其是人工智能這一塊,我想實(shí)現(xiàn)一個(gè)流程在引擎中,那個(gè)時(shí)候Animator出來了,利用這個(gè)狀態(tài)圖實(shí)現(xiàn)有線狀態(tài)機(jī),這些狀態(tài)機(jī)的腳本都在本地里面存著,我只需要更新服務(wù)器上的小怪的AI,也是可以的。
另外是代碼安全的問題,就是現(xiàn)在因?yàn)榇蠹叶贾篮芏嗟奈覀冮_發(fā)一些游戲發(fā)布出去,經(jīng)常會(huì)有反BA的工具把我們反BA掉,當(dāng)時(shí)也是發(fā)了很多文檔,最后找到Mono虛擬機(jī)的原碼,同樣開發(fā)DLL也進(jìn)行了重新編譯,基本上可以進(jìn)行加密,最后發(fā)布到Application中。
目前現(xiàn)在開始用另外的方法來做,這是比較老的一個(gè)方法,另外兼容和適配,最早做游戲的時(shí)候還是,為了覆蓋大部分的安卓機(jī)型,需要做一個(gè)很復(fù)雜的兼容適配,發(fā)現(xiàn)比任何代碼和算法都解決不了多機(jī)型適配問題,那個(gè)時(shí)候開使用大數(shù)據(jù),將所有的機(jī)型配置分級(jí)別,對(duì)他們所用的配置,數(shù)據(jù)的話會(huì)直接存到服務(wù)器端,第一次登陸打開游戲的時(shí)候,會(huì)把機(jī)型發(fā)送到服務(wù)器上,服務(wù)器根據(jù)我本地的配置在服務(wù)器尋找相關(guān)的配置資源,游戲打開的時(shí)候自動(dòng)的幫玩家適配好,根據(jù)機(jī)型最優(yōu)化的表現(xiàn)方式。
希望大家在目前的話VR還是一個(gè)起步階段,我們還是非常缺內(nèi)容的平臺(tái),希望更多的開發(fā)者加入VR開發(fā),我們也希望能幫助開發(fā)者一起去創(chuàng)造一個(gè)中國(guó)VR互聯(lián)網(wǎng)的環(huán)境。謝謝大家。
熱門資訊
探討游戲引擎的文章,介紹了10款游戲引擎及其代表作品,涵蓋了RAGE Engine、Naughty Dog Game Engine、The Dead Engine、Cry Engine、Avalanche Engine、Anvil Engine、IW Engine、Frostbite Engine、Creation引擎、Unreal Engine等引擎。借此分析引出了游戲設(shè)計(jì)領(lǐng)域和數(shù)字藝術(shù)教育的重要性,歡迎點(diǎn)擊咨詢報(bào)名。
2. 手機(jī)游戲如何開發(fā)(如何制作傳奇手游,都需要準(zhǔn)備些什么?)
?如何制作傳奇手游,都需要準(zhǔn)備些什么?提到傳奇手游相信大家都不陌生,他是許多80、90后的回憶;從起初的端游到現(xiàn)在的手游,說明時(shí)代在進(jìn)步游戲在更新,更趨于方便化移動(dòng)化。而如果我們想要制作一款傳奇手游的
3. B站視頻剪輯軟件「必剪」:免費(fèi)、炫酷特效,小白必備工具
B站視頻剪輯軟件「必剪」,完全免費(fèi)、一鍵制作炫酷特效,適合新手小白。快來試試!
4. Steam值得入手的武俠游戲盤點(diǎn),各具特色的快意江湖
游戲中玩家將面臨武俠人生的掙扎抉擇,戰(zhàn)或降?殺或放?每個(gè)抉定都將觸發(fā)更多愛恨糾葛的精彩奇遇。《天命奇御》具有多線劇情多結(jié)局,不限主線發(fā)展,高自由...
5. Bigtime加密游戲經(jīng)濟(jì)體系揭秘,不同玩家角色的經(jīng)濟(jì)活動(dòng)
Bigtime加密游戲經(jīng)濟(jì)模型分析,探討游戲經(jīng)濟(jì)特點(diǎn),幫助玩家更全面了解這款GameFi產(chǎn)品。
6. 3D動(dòng)畫軟件你知道幾個(gè)?3ds Max、Blender、Maya、Houdini大比拼
當(dāng)提到3D動(dòng)畫軟件或動(dòng)畫工具時(shí),指的是數(shù)字內(nèi)容創(chuàng)建工具。它是用于造型、建模以及繪制3D美術(shù)動(dòng)畫的軟件程序。但是,在3D動(dòng)畫軟件中還包含了其他類型的...
7. 3D動(dòng)漫建模全過程,不是一般人能學(xué)的會(huì)的,會(huì)的多不是人?
步驟01:面部,頸部,身體在一起這次我不準(zhǔn)備設(shè)計(jì)圖片,我從雕刻進(jìn)入。這一次,它將是一種純粹關(guān)注建模而非整體繪畫的形式。像往常一樣,我從Sphere創(chuàng)建它...
8. 如何自己開發(fā)一款游戲(游戲開發(fā)入門必看:五大獨(dú)立游戲開發(fā)技巧)
?游戲開發(fā)入門必看:五大獨(dú)立游戲開發(fā)技巧無論您是剛剛起步開發(fā)自己的第一款游戲,還是已經(jīng)制作了幾款游戲,本篇文章中的5大獨(dú)立游戲開發(fā)技巧都可以幫助您更好地設(shè)計(jì)下一款游戲。無論你對(duì)游戲有著什么樣的概念,都
?三昧動(dòng)漫對(duì)于著名ARPG游戲《巫師》系列,最近CD Projekt 的高層回應(yīng)并不會(huì)推出《巫師4》。因?yàn)椤段讕煛废盗性诓邉澋臅r(shí)候一直定位在“三部曲”的故事框架,所以在游戲的出品上不可能出現(xiàn)《巫師4》
10. 3D打印技巧揭秘!Cura設(shè)置讓你的模型更堅(jiān)固
想讓你的3D打印模型更堅(jiān)固?不妨嘗試一下Cura參數(shù)設(shè)置和設(shè)計(jì)技巧,讓你輕松掌握!
最新文章
同學(xué)您好!