日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

《球球大作战》游戏优化之路(下)

發(fā)布時(shí)間:2024/8/26 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《球球大作战》游戏优化之路(下) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


演講內(nèi)容

大家好,我叫徐宇峰,負(fù)責(zé)《球球大作戰(zhàn)》的性能優(yōu)化。

《球球大作戰(zhàn)》現(xiàn)在擁有五億多的玩家,為了吸引如此龐大的玩家群體,我們提供給玩家更炫更酷的皮膚,這些美輪美奐的皮膚,讓《球球大作戰(zhàn)》的游戲畫面更加絢麗多彩,但隨著皮膚日益精致,性能問題開始日益突出。
?


我們的皮膚正面看起來(lái)很簡(jiǎn)單,從側(cè)面看,皮膚由精美模型與很多特效層組合而成。

皮膚的材質(zhì)大部分為半透明。大量的半透明材質(zhì)無(wú)法合批渲染,導(dǎo)致單套皮膚Draw Calls達(dá)到82個(gè),面數(shù)1.1萬(wàn)以及骨骼40個(gè)。
?


《球球大作戰(zhàn)》最核心技能就是分身吃球,而當(dāng)玩家分身之后,Draw Calls更是暴漲,游戲中玩家最大16分身時(shí),Draw Calls有820多,面數(shù)達(dá)17.7萬(wàn)。
?


在實(shí)際游戲中,多玩家多皮膚分身后,Draw Calls經(jīng)常能輕松過(guò)千,下面視頻是我們內(nèi)部的極限測(cè)試版情況。

大家能看到,Draw Calls最低有400-500,最高達(dá)到2000多,如此高的Draw Calls導(dǎo)致游戲的幀率急劇下降,卡頓嚴(yán)重。而球球作為一款競(jìng)技游戲,性能與體驗(yàn)至關(guān)重要。
?


我們團(tuán)隊(duì)采用各種優(yōu)化方法:
?

  • 模型貼圖合并:模型與貼圖盡可能的合并在一起,利用Unity的動(dòng)態(tài)合批渲染,減少Draw Calls。
  • 減少半透明材質(zhì):半透明會(huì)帶來(lái)融合運(yùn)算,其次重疊的半透明物體無(wú)法合批渲染,導(dǎo)致Draw Calls增加。
  • 減少粒子系統(tǒng):粒子會(huì)增加CPU運(yùn)算,還會(huì)增加Draw Calls,每套皮膚的粒子數(shù)量我們控制在40個(gè)以內(nèi).
  • LOD系統(tǒng)
  • 降低分辨率:皮膚的貼圖普遍采用512k,部分貼圖在低端機(jī)器上降低到256k。


?


我們來(lái)看看優(yōu)化對(duì)比。

下面視頻是一個(gè)LOD系統(tǒng)的效果對(duì)比,左邊是高性能機(jī)型高畫質(zhì),右邊是低端機(jī)型流暢畫質(zhì)。左右相互對(duì)比可以看到,右邊的皮膚少了些特效與動(dòng)畫,貼圖分辨率也相應(yīng)降低。

通過(guò)以上優(yōu)化,游戲性能大約提升52%,但畫面品質(zhì)同樣遭受損失,在中低端機(jī)器上尤為明顯,這點(diǎn)很容易引起玩家的不滿。

美術(shù)團(tuán)隊(duì)也希望所有機(jī)型,畫面盡可能的完美,并且過(guò)少Draw Calls極大限制了美術(shù)的高水平發(fā)揮。
?


《球球大作戰(zhàn)》優(yōu)化的難點(diǎn)是皮膚分身后Draw Calls暴漲的問題

我們想到用RenderTexture來(lái)降低Draw Calls峰值,但皮膚有太多半透明,渲染管線中對(duì)于透明相關(guān)的處理是在管線后期進(jìn)行的。由于不同物體是按照順序渲染的,對(duì)透明的處理方式是混合,實(shí)際上就是shader輸出顏色與此像素位置已有顏色的合并過(guò)程。

下圖中的混合公式是Unity中最標(biāo)準(zhǔn)的混融模式Blend SrcAlpha OneMinusSrcAlpha。
?


假設(shè)將Camera背景的顏色設(shè)置為全黑色(0001)或全白色(1111),分別進(jìn)行渲染,渲染后的顏色分別為Cblack、Cwhite,得到公式1和2。公式中藍(lán)色為已知數(shù),紫色為未知數(shù),2個(gè)公式可以求出2個(gè)未知數(shù)。

