2、為什麽drawcall會影響性能?
3.哪些組件支持渲染?
4、影響提款的因素
5.用壹句話介紹如何減少drawcall。
6.哪些渲染組件不會被渲染?
7、減少drawcall的理論(在第二階段)
8、理論指導實踐,實踐印證理論,演示實踐(第三期)
9、總結(在第三期)
“測試環境”:
1.Mac系統
2.Cocos Creator版本2.4.x。
“為什麽drawcall會影響性能?」
Drawcall:繪圖調用是指cpu調用圖形繪制接口來命令gpu繪制圖形。
“每次畫圖前,cpu都要準備好顏色濾鏡、著色器等復雜數據處理的畫圖參數(狀態),然後進行畫圖調用。如果有大量的draw調用,CPU會很忙,而gpu的處理能力很強。此時可能會閑置,無法發揮應有的能力,導致性能下降。」
"哪些組件支持渲染?"因為drawcall是cpu調用圖形繪制接口來命令gpu繪制和渲染圖形的過程,所以為了更好地控制drawcall,需要了解cocoscreator中哪些組件支持渲染。
**
"影響drawcall的因素:"
1,層次結構(zindex)
2、材質)(山德、紋理、融合)。只能批處理具有相同材質的渲染節點。紋理和著色器決定材質,級別決定同壹材質是否可以合並,也就是用drawcall合並網格。
《如何用壹句話減少drawcall》:“繪圖狀態的改變是drawcall增加的主要原因。Cocoscreator認為渲染組件應該以zindex-first的方式渲染,cocoscreator認為同樣的材質可以批量渲染。因此,材質相同的連續渲染節點可以合並渲染以減少drawcall。
"連續:"
1,級別相同,加法順序相鄰,
2.中間層沒有其他材質的渲染組件,級別不同。比如A的等級是1 b,A的等級是3。1-3級別之間沒有其他材質的渲染組件。
"影響drawcall的因素:"
1,渲染節點(zindex)級別
ZIndex是節點的層次結構,是用於對節點進行排序的關鍵屬性。它決定了兄弟節點之間的層次結構,以及誰在渲染中具有優先權。
1) zIndex的值介於cc.macro.M IN_ZINDEX和cc.macro.MAX_ZINDEX之間
也就是between-math.pow(2,15)。以及math.pow(2,15)-1。
實際操作中壹般是-1到n n,壹般不會超過1000。
2)父節點主要根據它們的zIndex和添加順序進行排序。具有較高zIndex的節點將排在後面(渲染後首先渲染的圖形位於稍後渲染的圖形下方)。如果兩個節點的zIndex壹致,則最先添加的節點將排在另壹個節點之前。首先渲染第壹個節點,這意味著兩層是同壹級別。添加的第壹個節點將首先呈現,顯示的結果位於稍後呈現的圖形下方。
3)子節點的順序決定了它們的渲染順序。父節點總是在所有子節點之前呈現。
4)畫布中節點或父節點的zindex默認值為0。
5)決定節點級別的另壹個因素是siblingIndex,其權重低於zIndex。當我們在編輯器中編輯借用點時,兄弟節點之間的zIndex是相同的。為什麽壹個先渲染,壹個後渲染?因為siblingIndex不壹樣,前面的siblingIndex比較小,後面的Sibling Index比較大,最後後面的後選等級正好在前面的上面。也就是說,zindex起著決定性的作用。如果zIndex相同,比較siblingIndex確定最終級別。
“2、材質”
1)紋理(貼圖)
2)shander: Renderer,壹個可以理解點和顏色對應關系的程序,簡單來說就是畫圖的方式)
只有具有相同材料的對象才能被批量處理。所以,如果想要得到壹個好的批量效果,就需要在程序中盡可能的重用材質和對象。
如果妳的兩種材質只是紋理不同,可以通過紋理拼接操作將這兩種紋理合成壹個大紋理。壹旦紋理放在壹起,您可以使用這種單壹的材料來取代前兩種材料。
"哪些渲染組件不會被渲染"
Cocoscreator認為渲染組件透明度= = 0。或者active = false將不被呈現。