淺談Unity中的優化(二)--初識Unity-Statistics

2021-02-21 小小Unity

此文章為網上轉載收集而成,非原創文章,請尊重別人的勞動成果,讓分享成為一種美德,歡迎轉載。另外,文章在表述和代碼方面如有不妥之處,歡迎批評指正。同時大家有更好的優化方案,或者自己獨立見解的優化想法,也請發相關郵件於我,我將持續更新這篇文章,努力將「淺談」轉變為「深入」!觀前提示:本文篇幅較長,請耐心觀看或收藏

本文連結https://blog.csdn.net/qq_23420435/article/details/110109812

當前版本:V0.0.0
更新時間:2020-11-25
更新內容:首次整合更新
更新管理:小小Unity

收集整合

18328685848@163.com
----轉載收集整合 小小Unity

章節四《Unity3D性能優化——初識Unity-Statistics》

https://blog.csdn.net/wdmzjzlym/article/details/51335915
                                       ----萌萌的一天

當運行一個U3D場景後,可以在界面右上方看到一個叫做"Status"的按鈕,點開它就會出現一個重疊界面顯示出實時統計數據,比如下圖這種樣子:

       如果你是一名U3D開發新手,或者對此功能非常不熟悉,那麼你可能會在遊戲優化過程中遇到很多麻煩。接下來的篇幅著重講講該窗口的作用和必要的相關名詞解釋。

      Statistics窗口,全稱叫做 Rendering Statistics Window,即渲染統計窗口(或渲染數據統計窗口),窗口中羅列出關於聲音、圖像、網絡狀況等多種統計信息

FPS(Time per frame andFPS):frames per seconds表示引擎處理和渲染一個

遊戲幀所花費的時間,該數字主要受到場景中渲染物體數量和 GPU性能的影

響,

FPS數值越高,遊戲場景的動畫顯示會更加平滑和流暢。一般來說,超過

30FPS的畫面人眼不會感覺到卡,由於視覺殘留的特性,光在視網膜上停

止中用後人眼還會保持1/24秒左右的時間,因此遊戲畫面每秒幀數至少要

保證在30以上。另外,Unity中的FPS數值僅包括此遊戲Scene裡更新和渲

染的幀,編輯器中繪製的Scene和其它監視窗口的進程不包括在內。

CPU:獲取到當前佔用CPU進行計算的時間絕對值,或時間點,如果Unity

主進程處於掛斷或休眠狀態時,CPU time將會保持不變。

Render thread:GPU渲染線程處理圖像所花費的時間,具體數值由GPU性

能來決定,

Batches:即Batched Draw Calls,是Unity內置的Draw Call Batching技術。

      首先解釋下什麼叫做「Draw call」,CPU每次通知GPU發出一個glDrawElements(OpenGl中的圖元渲染函數)或DrawIndexedPrimitive(DirectX中的頂點繪製方法)的過程稱為一次Draw call,一般來說,引擎每對一個物體進行一次DrawCall,就會產生一個Batch,這個Batch裡包含著該物體所有的網格和頂點數據,當渲染另一個相同的物體時,引擎會直接調用Batch裡的信息,將相關頂點數據直接送到GPU,從而讓渲染過程更加高效,即Batching技術是將所有材質相近的物體進行合併渲染。

     對於含有多個不同Shader和Material的物體,渲染的過程比較耗時,因為會產生多個Batches。每次對物體的材質或者貼圖進行修改,都會影響Batches裡數據集的構成。因此,如果場景中有大量材質不同的物體,會很明顯的影響到GPU的渲染效率。這裡說幾點關於Batches優化相關的方案。

雖然Unity引擎自帶Draw Call Batching技術,我們也可以通過手動的方式合併材質接近的物體;   

儘量不要修改Batches裡物體的Scale,因為這樣會生成新的Batch。

為了提升GPU的渲染效率,應當儘可能的在一個物體上使用較少的材質,減少Batches過多的開銷;

對於場景中不會運動的物體,考慮設置Static屬性,Static聲明的物體會自動進行內部批處理優化。

     關於Tris和Verts,突然想到一些問題,這裡需要多嘴說幾句:

Camera的渲染性能受到Draw calls的影響。之前說過,對一個物體進行渲染,會生成相應的Draw call,處理一個Draw Call的時間是由它上邊的Tris和Verts數目決定。儘可能的合併物體,會很大程度的提高性能。舉個很簡單例子,比如場景一種有1000個不同的物體,每個物體都有10個Tris;場景二中有10個不同的物體,每個物體有1000個Tris。在渲染處理中,場景一中會產生1000個Draw Calls,它的渲染時間明顯比場景二慢。                                     

