Unity3D 效能檢測-中階版(1)

簡介

此篇我們要述說效能檢測的中階版,上一篇初階版是從Game Window中的Status小訊息視窗來得知大概的場景運行的狀態,而這次會提到Profiler Window,這裡面會包含更多的東西,其實profiler裡面做精華整理就變成Game status的視窗,但我們必須精益求精要了解場景中各種元件運行效能的細節,讓我們繼續看下去。

Profiler Window

要如何在Unity中來查看標題中的Window呢?請到Window->Analysis->Profiler或是按下快捷鍵Ctrl+7即可開啟。

Profiler內建效能監控器會Record Game Scene最近的300個Frame,而且會仔細的分析每個Frame的主要Item,如下圖。也可已拿這個檢測器放在不同的裝置來檢測,並修正可以優化的項目。

我們來看看這個Profiler Window裡面個區塊是在做什麼的,可以看到下圖,初步分層A-E。
A. Profiler Controls:設定在哪個裝置下進行效能分析,並可以操作此視窗的資訊儲存、清除、讀取與深度分析。
B. Context Menu:裡面比較重要的事可以切換要不要變成Color Blind Mode,等等下面再詳述。
C. Profiler Modules:可以在應用程序中配置的所有Modules Item,所有檢測模組如上圖,如CPU、GPU、Rendering等等。
D. Frame Chats:此區域包含Profiler配置Module Item圖表每幀的顯示區。
E. Module Detail Panel:這個區塊算是依照Module Item的選擇不同而有著不同的細部訊息顯示在此。
大家可以先實際操作一遍,再來往下看裡面所顯示的項目是在說什麼。

Profiler Controls

來講一下Profiler Controls中各個按鈕所帶來的對應效果:
Record:要按下這個按鈕,在細部呈現Module Item的數據,意思是按下後系統才會紀錄。
Deep Profile:點下此按鈕的話會分析C#的所有程式碼的方法(Methods),啟用此設置後,Unity會將檢測添加到所有mono call,然後可以對腳本進行更詳細的研究(這塊比較複雜以後有機會來述說)。
Profile Editor:將顯示編輯器當前正在使用的資源。再次單擊該按鈕以停止對編輯器進行概要分析。
Attach to Player:Unity會自動檢測網絡上正在運行或通過USB連接的任何設備,Unity會自動偵測有相關的裝置可以進行資源效能分析。其中有一個<Enter IP>,可以輸入IP並連結即可監控到該遠端裝置的效能分析。
Allocation Callstacks:啟用此選項時,Profile Record’s Frame在GC中具有信息。完整調用GC.Alloc示例導致託管腳本分配,即使Deep Profile未啟用。
Clear on Play:下次單擊播放器窗口中的播放或連接到新的目標設備時,啟用此設置可從Profiler窗口中刪除所有數據。
Clear:按下此按鈕時將即時清除Profile Window所記錄的資訊。
Load / Save:將已保存的Profiler數據加載到Profiler窗口中,前提是你有Save之前的資料。
Transport controls:使用這些控件可以在Profiler圖表中瀏覽。如果您在“播放”模式下進行性能分析,並且在應用程序運行時單擊這些傳輸控件中的任何一個,則應用程序將暫停,按下 ” || “ 按鈕。

Color Blind Mode:啟用“Color Blind Mode”以使Profiler在其圖形中使用較高的對比度顏色。點選後就會啟動此效果,Unity為了照顧色盲使用者所提供的功能。

Profiler modules

在本篇中前段有Module List圖片,可參照之項目。Profiler窗口的頂部可點下選擇你要監測的項目,我們先來介紹每個Item的大概介紹並在之後章節再分析其中的細項。而每個模塊都有自己的圖表。當您選擇某個module時,Module Details panel將顯示在窗口的底部,可以使用該面板檢查模塊收集的詳細數據。

CPU Usage:看字面上的意思當然就是CPU的使用量,圖表顯示了您的應用程序花費的時間,此module概述了應用程序花費時間的所有重要領域,例如Rendering , Scripts , Physics等等。並可再Model Detail Panel看Timeline , Hierarchy , Raw Hierarchy。

GPU Usage:假使你的顯卡有支援GPU,此module才可以顯示出細部圖表於Panel之中。在預設模式下此module是不會開啟監控的,因為打開的話效能也會受影響,FPS會掉蠻多的,要注意一下。

Rendering:Unity在場景的應用程序中的Render耗能,包括有Batch ( Static , Dynamic) 的信息 ,SetPass和Draw調用,物件三角形和頂點。簡單來說,場景所有物件的成像,包含每個物件的物件模型頂點面數,再來就是模型的皮(Material , Shader),最後就是掛載在環境的特效運算都包含在此Module中。

Memory:這邊資訊是在顯示記憶體資源分配狀況,這對於查看Script分配(例如GC.Alloc)是如何導致垃圾收集或應用程序的Asset memory usage隨時間變化的趨勢特別有用,這邊值得一提的是可以使用撰寫程式來設定一些狀況清除垃圾記憶體,clean CG。

Audio / Video:假如你在場景中有使用到音效、聲音或是影片,此監控器才會有耗能產生(會使用到Unity中的Audio System & Video System),比較直得注意的是,影片方面可能會產生比較多的效能資源,起因於需要讀取影片檔案(通常影片檔案比較大且需要每個Frame呈現的東西比較多),或是需要預先載入到場景中所以會比較耗能。

Physics / Physics2D:假使你在3D場景中有使用到Rigidbody相關的物理運算,並且有Collider的交互運算,骨架運動等等都歸納在此module中。而Physics(2D)通常用在 2D Game中,UI Element假使掛載了2D Collider配合Rigidbody2D運算下會歸納在此module中。

Network Messages / Operations:照字面上的意思,Network,網路資訊傳輸或運作的系統、Script中使用API耗能都會歸納在此module中。

UI / UI Details:顯示有​​關Unity如何處理應用程序中的UI Batches,包括Unity為何以及如何批處理項目包含UI的Texture , Render Image都會歸納在此。

Global Illumination:顯示有​​關Unity在應用程序中的Global Illumination照明子系統上花費了多少CPU資源的信息。Global Illumination分析器  顯示統計信息以及所有工作線程中的實時全局照明Global Illumination(GI)子系統消耗了多少CPU時間。GI在Unity中由一塊稱為Enlighten的中間件進行管理 。

小結

這篇我們先講講整個Profiler Window的整個輪廓概述,以及講述裡面如何使用如何觀看,而我們在下一篇會著重提到Profiler Window的Module Item裡面的詳細介紹以及怎樣會使某Item效能提升。

Reference:https://docs.unity3d.com/Manual/ProfilerWindow.html

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *