1. 程式人生 > 其它 >通過RenderDoc真機抓取資料來落地驗證和解決特效效能的問題

通過RenderDoc真機抓取資料來落地驗證和解決特效效能的問題

前言

需求是來自於我在為我司的一個線上RPG遊戲做特效的效能優化的過程中,需要驗證對特效的一個改動是否能夠提高效能,當然這個改動是在不影響美術效果的前提。

特效效能問題

技能特效

主角的一個大招(技能)會有10個特效,其中6個是相同的特效,也就是同一時間會存在6份相同的特效,但是從profiler來看這6份相同的特效的set passcall 和dc數量是隨著特效數量而遞增的(setpasscall=單個 x 數量),根據我的知識儲備我判斷這肯定有問題,最合理的情況是:多個特效的setpass = 單個特效的setpasscall。

UI特效

遊戲主介面的DC偏高,在排除完UGUI的合批被打斷的情況之後,我發現隨著遊戲圖示的增加(圖示上有特效),dc也成倍數增加,當然這種情況也出現在了道具的流光特效上。

找出問題

經過我的測試驗證之後,已經確定這兩個問題的原因都是一樣的:

我們每個特效裡面都包含子的Particle System,不同的粒子之間是使用單圖,沒有打圖集,也就是一個特效有多個mat

粒子沒有設定OrderInLayer,當出現多份相同的時候,需要unity對它們進行排序,這樣就增加了setpasscall,打斷了合批。

而在我對粒子進行修改後,就相當於提前給粒子設定了順序,這樣當出現多份相同的粒子時,因為mat,order,texture都是一樣的,就可以被合批。

驗證結果

經過我的改動之後,當同屏存在100甚至1000個相同的特效,setpasscall和dc數量都沒有上漲,在profiler和真機上抓取的資料都得到了驗證。

圖一是修改之前dc隨數量增加(存在問題),圖二是我修改之後dc是穩定的(正確的結果)

專案落地

在驗證這一改動是正確且對效能有提高之後也對美術效果沒有影響,我花時間寫工具並整理了遊戲中的所有的法師技能特效,劍聖技能特效,BOSS技能特效,UI特效(包括圖示特效,領取按鈕,品質流光),場景特效(包括掉落物模型特效,環境特效,火焰),把要修改的特效統計到一個表格,和主美進行溝通,然後推動特效進行修改。

準備工作

我的抓取環境:

使用Renderdoc抓取安卓真機資料,不需要ROOT,但需要開啟手機的開發者除錯模式並通過USB資料連線電腦。

  • Renderdoc v1.14
  • 自己的國產安卓手機,安卓11系統,未ROOT
  • unity2019.3.7f1
  • windows 10 ltsc

在Unity Editor中使用RenderDoc

  1. 從官網https://renderdoc.org/,下載並安裝Renderdoc
  2. 開啟Unity,在Game 檢視 - 右鍵 load Renderdoc
  3. 點選game檢視旁邊的小圖示,就會把當前內容傳輸到Renderdoc

文件資料

官方文件 - 快速開始:https://renderdoc.org/docs/getting_started/quick_start.html

PS. 官方文件比較簡單,主要介紹軟體的使用,如果你想查閱抓取出來的不同條目或關鍵詞代表的意思,需要去查閱OpenGL或Directx的資料

超級詳細的軟體入門使用教程:renderdoc的使用

在Rnderdoc中抓包其它的遊戲:RenderDoc[01] 使用RenderDoc 分析Android遊戲(免Root)

引數解釋

glDrawElement:呼叫glDrawElements函式進行繪製就是Drawcall的一種形式

glDrawElementsBaseVertex:準備頂點資料

OpenGL的文件:http://docs.gl/gl4/glDrawElements

LearnOpenGL系列教程的簡體中文翻譯:https://learnopengl-cn.github.io/

儲存記錄

因為我是使用自己的手機來調取,所以我抓取完我把記錄儲存到本地檔案,這樣當手機斷開連線時,也可以檢視抓取的資料,但是在我的使用中儲存的記錄無法檢視貼圖,其它資訊可以檢視。

遇到問題

無法連線手機

Core 20364 15:59:27 android.cpp(1363) Error Couldn't get PID when launching com.qing.dcTest with activity com.unity3d.player.UnityPlayerActivity and intent args

一開始我在安卓手機端的開發者模式中手動選擇了要除錯應用,出現上面的錯誤。

解決辦法:只需要開啟USB除錯模式,像我的是國產定製系統,有ADB授權,把那個關閉就可以了,其它的不要多設定,就可以正常使用。

連線不穩定

在連線的過程中,每隔幾分鐘就會斷開連線,我後來把資料線連線到電腦後置USB介面上就沒斷開過了。

其它

在SnapDragonProfiler中也是看glDrawElements,顯示在glDraw call那列資料中。