Unity3D項目工程性能優化

 這幾天正在做一個項目,一個場景中的有大量模型,所以優化尤爲重要。

 首先,我們考慮一下,性能優化是要優化什麼?優化的是CPU和GPU計算資源,使得用戶操作流暢,體驗感好,CPU主要負責的是計算數據,幀率,GPU主要負責分辨率相關,渲染等一些東西。

 我們可以從下面幾個方面着手優化:

   1.CPU --------- (1)過多的Draw Calls值;(2)複雜的腳本,腳本在Update中執行太多以及物理組件;(3)GC(垃圾回收);

   2.像素處理------(1)過多的fragment,overdraws;(2)過多的逐像素計算,圖片紋理過大,分辨率過高;

   3.模型方面------(1)模型的面數和模型頂點數;

 對於CPU來說,限制它的主要是Draw Calls值,瞭解OpenGL吧,其實說白了就是通過位置、法線、顏色、紋理座標,攝像機繪製圖像時就需要調用Draw Call,還有模型的頂點數,太多導致法線增加,模型材質等,比如,一個場景裏有山有水,我們渲染水的時候使用的是一個material以及一個shader,但渲染山的時候就需要一個完全不同的material和shader,那麼就需要CPU重新準備頂點數據、重新設置shader,而這種工作實際是非常耗時的。如果場景中,每一個物體都使用不同的material、不同的紋理,那麼就會產生太多Draw Call,影響幀率。

  增對上面的提出的方面,我大概總結了一下優化的方法:

 1、對於腳本語言,要邏輯清除,竟可能都分裝成方法,儘量不要在Update裏面寫太多的功能;

 2、使用LOD(Level of detail)技術;

 3、使用遮使用遮擋剔除(Occlusion culling)技術;(Unity Taiwan有一些關於這方面的知識,講解的特別好

http://unitytaiwan.blogspot.tw/2014/01/unity-43-occlusion-culling.html 

http://unitytaiwan.blogspot.jp/2013/12/unity-43-occlusion-culling_26.html 

http://unitytaiwan.blogspot.tw/2014/01/unity-43-occlusion-culling.html (需×××))

 4、模型的優化,儘可能的減少模型中的三角形的數目數和儘可能重用頂點;

 5、移除不必要的Hard Edge以及紋理銜接,即避免Smoothing splits和UV splits;

 6、減少光照,使用Lightmaps、GodRays;

 7、減少Draw Calls值。

 Draw calls的大小是很重要的,越大,你的工程程序就會越卡頓,Unity3D對於Draw calls的優化有兩種,Unity中有兩種批處理方式:一種是動態批處理,一種是靜態批處理。對於動態批處理來說,好消息是一切處理都是自動的,不需要我們自己做任何操作,而且物體是可以移動的,但壞消息是,限制很多,可能一不小心我們就會破壞了這種機制,導致Unity無法批處理一些使用了相同材質的物體。對於靜態批處理來說,好消息是自由度很高,限制很少,壞消息是可能會佔用更多的內存,而且經過靜態批處理後的所有物體都不可以再移動了。合併紋理,利用網格的頂點數據,有時,除了紋理不同外,還有對於不同的物體,它們在材質上還有一些微小的參數變化,例如顏色不同、某些浮點參數不同,其實,不管是動態批處理還是靜態批處理,它們的前提都是要使用同一個材質。是同一個,而不是同一種,也就是說它們指向的材質必須是同一個實體。

 8、減少紋理圖片的大小和像素的大小,保持紋理圖片大小適中。


 這些博客寫的不錯:http://blog.csdn.net/candycat1992/article/details/42127811

             http://aigo.iteye.com/blog/2248378

http://ravenw.com/blog/2011/10/14/unity-optimization-of-draw-call/


總結的很詳細。大家可以看一看。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章