系列文章:
游戲性能優(yōu)化(1)-why & benchmark
游戲性能優(yōu)化(2)-budget
性能預(yù)算(performance budget)是指根據(jù)游戲類型括饶、上市時間為游戲定位目標(biāo)機(jī)型和設(shè)置性能目標(biāo)。在開發(fā)早期,制定美術(shù)效果目標(biāo)瑞佩、美術(shù)制作規(guī)格阻桅、技術(shù)選型遏餐,同時,在整個項目生命期中灾搏,對性能進(jìn)行管理控制,反復(fù)優(yōu)化來實現(xiàn)目標(biāo)立润。
制定美術(shù)效果和性能目標(biāo)
在制定美術(shù)效果和性能目標(biāo)要考慮的因素很多狂窑,主要分為:
-
游戲類型
不同類型的游戲?qū)π阅艿囊笫遣灰粯拥模瑢π阅芤笞罡叩挠螒蝾愋褪荈PS游戲桑腮,F(xiàn)PS游戲需要穩(wěn)定60FPS才能達(dá)到手感要求泉哈。其他競技類游戲比如MOBA要求更低一些,但是也要足夠的流暢破讨,至少要穩(wěn)定30FPS以上丛晦。MMO游戲要求相對更低一些,但是一般也要達(dá)到30FPS左右提陶。一些休閑游戲烫沙、卡牌游戲?qū)PS的要求也不高。 -
上市時間
在端游時代隙笆,一款產(chǎn)品研發(fā)周期很長斧吐,動輒4又固、5年。那么在制定美術(shù)效果和性能目標(biāo)的時候煤率,要著眼于上線時間點(diǎn)時的市場仰冠。美術(shù)效果一般也會定位超越市面上所有可見游戲(可能次世代這個詞就是這么來的)。
對于手游的研發(fā)蝶糯,研發(fā)周期較短洋只,制定美術(shù)效果和性能目標(biāo)時,相當(dāng)于端游要更加保守一些昼捍。 -
游戲定位
對于主打畫面的游戲识虚,比如很多次世代MMO游戲,會在美術(shù)效果上傾向更多的資源妒茬,可以在性能上有所妥協(xié)担锤。
對于主打玩法的游戲,沒有必要在美術(shù)效果上太過激進(jìn)乍钻,優(yōu)先保證游戲的流暢性肛循,來提升玩法體驗是更加理智的選擇。
在理解了要考慮的因素之后银择,我們可以通過參考市面上的游戲多糠、做性能試驗分析以及根據(jù)經(jīng)驗來確定最后的方案。
性能預(yù)算與研發(fā)周期
我們把整個項目的研發(fā)分為幾個階段來討論性能預(yù)算:
-
研發(fā)早期
這個階段還在確定項目的研發(fā)方向和計劃浩考,這個時候要和策劃夹孔、美術(shù)一起確定玩法和美術(shù)需求,在項目早期就達(dá)到一定的共識和性能權(quán)衡析孽。在給予美術(shù)和策劃足夠的空間的同時搭伤,也要確認(rèn)性能不會有過高的風(fēng)險。同時袜瞬,要根據(jù)需求對技術(shù)方案進(jìn)行調(diào)研闷畸,確認(rèn)核心的技術(shù)選型,并且制定美術(shù)制作標(biāo)準(zhǔn)吞滞。
部分美術(shù)制作標(biāo)準(zhǔn)涉及到大量資源的制作(比如模型的面數(shù)規(guī)格)佑菩,一定要在早期確定一個沒有風(fēng)險的標(biāo)準(zhǔn),否則回爐成本是幾乎無法承受的(模型全是錢安迷)殿漠。 -
項目中期
項目中期是項目最長的研發(fā)期,關(guān)于性能有三件事情要做:(1)對能夠提升性能的技術(shù)點(diǎn)進(jìn)行長期的跟進(jìn)調(diào)研(2)持續(xù)跟進(jìn)美術(shù)資源控制(3)持續(xù)跟進(jìn)代碼性能控制佩捞。不過大部分情況下绞幌,這個時候大家的關(guān)注點(diǎn)還是要把美術(shù)效果和玩法做好,所以一般性能問題一直處在下滑狀態(tài)一忱,并且低于上線標(biāo)準(zhǔn)莲蜘。 -
項目后期
在項目的后期谭确,項目臨近上線。由于持續(xù)的美術(shù)資源堆積票渠、持續(xù)的玩法堆積逐哈,性能問題一般還是沒有達(dá)到上線標(biāo)準(zhǔn)。這個時候能做的事情是:(1)權(quán)衡性能和美術(shù)效果问顷,舍棄部分美術(shù)效果(2)效果分級昂秃,對美術(shù)效果進(jìn)行合理的分級。最高檔能在最高檔機(jī)型上正常游戲杜窄、中檔能在主流機(jī)型上正常游戲肠骆、低檔保障最低的目標(biāo)機(jī)型能正常游戲。(4)為了達(dá)到最后的性能目標(biāo)塞耕,開啟各種黑科技trick蚀腿。
經(jīng)過各種努力,性能開始慢慢朝著及格線邁進(jìn)扫外。
技術(shù)選型和制作標(biāo)準(zhǔn)
性能預(yù)算對制作標(biāo)準(zhǔn)的影響(隨著硬件發(fā)展變化莉钙,并不準(zhǔn)確):
- 角色面數(shù)
這個根據(jù)角色的顯示大小和顯示數(shù)量來制定,一般端游可以到1W+畏浆;手游控制在2000面左右胆胰。 - 同屏最高面數(shù)
端游50W左右狞贱;手游5W左右刻获,10W之內(nèi) - DrawCall
端游一般1000+;手游200左右 - Layout規(guī)劃
在Layout規(guī)劃的時候盡量使用最少的面數(shù)和Drawcall來表現(xiàn)美術(shù)效果瞎嬉。遠(yuǎn)景盡量采用天空蝎毡、地表系統(tǒng)、和森林系統(tǒng)(森林系統(tǒng)可以優(yōu)化成面片顯示)表現(xiàn)氧枣。采用建筑群顯示比較難以優(yōu)化(也可以采用建筑群合并的方式優(yōu)化)沐兵。 - 場景大小規(guī)劃
大世界要比小場景對性能的壓力更大 - 視角視距
開闊的視角視距需要渲染更多的模型,對性能壓力大便监,可以考慮討巧的45度視角(比如鎮(zhèn)魔曲) - 物理系統(tǒng)
避免全部物件帶有物理表現(xiàn)(很多游戲的做法是扎谎,只有主角有比較復(fù)雜的物理效果表現(xiàn)) - 光照系統(tǒng)
減少實時光的使用,盡量使用烘焙 - Batch
在模型制作時烧董,要考慮如何規(guī)劃Batch毁靶,使用同樣材質(zhì)球和貼圖的模型可以進(jìn)行Batch。要權(quán)衡Batch和模型復(fù)用問題逊移。 - 材質(zhì)
考慮選擇pbr预吆、cartoon等不同的方案,盡量減少材質(zhì)對貼圖的使用胳泉。 - 后處理
手機(jī)分辨率特別高拐叉,要減少后處理的使用岩遗,考慮合并后處理。 - UI
在規(guī)劃UI布局時凤瘦,要考慮降低UI的overdarw宿礁。 - 腳本語言的選擇
效率:lua>python
以上部分只包含項目早期要關(guān)注的內(nèi)容,個人認(rèn)為目前列舉的還不夠準(zhǔn)確廷粒,后面我會持續(xù)更新以上內(nèi)容窘拯。以上給出的部分?jǐn)?shù)據(jù)都可商榷,靈活性比較大坝茎。
常見的分析工具
- GPA
端游GPU分析 - VTune
端游CPU分析 - XCode
iphone性能分析涤姊,能分析CPU、GPU性能 - Adreno Profiler
Android GPU分析 - Snapdragon Profiler
Android GPU分析 - Unity Profiler
Unity程序全方面分析
引用
- 《Video Game Optimization》
- 《Optimized C++》