Unity手機(jī)游戲發(fā)熱發(fā)燙優(yōu)化技巧
做性能優(yōu)化定位問題的時(shí)候我們要確定好是哪個(gè)部分占用的CPU+GPU資源導(dǎo)致發(fā)熱。一個(gè)一個(gè)模塊的排查: 渲染模塊,物理引擎模塊,邏輯算法模塊,其它,排查的時(shí)候,我們一般會(huì)一個(gè)一個(gè)的內(nèi)容重建,比如,排查渲染模塊,我們可以只做渲染,做同等規(guī)模的游戲地圖與渲染單元,查看運(yùn)行結(jié)果,分析CPU占用率,看是否引起發(fā)燙。物理引擎模塊可以通過增加和減少物理計(jì)算單元來定位是否為物理引擎的問題。隔離掉邏輯算法代碼,看CPU占用率是否有改善。如此根據(jù)自己的游戲邏輯逐步定位性能熱點(diǎn)
一般低溫燙傷容易發(fā)生的溫度在42~51度。基本上40,42左右就是一個(gè)臨界點(diǎn)。一般CPU總占用率肯定超過>80%。
在游戲開發(fā)項(xiàng)目中,越早進(jìn)行機(jī)器的性能測試,是否發(fā)熱等指標(biāo),能幫助我們快速的定位是加入了哪些功能導(dǎo)致了機(jī)器發(fā)熱,同時(shí)測試機(jī)器最好都準(zhǔn)備幾個(gè)有代表性高中低端手機(jī)。一般做項(xiàng)目的時(shí)候,每個(gè)禮拜都要完整的真機(jī)測試有代表性的機(jī)器。
(1) 做好高中低端機(jī)型的適配, 高端手機(jī)上高端效果,低端手機(jī)上低端效果,比如高端手機(jī)正常,低端手機(jī)發(fā)燙,可以針對(duì)低端機(jī)考慮關(guān)閉光照計(jì)算,關(guān)閉陰影計(jì)算,切換一些更簡單的shader, 關(guān)閉一些特效。 指定一些規(guī)則,然后游戲運(yùn)行后自動(dòng)判定分類手機(jī)的類型,來開關(guān)相關(guān)的參數(shù)。
(2) 調(diào)整以下目標(biāo)運(yùn)行時(shí)候的最高FPS, 默認(rèn)情況下游戲引擎控制FPS在60左右,如果我們中低端機(jī)所有的優(yōu)化已經(jīng)搞完了,雖然畫面流暢,但是手機(jī)還是發(fā)燙,就可以看下游戲運(yùn)行中實(shí)際的FPS,如果游戲的實(shí)際FPS 超過了一個(gè)流暢運(yùn)行的最低限制(一般是30FPS),可以考慮根據(jù)機(jī)型適配游戲的最高FPS為30,這樣導(dǎo)致的結(jié)果就是CPU拼命的工作讓實(shí)際幀率維持在60FPS,你減少最高幀率到30FPS,這樣CPU幀率到了30就可以休眠一點(diǎn)時(shí)間,從而維持流暢的情況下減少發(fā)熱。
(3) 渲染常用的優(yōu)化手段: 優(yōu)化渲染規(guī)模,使用增強(qiáng)細(xì)節(jié)的手段來代替模型面數(shù),提升shader性能。空間換時(shí)間來提前預(yù)制烘培,合并drawcall, 減少set pass call,優(yōu)化動(dòng)畫組件將頂點(diǎn)動(dòng)畫烘培到紋理中。等等。
(4) 物理引擎的常用優(yōu)化手段: 修改物理引擎迭代計(jì)算的參數(shù),降低剛體迭代的數(shù)目,使用更高效的方式替代物理引擎。等等。
(5) 優(yōu)化數(shù)據(jù)結(jié)構(gòu)內(nèi)存占用與算法: 緩存池減少節(jié)點(diǎn)反復(fù)大規(guī)模的刪除與創(chuàng)建,優(yōu)化算法,降低算法復(fù)雜度,空間換時(shí)間(預(yù)先計(jì)算好結(jié)果存儲(chǔ)起來,運(yùn)行時(shí)查表即可),時(shí)間換空間,多線程優(yōu)化等??梢园巡糠值挠?jì)算放到GPU中。等等。