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