批處理
1.批處理的目的就是為了減少drawcall。drawcall即cpu命令gpu去繪製。
2.如果需要渲染一千個三角形,那麼把它們按一千個單獨的網格進行渲染所花費的時間遠大於直接渲染乙個包含了一千個三角形的網格。
3.要想使用批處理,需要物體有相同的材質。這是因為,對於使用同乙個材質的物體,它們的不同僅僅在於頂點資料的差別,我們可以把這些頂點資料合併在一起,在一起傳送給gpu,就可以完成一次批處理。
4.在unity中,有兩種批處理:一是動態批處理,二是靜態批處理。
對於動態批處理,unity會自動完成,不需要我們進行操作,而且物體時可以移動的,但是動態批處理有許多限制條件。
對於靜態批處理,物體不可移動,但是限制條件很少。
動態批處理
原理:每一幀把可以進行批處理的模型網格進行合併,再把合併後模型資料傳遞給gpu,然後使用同乙個材質對其渲染。
限制:1.頂點屬性要小於900。例如,如果shader中需要使用頂點位置、法線和紋理座標這三個頂點屬性,那麼要想讓模型能夠被動態批處理,他的頂點數目不能超過300。因此,優化策略就是shader的優化,少使用頂點屬性,或者模型頂點數盡可能少。
2.多pass的shader會中斷批處理
3.在unity5中,動態批處理對於模型縮放的限制已經不存在了
4.使用光照紋理的物體需要小心處理。為了讓這些物體可以被動態批處理,需要保證它們指向光照紋理中的同乙個位置。
靜態批處理
原理:只在執行開始階段,把需要進行靜態批處理的模型合併到乙個新的網格中,這意味著這些模型資料不可以在執行時被移動。
優點:因為它只需要進行一次合併操作,因此動態批處理更加高效
操作:將inspector面板右上角的static勾選(實際上只需要勾選batching static即可)
按照疊層順序處理:
疊層順序是按照hierarchy中的順序從上往下進行的,也就是越靠上的元件,就會被畫在越底部。
圖集batch規則:
計算層級號的演算法:如果有乙個ui元素,它所佔的螢幕範圍內(通常是矩形),如果沒有任何ui在它的底下,那麼它的層級號就是0(最底下);如果有乙個ui在其底下且該ui可以和它batch,那麼它的層級號與底下的ui層級一樣;如果有乙個ui在其底下但無法與它batch,那麼它的層級號為底下的ui層級+1;如果有多個ui都在其下面,那麼按前兩種方式遍歷計算所有的層級號,其中最大的那個作為自己的層級號。
合併批次:如果相鄰間的兩個批次正好可以batch的話就會進行batch。
z軸的影響
unity以canvas為單位進行繪製,按照前兩條規則,當遍歷列表進行處理時,如果列表中有x元素z軸不為0,則處理會被打斷,x元素之前的歸為乙個處理批次,x元素以及x元素之後的元素歸為乙個處理批次。
舉例:列表中c的z軸不為0,那麼從c開始被打斷,列表的處理被強行拆分為兩個列表和。
text優先順序高於image
按照上面的規則,imagea層級號為0,imageb層級號為1(imagea和imageb可以batch),textc層級為0。
繪製順序為textc,imagea,imageb(framedebugger中為兩個dm)
unity的UGUI學習筆記
1 ugui中的層級是按先渲染者在下面,即在同乙個畫布中節點越靠上,越先渲染越在底層,畫布間用sortorder引數設定層級 2 ugui中image會擋住button的事件,這種情況只需要為image新增 canvasgroup元件,或者將button放在畫布的最下方 3 元件的對齊設定注意piv...
Unity筆記 UGUI中Canvas螢幕適配
1 通過recttransform中的anchors和pivot來進行控制項和窗體的布局適配。anchors控制當前panel相對于父窗體的布局位置,可以設定為居中或者左上角,當父窗體拉伸的時候當前panel可以自動布局到正確位置。同時這裡可以設定拉伸,比如主介面一般是全屏拉伸的,這種情況可以在這裡...
unity的UGUI筆記(二) Text
text是ui中顯示文字的元件,中文模式下很多都可以輕鬆理解其中的含義 以下是比較重要的東西 1.幾何對齊 以文字框為參考對齊,使用後更好的對齊貼合文字框,就像把word的 邊框去掉直接對齊一樣 個人理解 2.富文字 使用後可以支援字型調節,顏色,大小,粗細 3.水平 垂直溢位 使用overflow...