Unity stats 視圖中的 Tris 和 Verts 並不僅僅是視錐中的梯形內的 Tris 和 Verts,而是Camera中 field of view所有取值下的tris和verts,換句話說,哪怕你在當前game視圖中看不到這個 cube,如果當你把 field of view調大到 179 過程中都看不到這個cube,stats面板才不會統計,GPU才不會渲染,否則都會渲染,而且unity不會把模型拆分,這個模型哪怕只有1個頂點需要渲染,unity也會把整個模型都渲出來。(參考自Mess的《Unity Camera組件部分參數詳解》)

之前有童鞋問過我,新建一個空的場景,裡邊沒有添加任何物體,為什麼Status面板上顯示有1.7k Tris以及5.0kVerts。這是因為空的場景自帶默認的天空盒。點擊Windows---Lighting打開Lighting下的Scene面板,把Skybox裡的材質設為空,比如像我下圖這樣:**

      可以看到,場景中的Tris數量變為2,Verts數量變為了4,這是由於攝像機存在的關係,刪掉它,你就會發現Tris 和 Verts 都變為0了。

Screen:獲得當前Game屏幕的解析度大小,後邊的2.1MB表示總的內存使用數值。

SetPass calls:又碰到一個神奇的詞「SetPass calls」。如果你是一個Unity的

老用戶,你可能會注意到原來的Stats面板的第一項是「Draw calls」,然而到

了Unity5.X版本,Stats上沒有了「Draw calls」,卻多出來一項」SetPass calls「,

那麼這個玩意到底是做什麼的???(你猜.... )← ←!

     感覺又要說一大堆東西了之前有講到Batches,比如說場景中有100個gameobject,它們擁有完全一樣的Material,那麼這100個物體很可能會被Unity裡的Batching機制結合成一個Batch。所以用「Batches」來描述Unity的渲染性能是不太合適的,它只能反映出場景中需要批處理物體的數量。那麼可否用「Draw calls」來描述呢?答案同樣是不適合。每一個「Draw calls」是CPU發送個GPU的一個渲染請求,請求中包括渲染對象所有的頂點參數、三角面、索引值、圖元個數等,這個請求並不會佔用過多的消耗,真正消耗渲染資源的是在GPU得到請求指令後,把指令發送給對應物體的Shader,讓Shader讀取指令並通知相應的渲染通道(Pass)進行渲染操作。 

