Unity Stats 窗口詳解

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)化方案:

  1. 通過手動方式合并材質(zhì)接近物體;
  2. 盡量不修改Batches物體的Scale,會生成新的Batch;
  3. 為提升GPU渲染效率,盡可能在一個物體上使用較少的材質(zhì),減少Batches過多的開銷;
  4. 不會運動的物體,考慮設(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)合并滿足條件:
    1. 模型總頂點樹小于900
    2. 不包含鏡像transform改變,不改變Scale,
    3. 不適用多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


Profiler界面

此文章摘錄

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容