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