Stats 窗口相詳解
名字
- Statistices 窗口
- 英文全稱: Rendering Statistics Window
- 中文: 渲染統(tǒng)計窗口(渲染數(shù)據(jù)統(tǒng)計窗口)

具體數(shù)據(jù)意思
FPS (Time per frame and FPS)
frames per seconds :引擎處理和渲染一個游戲幀所花費的時間,該數(shù)字主要受到場景中渲染物體數(shù)量和GPU性能影響,FPS 數(shù)值越高,游戲場景的動畫顯示會更加平滑和流暢.
一般來說,超過 30 FPS的畫面人眼不會感覺卡,有視覺殘留的特性,光在視網(wǎng)膜上停止后,人眼會保持 1/24s 左右的時間,因此游戲畫面每秒幀數(shù)至少保證在30以上.
獲取 FPS API: UnityStats.frameTime;
CPU
- 獲取當(dāng)前占用CPU進行計算的時間絕對值,或時間點,如果Unity 主進程處于掛斷或休眠,CPU time 保持不變
Render Thread
- GPU 渲染進程處理圖像所花費的時間,具體數(shù)值有GPU性能決定
Batches
- 全名: Batched Draw Calls
- 詮釋: Unity 內(nèi)置 Draw Call Batching 技術(shù)
- 什么是Draw Calls:
- CPU每次通過GPU發(fā)出一個glDrawElements(OpenGL中的圖元渲染函數(shù))或者DrawIndexedPrimitive(DirectX的頂點繪制方式)的過程為一次 Draw Call.
- 一般引擎每對一個物體進行一次 DrawCall,就會產(chǎn)生一個Batch.
- Batch里包含該物體的所有網(wǎng)格和頂點數(shù)據(jù),當(dāng)渲染另一個相同的物體時,引擎會直接調(diào)用Batch信息,將相關(guān)頂點數(shù)據(jù)直接送到GPU,從而讓渲染過程更高效.
- Batching 技術(shù)是將所有材質(zhì)相近的物體進行合并渲染.
- 對于一個有不同Shader和Material的物體,渲染是比較耗時的,因為會產(chǎn)生多個Batch.每次的修改材質(zhì)和貼圖都會影響B(tài)atches的數(shù)據(jù)集的構(gòu)成.
優(yōu)化方案:
- 通過手動方式合并材質(zhì)接近物體;
- 盡量不修改Batches物體的Scale,會生成新的Batch;
- 為提升GPU渲染效率,盡可能在一個物體上使用較少的材質(zhì),減少Batches過多的開銷;
- 不會運動的物體,考慮設(shè)置static,static 聲明的物體會自動進行內(nèi)部批處理
- 獲取 Batch API : UnityStats.batches
SetPass calls
解釋: 一個游戲物體顯示特殊效果,它的的Material上帶有許多特定的Shader,為實現(xiàn)相應(yīng)的效果,Shader會包含很多Pass,每當(dāng)GPU運行一個Pass之前,會產(chǎn)生一個 SetPass call .
Batches and DrawCall 是繪制圖像的重要指標,作為衡量場景繪制的首要參考.
一個Draw Call = 呼叫一次 DrawlndexedPrimitive(DX) or glDrawElements(OGL) = Batch
25k bath/sec 的渲染會使 1GHz的CPU使用率達到100%
因此公式: 25Kn(GHZ)Percentage/Framerate = Batch/Frame
- 獲取 SetPass calls API: UnityStats.setPassCalls
注: 面板中看到Batches是渲染總Batch = DrawCall,
但是 Unity可以獲取未批次處理之前的DrawCall.
Saved By Batching
- 由于Batch減少DrawCall,可以間接的看到場景優(yōu)化的效果.
有兩個部分組成: Static Batching 和 Dynamic Batching - Unity 內(nèi)建自動合并,缺點: 靜態(tài)合并會引發(fā)內(nèi)存和存儲的額外開銷,動態(tài)合并會增加CPU的負擔(dān)
- 材質(zhì)貼圖不同,可以貼圖合并; 使用ShawodCaster時,材質(zhì)相同,貼圖不同也可合并渲染.
Dynamic Batches
- 動態(tài)合并滿足條件:
- 模型總頂點樹小于900
- 不包含鏡像transform改變,不改變Scale,
- 不適用多Pass的Shader.
- 由于需要合并時通過CPU計算轉(zhuǎn)為世界坐標,這只在CPU消耗比DrawCall 消耗"便宜"才值得.這標準根據(jù)平臺有差異.
如:在蘋果平臺上DrawCall消耗便宜,不該使用該技術(shù). - 設(shè)置此功能: Editor->Project Setting ->Player 設(shè)置
- Unity Dynamic Batches API: UnityStats.dynamicBatches
Static Batches
- 場景中不能移動物體使用靜態(tài)合并,是不受定點數(shù)的限制,可以大幅度降低DrawCall.但為了將元素合并到一個大模型中,這項技術(shù)需要額外的內(nèi)存.主要內(nèi)存消耗在與共享多邊形會在內(nèi)存中重復(fù)創(chuàng)建.有時候就需要犧牲渲染效率來避免靜態(tài)合并,保證內(nèi)存夠小.
Tris 和 Verts
Verts : 攝像機事視野 (field of view) 內(nèi)渲染的定點數(shù).
Tris : 攝像機視野 (field of view) 內(nèi)渲染的三角面總數(shù)量.
Camera的渲染性能受到Draw Calls 影響.生成一個Draw Calls,它處理一個Draw Calls 的時間是有上邊的Tris和Certs數(shù)量決定.
Unity Stats 視圖中Tris 和Verts 不僅僅是視維中的梯形內(nèi)的Tris和Verts,而是 Camera 中 field of view 所有取值下的tris和verts.(假設(shè)Game視圖看不到這個Cube,如果當(dāng)你把 field of view 設(shè)定到179 過程中都看不到cube,stats面板才不會統(tǒng)計,GPU才不會渲染,否則都是會渲染,而且Unity不會把模型拆分,所有哪怕只有一個頂點需要渲染,Unity 都會把整個模型都渲染出來)
獲取 Verts API: UnityStats.vertices
獲取 Verts API: UnityStats.triangles
Screen
- 獲取當(dāng)前Game屏幕的分辨率的大小,后面的值表是總內(nèi)存使用
- 獲取 Screen API: UnityStats.screenRes
Shadown casters
- 表示場景中有多少個可以投射陰影的物體,一般這些物體作為場景中的光源
- 獲取 Screen API: UnityStats.shadowCasters
Visible skinned meshed
- 渲染皮膚網(wǎng)格的數(shù)量
- 獲取 Screen API: UnityStats.visibleSkinnedMeshes
Animations
- 正在播放動畫的數(shù)量
- 獲取 Animations API: UnityStats.visibleAnimations
如果想了解更多關(guān)于渲染的信息,打開Unity的Profiler窗口
打開方式:
快捷鍵 Ctrl + 7
Window --- Profiler
右鍵 -- AddTab -- Profiler
