遊戲測試 Perfdog 實戰之減少 CPU 消耗

騰訊WeTest發表於2020-04-01

怎麼獲取測試報告此處不再贅述,有關perfdog怎麼使用的教程可以參考
Perfdog使用教程

# 1.  第一部分,查詢問題,找出問題特徵點

首先我們看到FPS資料,可以看到FPS波動較大,但這是從某一時間開始的,在前期遊戲FPS還是較為穩定的,那我們就要分析是什麼原因導致的FPS開始變得不穩定;


我們發現 CPU的消耗在這個時間段開始驟然上升,CPU的溫度升高,導致手機的降頻保護開啟,CPU的頻率開始下降,

在這裡插入圖片描述


在這裡插入圖片描述


在這裡插入圖片描述

# 2.  第二部分,分析報告後,得到分析結果

經過以上的資料分析,我們發現是遊戲在那個時間點時CPU消耗上升,導致CPU的溫度升高,處發了CPU的保護機制,引起CPU頻率下降,而遊戲得不到充足的算力支援,自然FPS變得不穩定;

# 3.  第三部分,得到分析結果,分析可以最佳化的空間

我們已經得知問題是CPU溫度過高的問題,那麼就要相應降低CPU的消耗,而CPU的消耗主要有以下幾個方面(這裡僅針對Unity引擎的,其他引擎僅供參考)

對於MMORPG手遊:
CPU的消耗可以從半透明渲染和不透明渲染入手解決;
可能有的同學會疑問,渲染通常都是GPU做的,和CPU有毛線的關係,這裡要解答一下,
在安卓機器設計結果中目前大部分都是沿用的馮·諾依曼結構,也就是我們通常說的計算機的五大部件:
運算器、控制器、儲存器、輸入裝置、輸出裝置, 而運算器、控制器組合就是CPU,所以算力通常都是由CPU提供的,而 如果不在遊戲中另做設定的話,即使渲染也是由CPU提供的算力,而GPU就是為了減輕CPU的這種渲染壓力而設計出來的一個部件,嚴格意義上來講也屬於運算器;


所以為了減輕壓力,我們要把一些算力分給GPU,減輕CPU的負擔,而unity常用的手法有以下幾種:
1.開啟GPU Instancing,降低drawcall:
該技術可有效降低Draw Call的佔用,從而對渲染模組的CPU端壓力起到一定的緩解作用。但是,在使用該技術時,需要注意機型的測試,此技術僅可以用於OpenGL ES 3.0,而且一些低端裝置雖然支援OpenGL ES 3.0,且SystemInfo.supportsInstancing API返回也為True,但經過實際測試時,其底層並沒有按照真實的GPU Instancing功能來進行渲染,而是透過逐個Draw Call來進行渲染,所以,雖然開啟了GPU Instancing功能,但其渲染耗時並沒有下降;
這裡涉及到了drawcall,簡單介紹一下:
drawcall是CPU對底層圖形繪製介面的呼叫命令GPU執行渲染操作,一次渲染就是一個Drawcall

渲染流程採用流水線實現,CPU和GPU並行工作,它們之間透過命令緩衝區連線,CPU向其中傳送渲染命令,GPU接收並執行對應的渲染命令,過多的DrawCall會造成CPU的效能瓶頸:大量時間消耗在DrawCall準備工作上。很顯然的一個最佳化方向就是:儘量把小的DrawCall合併到一個大的DrawCall中,這就是批處理的思想,也就是GPU Instancing主要做的事情;
但要注意不要過於消耗GPU,在開發遊戲過程中隨著PBR、影像後處理的大量使用會導致GPU端的壓力越來越大,甚至影響到了CPU端的Draw Call無法正常傳輸。可以說,主執行緒等待時間的體現方式因晶片的不同、具體使用情況的不同和引擎版本的不同,可謂是五花八門,在這裡不一一進行說明,但歸根原因主要還是GPU壓力過大;
2.注意控制GC觸發頻率很
隨著MMORPG遊戲越來越重度化,GC平均耗時在逐步上升,也會造成卡頓,大量的GameObject在頻繁例項化和Destroy會造成很大的效能開銷;
3.Shader.Parse
這裡給出一些建議,
1)Shader在遊戲執行過程中是否存在冗餘情況,即重複載入的情況;
2)是否有自定義的Shader資源放入到Always Included中,如有,請儘量去除;
3)移動端上Standard Shader的使用是否確實有必要。沒有必要,則詳細檢測並刪除。
4.動畫模組
大量動畫的產生會產生嚴重的開銷,unity引擎可以考慮使用GPU Skinning的方式進行最佳化,這種方式對於實現場景中的大量同種怪物非常有效,可以減少很多開銷。其核心其實也是合批的思想;
5.粒子系統
這裡建議儘可能將粒子使用數量峰值控制在600以下(低端裝置)和1000以下(中高階裝置),
可以檢查下
1)粒子系統(特別是技能特效)的配置檔案是否過量;
2)特效中是否含有長久不用的粒子系統。

以上是結合Perfdog的測試報告針對在遊戲開發中CPU最佳化的一些常用手段,相信可以帶來一些啟發,大家可以根據自己的專案實際情況做參考;減少CPU的消耗,降低CPU的溫度。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31420651/viewspace-2683964/,如需轉載,請註明出處,否則將追究法律責任。

相關文章