cocos Creator 2.4 . x drawcall优化第一阶段(掌握必要的知识控制draw call的数量)。
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将不被呈现。