UGUI batch 規則和性能優化html
(基礎) Unity 繪圖性能優化 - Draw Call Batching : http://docs.unity3d.com/Manual/DrawCallBatching.html
性能優化
1.名詞性能
1)Batch 單詞 google 翻譯的解釋是:批量、批次。
2)Stats中的Batches參數:意思是batching後產生的批次數。(其實每個批次就會調用一次DrawCall)
3)Unity官方文檔中的batching是指batch操做和batching技術的稱呼。(這裏的batching是指「將符合條件的mesh經過CPU變換到統一的世界座標中」這個操做,也就是合併mesh爲一個批次的意思)字體
2.UGUI 中全部顯示物體的網格都是本身填充的,例如Image,UGUI會自動生成四個頂點,和表明兩個三角形的頂點索引。全部顯示物體若是不設置它的material都會使用同一個默認材質(shader:「UI/Default」,color:RGBA(1,1,1,1),pass count:1,render queue:3000)優化
3.因此,根據官方文檔DrawCallBatching可知,UGUI很是符合DynamicBatching。可是有一點是不符合的那就是UI的圖片,因此咱們能夠把圖片打成一張大圖集來達到DynamicBatching的效果。這樣就能減小batching後的batches個數,也就減小了DrawCall次數。google
4.由於UI部分涉及的圖片比較多,若是打一個圖集在提交到GPU的時候會佔用很大的內存,因此通常UI圖集都會根據必定的規則進行,texture atlasing。spa
5.因此通常咱們看到的UGUI優化方案,都是基於這些點來講的。這些知識點明白了,才知道爲何要作texture atlasing,爲何要分層,何時要合併等等。翻譯
UGUI排序規則3d
1.相鄰的層級若是它們的texture在一個atlas中,就會被batching到一塊兒。
2.在同一個層級區間而且沒有交叉區域的物體(遮擋會按組件的transform的矩形區域計算),若是texture在一個atlas中,就會被batching到一塊兒。orm
咱們要作的事
1.對於atlas總來的來講就是讓同一時刻,UI中平均包含的atlas儘量少。
常常用的圖片要打成一個atlas。
2.其餘atlas按功能劃分。好比,揹包界面,除了公用圖集中出現的元素之外,全部出現的圖片都打成一個atlas。
3.可重用的組件儘可能在前期就都考慮到,由於到後期可能會產生混亂,同一個按鈕在A界面出現也在B界面出現。(固然除了爲了減小draw call這麼作之外)
4.若是在某種狀況下對頂點數限制不高,能夠考慮將圖片作成對稱的,而後用原圖的一半拼出想要的效果
5.對於drawcall來講,咱們UI中有N層,N越大越靠前,會遮住後面的組件。咱們從0到N數,而後看每一個組件的材質,咱們要儘可能讓這個材質變化的次數減小。
6.相同圖集的組件在不影響最終效果的狀況下儘可能使得相同圖集的組件相鄰。
7.相同字體的文本控件在不影響最終效果的狀況下勁量使得相同字體的組件相鄰。
8.對於不一樣的圖集儘可能不要去穿插,字體也是同樣(縱向交叉,Herichy中的順序)。
9.若是UI元素能夠沒有交叉區域儘可能不交叉,特別是文字。(橫向交叉,矩形區域的交叉)
10.若是可能的話能夠把層疊交叉的文字作到圖片中
11.若是不用mask能夠實現的功能儘可能不用。Mask組件用到了透明,因此他會被繪製兩次。因此,帶mask的組件不適用dynamic batching的規則。