相關焦點

  • 淺談Unity中的優化(三)——Unity優化之相機優化
    同時大家有更好的優化方案,或者自己獨立見解的優化想法,也請發相關郵件於我,我將持續更新這篇文章,努力將「淺談」轉變為「深入」! ----原創 程式設計師茶館5.3.1-Occlusion Culling遮擋剔除unity 中的剔除包括兩種,一種是視角剔除,凡是不在攝像機視野內的物體,不進行渲染,第二種就是遮擋剔除,被擋住的物體不被渲染,即使它在相機視野內,兩種方法可以共存
  • 淺談Unity中的優化(二)--Unity優化之腳本開發
    同時大家有更好的優化方案,或者自己獨立見解的優化想法,也請發相關郵件於我,我將持續更新這篇文章,努力將「淺談」轉變為「深入」!18328685848@163.com ----轉載收集整合 小小Unity章節五《Unity3D性能優化
  • 淺談Unity中的優化(三)——Unity優化之UGUI優化
    同時大家有更好的優化方案,或者自己獨立見解的優化想法,也請發相關郵件於我,我將持續更新這篇文章,努力將「淺談」轉變為「深入」!如果多個UI建議使用canvas group中的alpha 設置0。9.避免使用Camera.main當設置畫布進行渲染時,不管該畫布是在世界空間還是攝像機的屏幕空間,都可以指定用於為UI中Graphic Raycaster生成交互事件的攝像機。
  • Unity 實用技巧 - 物理系統初識
    官方文檔:https://docs.unity3d.com/Manual/PhysicsSection.html01  Rigidbody(剛體)/ Rigidbody2D(2D剛體)在使用Unity中如果想要GO擁有重力,可以發生碰撞反饋等,那就必不可少需要添加一個組件
  • 淺談Unity中的優化(二)--Unity優化之資源優化
    同時大家有更好的優化方案,或者自己獨立見解的優化想法,也請發相關郵件於我,我將持續更新這篇文章,努力將「淺談」轉變為「深入」!                                                                        ----原創 ResetOTER這節主要講unity
  • Unity 實用技巧 - 物理系統初識|unity|剛體|觸發器|靜態|運動學...
    官方文檔:  https://docs.unity3d.com/Manual/PhysicsSection.html  01Rigidbody(剛體)/ Rigidbody2D(2D剛體)  在使用Unity中如果想要GO擁有重力,可以發生碰撞反饋等,那就必不可少需要添加一個組件
  • 淺談Unity中的優化(一)--解讀Unity性能優化
    同時大家有更好的優化方案,或者自己獨立見解的優化想法,也請發相關郵件於我,我將持續更新這篇文章,努力將「淺談」轉變為「深入」!,即使在中高端機型可較大內存運行。垂直同步講會在下節「5.2-Unity Profile中詳細介紹」3.6.3-GPU優化
  • 有史以來最快的Unity編輯器版本,Unity 2020.2 中的性能優化
    在兩年前,我們大膽地組成了一支專門的Optimization Team優化團隊,將性能作為單獨的類別進行優化。Unity 2020.2有幾項全新的優化功能已在beta中開放測試,本文將介紹2020.2中的新進展以及團隊的努力,完整的改進請查看Unity 2020.2 beta發布說明。
  • Unity中的一些優化建議
    在Unity中,相比漫無目的地調整代碼,選擇正確的腳本優化更能提高代碼的執行效率。但值得注意的是,最好的優化並不是簡單地降低代碼的複雜度。各個平臺通用的優化方案如下。1)在使用FixedUpdate()函數時,在方法內儘量不要寫太多無須重複調用的代碼,因為虛擬機在執行該方法時是以每秒50~100次的執行效率來處理每個腳本與每個對象的。
  • 淺談unity webGL與three.js
    其實是這樣的,最近我的一個老同學,一直在跟我吐槽unity的webGL有多坑多坑,當初我們是一起學的unity,也是懷著一顆做遊戲的夢想,最後呢,他去做了遊戲,我做了當時很火的VR和AR,這幾年來呢,我這位同學一直在做手遊,最近換了一家公司,說是要做頁遊,使用unity的webGL模塊來做,他呢,遇到的坑是真多,結合我自己的工作經驗,我總結一下unity的webgl和three.js有哪些優勢和缺點
  • Render- 關於Unity渲染方面的優化(下)
    比如,unity的針對移動平臺的內置shader,它經過一定的優化。這類shader不但適用移動平臺,也適用於其他平臺的任何項目。在不失預期效果的前提下,使用」mobile」類的shader是最佳選擇。如果被渲染對象使用的是unity的 標準shader(standard shader),要知道 unity是基於它當前所在的材質面板中的設置來進行編譯。
  • Unity中的light map
    使用light map,可以將靜態光源的信息(顏色,陰影,方向等)存儲到texture上,渲染靜態的物體時,無需進行多個light pass,直接從texture中進行採樣計算即可。使用light map可以用較低的成本實現間接光照和全局光照。
  • 零基礎課程已上線,帶您從0到0.1入門Unity
    Unity所倡導的「大眾化」開發,有效地促進了整個遊戲行業的發展,吸納了更多有志之士加入到遊戲開發的行列中。不僅僅是遊戲,Unity強大的實時3D技術也賦能於工業、醫療、地產等領域,市場上對於優秀的Unity開發人才有著非常大的需求。
  • Unity學習筆記(一)—學習unity的五個階段
    通過對比總結,我歸納出unity的學習,主要分為五個階段:第一個階段:初步認識unity要想學習unity,首先我們要知道unity是什麼,應用於哪些行業。unity是一款遊戲開發引擎,是實時3D互動內容創作和營運平臺。
  • 【VR/AR】Unity索尼VR頭顯優化經驗
    unity支持vr的方式有兩種,首先是以插件的方式加入unity,由第三方硬體廠家提供相應的SDK,這種方式左右眼需要雙倍的CPU
  • 使用UnityHub下載任意版本Unity
    在之前工作的時候同事曾經遇到過一個「小」問題:如果要下載安裝一個打開特定工程版本的Unity編輯器且通過Unity Hub進行安裝,但當你在Unity決定安裝一個新版本引擎的時候,往往會遇到這樣的窘境……大革命集線器(Unity Hub)沒錯,只有當前最新版本的引擎能在列表中找到,而且當你下載後還會有特殊的事情發生!
  • Unity手機遊戲商業化優化系列!
    系列目錄 遊戲優化系列一:海外谷歌應用適配相關 遊戲優化系列二:Android Studio製作圖標教程遊戲優化系列三:Unity遊戲的黑屏問題解決方法遊戲優化系列一:海外谷歌應用適配相關本文目錄1. 谷歌應用圖標2. 狀態欄消息推送3.
  • Unity中Git使用指南
    目前超過69%的軟體行業在使用Git,最近通過對Git的改進,使得Git可以處理unity中assets目錄下更大的資源文件,所以越來越多的遊戲工作室從Perforce和Subversion遷移到Git。
  • Unity分析Import耗時
    unity的資源導入和unreal的shader complier這兩大折磨王苦天下久已
  • Unity UI性能優化技巧
    更多優化技巧,可以觀看下方的視頻,內容是Unity工程師Ian Dundore在Unite Europe 2017的演講《使用Unity性能提升技巧》。問題:UI Canvas上有一個或多個元素變化時,會汙染整個畫布。畫布(Canvas)是Unity UI的基本組件。