Statistics
Statistics窗口潮针,全稱 Rendering Statistics Window党觅,即渲染統(tǒng)計窗口(或渲染數(shù)據(jù)統(tǒng)計窗口),窗口中羅列出關(guān)于聲音雌澄、圖像、網(wǎng)絡(luò)狀況等多種統(tǒng)計信息
Audio
-
FPS(Time per frame andFPS)
frames per seconds表示引擎處理和渲染一個游戲幀所花費(fèi)的時間,該數(shù)字主要受到場景中渲染物體數(shù)量和 GPU性能的影響仔役,F(xiàn)PS數(shù)值越高掷伙,游戲場景的動畫顯示會更加平滑和流暢。一般來說又兵,超過30FPS的畫面人眼不會感覺到卡,由于視覺殘留的特性(殘影現(xiàn)象)卒废,光在視網(wǎng)膜上停止后人眼還會保持1/24秒左右的時間沛厨,因此游戲畫面每秒幀數(shù)至少要保證在30以上。另外摔认,Unity中的FPS數(shù)值僅包括此游戲Scene里更新和渲染的幀逆皮,編輯器中繪制的Scene和其它監(jiān)視窗口的進(jìn)程不包括在內(nèi)。
Graphics
-
CPU
獲取到當(dāng)前占用CPU進(jìn)行計算的時間絕對值参袱,或時間點电谣,如果Unity主進(jìn)程處于掛斷或休眠狀態(tài)時,CPU time將會保持不變抹蚀。
-
render thread
????GPU渲染線程處理圖像所花費(fèi)的時間剿牺,具體數(shù)值由GPU性能來決定 -
Batches
????即Batched Draw Calls,是Unity內(nèi)置的Draw Call Batching技術(shù)。首先解釋下什么叫做“Draw call”环壤,CPU每次通知GPU發(fā)出一個glDrawElements(OpenGl中的圖元渲染函數(shù))或者 DrawIndexedPrimitive(DirectX中的頂點繪制方法)的過程稱為一次Draw call,一般來說晒来,引擎每對一個物體進(jìn)行一次DrawCall,就會產(chǎn)生一個Batch,這個Batch里包含著該物體所有的網(wǎng)格和頂點數(shù)據(jù)郑现,當(dāng)渲染另一個相同的物體時湃崩,引擎會直接調(diào)用Batch里的信息,將相關(guān)頂點數(shù)據(jù)直接送到GPU,從而讓渲染過程更加高效接箫,即Batching技術(shù)是將所有材質(zhì)相近的物體進(jìn)行合并渲染攒读。
對于含有多個不同Shader和Material的物體,渲染的過程比較耗時辛友,因為會產(chǎn)生多個Batches薄扁。每次對物體的材質(zhì)或者貼圖進(jìn)行修改,都會影響B(tài)atches里數(shù)據(jù)集的構(gòu)成。因此泌辫,如果場景中有大量材質(zhì)不同的物體随夸,會很明顯的影響到GPU的渲染效率。這里說幾點關(guān)于Batches優(yōu)化相關(guān)的方案
雖然Unity引擎自帶Draw Call Batching技術(shù)震放,我們也可以通過手動的方式合并材質(zhì)接近的物體;
盡量不要修改Batches里物體的Scale宾毒,因為這樣會生成新的Batch。
為了提升GPU的渲染效率殿遂,應(yīng)當(dāng)盡可能的在一個物體上使用較少的材質(zhì)诈铛,
減少Batches過多的開銷;對于場景中不會運(yùn)動的物體墨礁,考慮設(shè)置Static屬性,Static聲明的物體會自動進(jìn)行內(nèi)部批處理優(yōu)化幢竹。
-
Saved by batching
-
Tris
攝像機(jī)視野(field of view)內(nèi)渲染的的三角面總數(shù)量.
-
verts
攝像機(jī)視野(field of view)內(nèi)渲染的頂點總數(shù)。
◆ Camera的渲染性能受到Draw calls的影響恩静。之前說過焕毫,對一個物體進(jìn)行渲染,會生成相應(yīng)的Draw call驶乾,處理一個Draw Call的時間是由它上邊的Tris和Verts數(shù)目決定邑飒。盡可能得合并物體,會很大程度的提高性能级乐。疙咸,比如場景一種有1000個不同的物體,每個物體都有10個Tris风科;場景二中有10個不同的物體撒轮,每個物體有1000個Tris。在渲染處理中贼穆,場景一中會產(chǎn)生1000個Draw Calls题山,它的渲染時間明顯比場景二慢。
◆ Unity stats 視圖中的 Tris 和 Verts 并不僅僅是視錐中的梯形內(nèi)的 Tris 和 Verts扮惦,而是Camera中 field of view所有取值下的tris和verts臀蛛,換句話說,哪怕你在當(dāng)前game視圖中看不到這個 cube崖蜜,如果當(dāng)你把 field of view調(diào)大到 179 過程中都看不到這個cube浊仆,stats面板才不會統(tǒng)計,GPU才不會渲染豫领,否則都會渲染抡柿,而且unity不會把模型拆分,這個模型哪怕只有1個頂點需要渲染等恐,unity也會把整個模型都渲出來洲劣。(參考自Mess的《Unity Camera組件部分參數(shù)詳解》)
◆之前有童鞋問過我备蚓,新建一個空的場景,里邊沒有添加任何物體囱稽,為什么Status面板上顯示有1.7k Tris以及5.0kVerts郊尝。這是因為空的場景自帶默認(rèn)的天空盒。點擊Windows---Lighting打開Lighting下的Scene面板战惊,把Skybox里的材質(zhì)設(shè)為空流昏,比如像我下圖這樣:
可以看到,場景中的Tris數(shù)量變?yōu)?吞获,Verts數(shù)量變?yōu)榱?况凉,這是由于攝像機(jī)存在的關(guān)系,刪掉它各拷,你就會發(fā)現(xiàn)Tris 和 Verts 都變?yōu)?了刁绒。
-
Screen
獲當(dāng)前Game屏幕的分辨率大小,后邊的 xx MB表示總的內(nèi)存使用數(shù)值烤黍。
-
setPass Calls
又碰到一個神奇的詞“SetPass calls”知市。如果你是一個Unity的老用戶,你可能會注意到原來的Stats面板的第一項是“Draw calls”蚊荣,然而到了Unity5.X版本初狰,Stats上沒有了“Draw calls”,卻多出來一項”SetPass calls“,那么這個玩意到底是做什么的互例??筝闹?
?
感覺又要說一大堆東西了.....之前有講到Batches,比如說場景中有100個gameobject,它們擁有完全一樣的Material,那么這100個物體很可能會被Unity里的Batching機(jī)制結(jié)合成一個Batch媳叨。所以用“Batches”來描述Unity的渲染性能是不太合適的,它只能反映出場景中需要批處理物體的數(shù)量关顷。那么可否用“Draw calls”來描述呢糊秆?答案同樣是不適合。每一個“Draw calls”是CPU發(fā)送個GPU的一個渲染請求议双,請求中包括渲染對象所有的頂點參數(shù)痘番、三角面、索引值平痰、圖元個數(shù)等汞舱,這個請求并不會占用過多的消耗,真正消耗渲染資源的是在GPU得到請求指令后宗雇,把指令發(fā)送給對應(yīng)物體的Shader,讓Shader讀取指令并通知相應(yīng)的渲染通道(Pass)進(jìn)行渲染操作昂芜。
?
【U3D】進(jìn)入shader編程的世界里有簡單介紹過Shader,不懂的童鞋可以去看看。接著上邊的問題進(jìn)行說明赔蒲,場景上有1個gameobject泌神,希望能顯示很酷炫的效果良漱,它的Material上帶有許多特定的Shader。為了實現(xiàn)相應(yīng)的效果欢际,Shader里或許會包含很多的Pass,每當(dāng)GPU即將去運(yùn)行一個Pass之前母市,就會產(chǎn)生一個“SetPass call”,因此在描述渲染性能開銷上损趋,“SetPass calls”更加有說服力患久。
-
Shadow Casters
表示場景中有多少個可以投射陰影的物體,一般這些物體都作為場景中的光源舶沿。
-
Visible skinned meshes
渲染皮膚網(wǎng)格的數(shù)量墙杯。
-
Animations
正在播放動畫的數(shù)量。
*注意 :目前渲染統(tǒng)計窗口的參數(shù)就只有這些括荡,如果你想了解更多的渲染信息高镐,可以打開Unity的Profiler窗口(右鍵--AddTab---Profiler),這兒你可以獲取到更多的渲染數(shù)據(jù),比如“Draw Calls”畸冲、"VBO Totals"嫉髓、"VB Uploads"等等,還能實時觀察CPU邑闲、內(nèi)存和音頻的使用情況