全文共5000+字赌莺,分為8個章節(jié),由本人歷時一周整理而來松嘶。由于篇幅問題艘狭,將本文分為8個章節(jié)分開發(fā)布。全文 (不) 詳細描述了cocoscreator 引擎的2.40版本中翠订,web平臺的js部分引擎的渲染流程巢音。請將文章配合源碼一起食用!
?由于我尚在學習引擎源碼中尽超,文章可能有不正確的部分官撼,所以我會不斷更新內(nèi)容。如有錯誤或補充似谁,請留言交流傲绣!
全部章節(jié)鏈接:
六 材質(zhì)系統(tǒng)
官方對材質(zhì)系統(tǒng)的介紹較為詳細掠哥,所以本文不詳細介紹,只做大概概括秃诵。為了解詳細內(nèi)容可見文末的官方文檔 相關鏈接:材質(zhì)系統(tǒng)续搀。
材質(zhì)系統(tǒng)控制著每個模型最終的著色流程與順序, 在引擎內(nèi)相關類間結(jié)構(gòu)如下:
6.1 EffectAsset
在編輯器導入 EffectAsset 時, 會對用戶書寫的內(nèi)容做一次預處理, 替換 GL 字符串為管線內(nèi)常量, 提取 shader 信息, 轉(zhuǎn)換 shader 版本等.
CCEffectAsset 組件的 onLoad 中,會將shader信息注冊到 cc.renderer._forward._programLib (類型: ProgramLib )中顷链,代碼如下目代。
let lib = cc.renderer._forward._programLib;
for (let i = 0; i < this.shaders.length; i++) {
lib.define(this.shaders[i]);
}
6.2 Material
Material 資源可以看成是 EffectAsset 在場景中的資源實例, 它本身的可配置參數(shù)有:
- effectAsset 或 effectName: effect 資源引用, 使用哪個 EffectAsset 所描述的流程進行渲染? (必備)
- technique: 使用 EffectAsset 中的第幾個 technique? (默認為 0 號)
- defines: 宏定義列表, 需要開啟哪些宏定義? (默認全部關閉)
- states: 管線狀態(tài)重載列表, 對渲染管線狀態(tài) (深度模板透明混合等) 有哪些重載? (默認與 effect 聲明一致)
6.3 Effect 語法
具體詳細內(nèi)容可見文末相關鏈接:材質(zhì)系統(tǒng) 下的詳細內(nèi)容。
相關鏈接
RenderFlow的性能優(yōu)化:http://docs.cocos.com/creator/manual/zh/advanced-topics/render-flow.html#
自定義渲染合批之自定義頂點格式: https://forum.cocos.org/t/demo/95087
自定義RenderFlow嗤练,處理背包等場景下drawcall過多:https://forum.cocos.org/t/ui/80026
材質(zhì)系統(tǒng):https://docs.cocos.com/creator3d/manual/zh/material-system/overview.html