具體代碼請(qǐng)參考:

下面看看具體制作流程。
?


我們把原資源用單相機(jī)渲染到RenderTexture,相機(jī)每幀切換黑白背景,形成連續(xù)序列幀,這是因?yàn)閱蝹€(gè)相機(jī)能節(jié)省更多的Draw Calls,但如果動(dòng)畫速度過(guò)快,就必須使用雙相機(jī)保證品質(zhì)。

RT經(jīng)過(guò)GPU做算法剔除,輸出到多張RenderTexture。RT我們采用512分辨率,一共40張,格式為ARGBHalf,真機(jī)占用內(nèi)存約為20兆,目前市面上主流手機(jī)內(nèi)存大部分為2G以上,所以內(nèi)存很充足。具體用到那種分辨率與RT數(shù)量的多少,需要根據(jù)不同機(jī)型做適當(dāng)調(diào)整。
?


多張帶RT的RenderTexture組成一套序列幀,利用Plane切換RT做成序列幀動(dòng)畫。序列幀會(huì)循環(huán)渲染,從RT1渲染到40,再回到第1張。

Plane讀取RT時(shí)也是循環(huán)讀取,最后序列幀動(dòng)畫放到場(chǎng)景中與半透明背景,半透明皮膚以及UI等進(jìn)行融合。

下面我們來(lái)看看原資源與RT資源的實(shí)時(shí)效果對(duì)比。這是原素材與RenderTexture的實(shí)時(shí)效果對(duì)比,原素材由十幾層特效疊加,而RenderTexture只有單個(gè)面。


大家看看不同資源的效果對(duì)比,新技術(shù)首先必須保證美術(shù)品質(zhì)才能投入使用。
?


在美術(shù)品質(zhì)保證后,再看看優(yōu)化前后Draw Calls對(duì)比。

當(dāng)分身不斷增加時(shí),Draw Calls以線性增長(zhǎng),大家可以看看下面的Draw Calls圖表,從最開始63暴漲至900多。

在RT模式下,分身的增加帶來(lái)Draw Calls的個(gè)位數(shù)增加,同時(shí)可以看到在RT模式下,因?yàn)槲覀兝枚鄰圧enderTexture,每個(gè)分身的動(dòng)畫幀是錯(cuò)開的,動(dòng)畫并不完全一樣。
?

1


我們?cè)倏纯凑鏅C(jī)數(shù)據(jù)對(duì)比,測(cè)試平臺(tái)為普通千元機(jī)。

如下圖所示,左圖分身數(shù)從1至16,普通模式Draw Calls從63暴漲至917,翻了14.5倍,每一次分身數(shù)量的翻倍都讓Draw Calls劇烈變化。而RT模式從64到83只增加19個(gè)。

有圖CPU消耗圖,在RT模式下,CPU的消耗非常平穩(wěn),而普通模式最大分身時(shí)消耗已經(jīng)翻倍。
?


再來(lái)看看FPS與內(nèi)存消耗。

如下圖所示,手機(jī)號(hào)碼幀率在普通模式下,16分身幀率已經(jīng)降低到25,加上UI與其它邏輯消耗,已經(jīng)產(chǎn)生游戲卡頓。而RT模式幀率非常平穩(wěn)。

內(nèi)存方面因?yàn)镽T用了40張16位的512貼圖,內(nèi)存大約多20MB,這是RT模式唯一消耗點(diǎn)。實(shí)際應(yīng)用中我們會(huì)根據(jù)機(jī)器的內(nèi)存容量,控制RT的數(shù)量與分辨率。


《球球大作戰(zhàn)》同屏有上千物體,每幀數(shù)千個(gè)物體的位置、大小、動(dòng)畫、網(wǎng)絡(luò)數(shù)據(jù)等伴隨著產(chǎn)生大量邏輯運(yùn)算。

主要邏輯有:
?

  • 利用插值函數(shù)使物體的移動(dòng)更加平滑
  • 玩家吃球后重量會(huì)增加:根據(jù)重量來(lái)計(jì)算球的尺寸與前后位置,尺寸越大物體越靠近攝像機(jī)。
  • AI狀態(tài)機(jī):玩家根據(jù)游戲狀態(tài),如二個(gè)玩家距離接近時(shí),會(huì)播放調(diào)侃動(dòng)畫,吃掉其他玩家時(shí)播放炫耀動(dòng)畫;
  • 相機(jī)視野計(jì)算:玩家所有球的數(shù)量與尺寸變化,都伴隨著相機(jī)位置與FOV調(diào)整,每個(gè)分身必須在相機(jī)視野內(nèi),最大分身盡可能處于屏幕中心;
  • 其它邏輯:還有網(wǎng)絡(luò)數(shù)據(jù)解壓縮、解密、背景迷霧、UI運(yùn)算等。



