CreatorPrimer | 2.x的渲染初探

Shawn之前只是從感性的一面瞭解Cocos Creator 2.0在性能更好,增加部分3D效果的支持,同時API有一些變化。隨着對Cocos Creator 2.x的實踐,以及引擎組大神們的指導,對Cocos Creator 1.x和2.x有了新的瞭解和認識,在此將這次學習內容與大家分享。

1. 1.x與2.x的渲染區別

Cocos Creator 1.x 是在cocos2d-js基礎上增加了組件與可視化編輯器,但隨着引擎不斷迭代與進化,之前cocos2d-js的渲染設計制約了引擎的發展,新版本需要丟下原有的包袱,輕裝上陣。

渲染樹對比

通過下面的一些圖我們對比一下1.x與2.x在渲染上的區別:

1.x的邏輯樹與渲染樹

從上圖可以看到,引擎中維護了一顆場景邏輯樹(左邊),需要時刻與渲染樹(右邊)進行數據同步。sgNode僅僅是爲了同步Node的所有transform信息和渲染組件的狀態信息,這造成了巨大的浪費。

2.x中的節點樹

在2.x使用了全新的設計,引擎內部只有一顆邏輯樹,場景下包含節點,節點下掛載有渲染組件,簡單清晰。因此在2.x中節點與組件對象中,不再有_sgNode這個變量了,使用時需要注意。

渲染流程

我們通過節點的transform爲例對比1.x與2.x的渲染流程,請看下圖:

1.x渲染流程

  1. 檢查節點顏色是否dirty(變髒),如果是生成Color更指令
  2. 檢查 Transform(幾何屬性變換)是否dirty,如果是生成更新Transform指令
  3. 通過dirty檢查是否需要重新渲染,是則生成渲染指令壓入渲染隊列
  4. 檢查是否存在子節點,如果存在,則對子節點進行相同渲染流程的檢測
  5. Render渲染器按隊列順序執行渲染指令

2.x渲染流程

2.x在渲染流程上預先建立了所有情況的渲染通道,看上圖中:transform、render、render&transform、render&transform&children。

通過節點的渲染標誌直接進入某條渲染通道,有效減少動態判斷帶來的性能損耗。

按Shawn的理解是將在原來的條件判斷,進化成了直接查表,據引擎組大神講預先建立的各種情況的渲染組合有100多種之多。

渲染框架

我們再從整體上看一下2.0的渲染框架,請看下圖:

2.0渲染框架

  1. Assembler(組裝器)獲取組件、節點數據生成RenderData(渲染數據),渲染數據會按有效批次提交形成Model
  2. Model渲染數據包含兩部分:頂點數據(VertexBuffer、IndexBuffer)和表現(Effect),記得前面介紹過2.0材質系統,核心就是Effect了。
  3. 2.0增加了新的3D Render(3D渲染器),在外表現爲Camera(攝像機)的使用,在2.0場景中如果移除Camera,運行時你將不會看到任何內容
  4. 最後Camera使用Model數據對遊戲場景進行渲染,

使用2.0的Camera用極少的代碼就能實現卷軸地圖、縮略小地圖、節點跟隨、動態調整渲染順序等複雜功能。

渲染數據

我們再看一下渲染數據這塊,它分爲兩個部分:數據與表現,請看下圖:

Renderer數據結構

  1. 數據部分:輸入組裝器,組裝了VertexBuffer(頂點緩存)和IndexBuffer(索引緩存)
  2. 表現部分:主要是增加了Material(材質系統)相關API,可以方便地控制Shader的defines、Uniforms,同時可以在不同幀切換使用不同的Shader。

這部分的應用可以參考《ShaderHelper組件速遞》《Material.js源碼分析》。

3. 小結

本篇初步探索了Cocos Creator 2.x新的渲染流程和框架,其中對開發者特別有用的是性能提升、自定材質系統、3D攝像機讓遊戲表現會更加豐富。

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