cocoscreator 2.4.x版本 drawcall優化 第一期(掌握控制drawcall數量的必要知識)

1,測試環境

2,爲何drawcall多會影響性能

3, 哪些組件支持渲染

4,影響drawcall的因素

5,一句話介紹如何減少drawcall

6,哪些渲染組件不會被渲染

7,減少drawcall的理論(放在第二期)

8,理論指導實踐,實踐印證理論,demo實操(放在第三期)

9,總結(放在第三期)

「測試環境」 :

1.Mac 系統

2.cocoscreator 2.4.x版本

「爲何drawcall多會影響性能?」

Drawcall: 繪製調用,指cpu調用圖形繪製接口命令gpu進行圖形繪製

「每一次繪製前,CPU要準備繪製參數(狀態)比如色彩通道(color filter),繪圖方式(shader)等複雜的數據處理,然後Drawcall,如果有大量drawcall,cpu會很“忙”,而gpu的處理能力很強,這時他可能閒置,不能充分發揮應有的能力,導致性能下降。」

「哪些組件支持渲染:」 因爲一個drawcall是一次cpu調用圖形繪製接口命令 gpu進行圖形繪製渲染的過程,所以需要了解cocoscreator中哪些組件支持渲染,才能更好的控制drawcall

**

  • !#en
  • Base class for components which supports rendering features.
  • !#zh
  • 所有支持渲染的組件的基類
  • @class RenderComponent
  • @extends Component
    */
    let RenderComponent = cc.Class({
    上面的註釋介紹 RenderComponent是所有渲染組件的基類,就是說他的子類和孫子類的組件。。。都是支持渲染的組件 可以全局搜索引擎,知道 粒子, 動畫,文字(label),遮罩(mask),運動軌跡(MotionStreak),精靈(Sprite),繪圖(Graphics)地圖(tiledmap)等等, 也可以在 cocoscreator界面 右側添加組件 -》渲染組件查看

「影響drawcall的因素:」

1,層級(zindex)

2,材質(Material)(shander,貼圖(紋理),混合模式(blend))。只有擁有相同材質的渲染節點 纔可能進行批處理,貼圖,shader 決定了材質,而層級則決定了相同的材質 是否能 進行合併處理 即合併網格(mesh) 合併drawcall.,

「一句話介紹如何減少drawcall:」 繪製狀態的變化 是導致drawcall增多的 主要原因。cocoscreator認爲要以深度(zindex)優先的方式對渲染組件進行渲染,並且cocoscreator認爲相同的材質可以被批量渲染。所以具有相同材質的並且連續的渲染節點 可以合併渲染 減少drawcall.

「連續:」

1,層級相同添加順序相鄰,

2,層級不同 中間層級沒有其他材質的渲染組件。比如 a的層級是1 b的層級是3 在 1-3層級之間沒有其他材質的 渲染組件.

「影響drawcall的因素:」

「1,渲染節點(zindex)層級」

zIndex是節點的層級是用來對節點進行排序的關鍵屬性,它決定一個節點 在兄弟節點之間的層級,和誰被優先渲染。

1) zIndex 的取值介於 cc.macro.M IN_ZINDEX 和 cc.macro.MAX_ZINDEX 之間

即 - math.pow(2,15). 和 math.pow(2,15)-1之間。

實際操作中一般是 -1 到 n n一般不會超過1000

2)父節點主要根據節點的 zIndex 和添加次序來排序,擁有更高 zIndex 的節點將被排在後面(後被渲染先被渲染的圖在後被渲染的圖下面),如果兩個節點的 zIndex 一致,先添加的節點會穩定排在另一個節點之前。排在前面的節點先被渲染,也就是說兩張圖層級相同 先添加的會先被渲染 顯示出來的結果是 在後被渲染的圖的下面。

3)節點在 children 中的順序決定了其渲染順序。父節點永遠在所有子節點之前被渲染

4)node節點放在Canvas或者父節點的zindex默認值是0

5)決定節點層級的另一個因素是siblingIndex 他的權重低於 zIndex 當我們在編輯器上編輯借點的時候 兄弟節點之間的zIndex相同,爲什麼會出現一個先被渲染一個後被渲染呢 ,就是因爲 siblingIndex 不同,排在前面的siblingIndex要小一些後面的要大一些 最終後面的後選擇然 層級就在 前面的上邊。 也就是說 zindex 其決定性作用,zIndex相同 就比較siblingIndex來判定最終層級。

「2,材質」

1)紋理(貼圖)

2)shander:渲染器,能夠讀懂的點和顏色的對應關係的程序,簡單來說就是繪圖的方式)

只有擁有相同材質的物體纔可以進行批處理。因此,如果你想要得到良好的批處理效果,你需要在程序中儘可能地複用材質和物體。

如果你的兩個材質僅僅是紋理不同,那麼你可以通過 紋理拼合 操作來將這兩張紋理拼合成一張大的紋理。一旦紋理拼合在一起,你就可以使用這個單一材質來替代之前的兩個材質了。

「哪些渲染組件不會被渲染」

cocoscreator 認爲 透明度 === 0. 或者 active = false 的渲染組件 不會被渲染。

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