以上這么多的實(shí)時(shí)運(yùn)算量會(huì)對(duì)CPU產(chǎn)生巨大壓力。
?


我們利用Unity 2018的ECS系統(tǒng),把所有邏輯做分類,純邏輯運(yùn)算做成PureECS,其他部分做成HybridECS。數(shù)千物體的邏輯運(yùn)算,盡可能分配到多個(gè)核心。



這極大的提升游戲性能,并且更快更復(fù)雜的運(yùn)算讓物體的移動(dòng)、旋轉(zhuǎn)更加平滑和細(xì)膩,增強(qiáng)游戲的用戶體驗(yàn)。
?


上述的優(yōu)化方法,部分處于《球球大作戰(zhàn)》的試用階段,我們一直都在不斷嘗試和創(chuàng)新,使用各種優(yōu)化方式,讓《球球大作戰(zhàn)》擁有更好的用戶體驗(yàn),并不斷煥發(fā)新的活力!

我的演講到此結(jié)束,謝謝大家。

總結(jié)

以上是生活随笔為你收集整理的《球球大作战》游戏优化之路(下)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 男人的天堂a在线 | 欧美黑人又粗又大高潮喷水 | 我要爱爱网| 日韩精品免费一区二区夜夜嗨 | 欧美日韩亚洲二区 | 麻豆爱爱| 国产盗摄在线观看 | 久久一卡二卡 | 亚洲一二三不卡 | 日韩欧美三级在线 | 国产日韩欧美久久 | 国产无遮挡又黄又爽在线观看 | 九九热九九爱 | 天天干 夜夜操 | 久久亚洲精精品中文字幕早川悠里 | 黄a毛片 | 91精品国产高清一区二区三密臀 | 午夜视频在线瓜伦 | 欧美在线免费视频 | 亚洲欧美国产一区二区 | 国产精品高潮呻吟AV无码 | 91精品国产入口在线 | 中文字幕免| 欧美一级特黄视频 | 天天干天天操天天射 | 成人拍拍| 日韩黄色一级 | 午夜在线观看免费视频 | 精品国产乱码一区二 | 91美女在线| 色综合影视 | 国产三级三级在线观看 | 久久精品国产亚洲AV黑人 | 亚州春色| 日韩午夜一区 | 精品国产91久久久久久久妲己 | 国产浮力影院 | 日韩国产成人无码av毛片 | 夜夜cao | 精品福利影院 | 中文字幕一区二区三区免费看 | 欧美成人免费在线观看视频 | 日本免费三片在线播放 | 黑人大群体交免费视频 | 99福利影院| 亚洲码国产精品高潮在线 | 日韩a级一片 | caoprom97| av成人免费 | 成人片免费视频 | 中文字幕一区二区在线观看 | 国产大片在线观看 | 亚洲欧美另类图片 | 午夜小视频在线观看 | 一呦二呦三呦精品网站 | 中文字幕亚洲天堂 | 误杀1电影免费观看高清完整版 | 欧美在线中文字幕 | 九色视频在线播放 | 久久精彩视频 | 免费a级片在线观看 | 青青青草视频 | 亚洲精品福利在线观看 | 毛片免费全部无码播放 | 午夜精彩视频 | 四虎影院一区 | 免费黄色网址观看 | 亚洲日日夜夜 | 色激情网 | 操极品美女 | 国产三级在线 | av在线不卡一区 | 麻豆视频在线观看 | 99操| 欧美三级在线播放 | 国产精品爱啪在线线免费观看 | 久草视频在 | 久草视频网站 | 亚洲美女性生活视频 | 日韩簧片在线观看 | 女人十八毛片嫩草av | 亚洲一区二区在线看 | a级黄色影院 | 日韩porn| 狠狠一区二区 | 亚洲AV无码久久精品国产一区 | 理论片av| av88av| 夜噜噜 | 成人黄色大片在线观看 | 成人交配视频 | 成人在线观看免费视频 | 天天视频亚洲 | 毛片a区| 欧美性受黑人性爽 | 二区三区在线 | 少妇太爽了太深了太硬了 | 国产一区不卡视频 | 黑人三级视频 |