CocosCreator

cocos creator 2.4.0 渲染流程详解(六:材质系

2020-08-09  本文已影响0人  vectorZ

全文共5000+字,分为8个章节,由本人历时一周整理而来。由于篇幅问题,将本文分为8个章节分开发布。全文 () 详细描述了cocoscreator 引擎的2.40版本中,web平台的js部分引擎的渲染流程。请将文章配合源码一起食用!

​由于我尚在学习引擎源码中,文章可能有不正确的部分,所以我会不断更新内容。如有错误或补充,请留言交流!


全部章节链接:

一:渲染流程中用到的核心类

二 : 渲染流程详解

三: RenderFlow 的运行逻辑

四: Assembler 的作用

五: ModelBatcher 数据合批

六: 材质系统

七: ForwardRender


六 材质系统

官方对材质系统的介绍较为详细,所以本文不详细介绍,只做大概概括。为了解详细内容可见文末的官方文档 相关链接:材质系统

材质系统控制着每个模型最终的着色流程与顺序, 在引擎内相关类间结构如下:

类的关联图

6.1 EffectAsset

在编辑器导入 EffectAsset 时, 会对用户书写的内容做一次预处理, 替换 GL 字符串为管线内常量, 提取 shader 信息, 转换 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 在场景中的资源实例, 它本身的可配置参数有:

6.3 Effect 语法

具体详细内容可见文末相关链接:材质系统 下的详细内容。


相关链接

  1. 自定义渲染https://docs.cocos.com/creator/manual/zh/advanced-topics/custom-render.html#%E8%87%AA%E5%AE%9A%E4%B9%89-assembler

  2. RenderFlow的性能优化http://docs.cocos.com/creator/manual/zh/advanced-topics/render-flow.html#

  3. 自定义渲染合批之自定义顶点格式https://forum.cocos.org/t/demo/95087

  4. 自定义RenderFlow,处理背包等场景下drawcall过多:https://forum.cocos.org/t/ui/80026

  5. 材质系统https://docs.cocos.com/creator3d/manual/zh/material-system/overview.html

上一篇 下一篇

猜你喜欢

热点阅读