UGUI優化(二)減少OverDraw區域

2021-09-26 19:55:31 字數 1082 閱讀 6757

overdraw就是指gpu對螢幕一片區域的重複繪製次數。舉個例子,場景中只有乙個image,那麼gpu只需要渲染這張image就可以,但他需要渲染在背景上,所以會產生一層overdraw。如果再在這張image上新增乙個image,且兩者有重疊。這時候按照unity ugui的渲染邏輯,從hierarchy裡最上面的物體開始逐個向下渲染,就需要先繪製父image再繪製子image,對重疊部分來說,既繪製了父image又繪製了子image,在這裡產生重複繪製,所以出現了兩層overdraw。

所以優化overdraw的方向就是盡可能的減少不同ui的重疊區域。

在製作ui時除了要注意減少不同ui的重疊區域之外,還需要注意一些內建的ui元件的影響:

1)image type 為sliced、tiled的image 不需要填充九宮格的不要勾選fill center屬性,例如頭像邊框這種,這可以將中間鏤空減少重疊區域;

2)慎用mask元件,它自帶兩層overdraw;

3)慎用text元件的outline和shadow,shadow會增加一層overdraw,而outline是複製了四份shadow實現的;

4)不使用空白或透明的image,儘管alpha = 0,還是會渲染並增加一層overdraw,可以重寫指令碼替代

public

class

emptyimage

:maskablegraphic

protected

override

void

onpopulatemesh

(vertexhelper tofill)

}

5)對於彈出視窗,位於底層的視窗如果被上層遮擋,請將它從camera渲染層級裡移除並將不可見的canvas設定enable = false,不在camera渲染層級裡的canvas.enable = true,它下面的ui仍然會產生overdraw;

6)ui上的特效粒子,請盡量簡單,如果可以請用序列幀動畫實現。

UGUI字型優化

字型圖集的重建機制 當乙個新文字出現的時候,會被新增到字型圖集,如果圖集已經沒有空餘的地方,那麼圖集會被重建。圖集會以相同的尺寸重建,打包當前啟用的所有ui text元件中要顯示的文字,如果發現圖集尺寸不夠用的時候,圖集會重新擴充尺寸。後備字型機制 對於字型庫裡沒有的文字,會被放進後備字型圖集裡,後...

UGUI優化之路 VertexHelper

準備整理和記錄在工作遇到或平時看到的ugui優化思路。希望自己能整理出一整個系列出來。ugui的原始碼網上都有,不會記錄太多本身原理的東西。重點記錄思路和一些ugui本身的坑。每個優化可能都是比較小的,效果不一定是立竿見影,專案中的優化很多時候就在於積少成多。版本 unity 2018.4 在製作一...

UGUI優化不全總結

overdraw和wireframe兩個渲染模式可以檢視填充率 ui也是網格,乙個網格的資料將等待gpu呼叫介面繪製乙個drawcall 半透明從後向前渲染,半透明渲染兩次容易造成填充率問題 盡量不要用setactive方法 text的頂點多 材質和精靈一樣可以合批 framedebug視窗顯示渲染...