批次合并的本质就是在一帧的渲染过程中,保证连续节点的渲染状态一致,将尽可能多的节点数据合并一次性提交,从而减少绘图指令的调用次数,降低图形 API 调用带来的性能消耗,同时也可以避免 GPU 进行频繁的渲染状态切换。渲染状态就包括:纹理状态,Blend 模式,Stencil 状态,Depth Test 状态等等。 纹理状态 在Creator 中可编...
需要额外说明的是,2D 渲染组件的渲染数据采集使用的是基于节点树的渲染方式,而有部分组件无法合批,且会打断其他组件合批,需要用户进行分模块管理节点树布局,以达到更好的合批效果。无法合批的组件包括: 内置组件 Mask、Graphics 和 UIMeshRenderer 组件由于材质不同和数据组织方式的差异,无法与其他组件合批; TiledMap、...
(1)渲染到纹理。利用OpenGL的FBO,存储到RenderTexture,然后使用RenderTexture代理原来节点的显示。在CocosCreator中,FBO的使用可以通过Camera的Render来实现。 (2)动态修改父节点和节点的顺序。理想的情况主要是将能够合批(见合批规则与原理)的节点放在一起,并将文字节点和图片节点分开放。满足引擎渲染队列广度遍历、以及避...
在Cocos Creator 中,动态合批(Dynamic Batching)是一种优化渲染性能的技术。它通过将多个较小的绘制调用(Draw Call)合并成一个较大的绘制调用,从而减少 CPU 向 GPU 提交绘制指令的次数,进而提升渲染效率,降低渲染开销。 2. 动态合批的原理和工作方式 动态合批的原理主要是基于渲染状态的相似性。如果多个渲染对象(如...
自定义渲染可以实现很多酷炫的 shader 特效,目前常用的有两种方法: 1.创建自定义材质,给材质增加参数。这个参数会作为 uniform 变量传入 shader。 由于渲染合批要求材质参数保持一致,所以如果大量对象使用自定义材质时,并且材质参数各不相同,是无法进行合批渲染的,一个对象占一个 draw call。
ParticleMaterial用于粒子渲染的材质。 当使用 CPU 渲染器,也就是不勾选UseGPU时,材质使用的effect只能选择 Creator 内置的builtin-particle,不支持其它的effect。 当使用 GPU 渲染器,也就是勾选UseGPU时,材质使用的effect只能选择 Creator 内置的builtin-particle-gpu,不支持其它的effect。
所以从上分析可以得出结论:尽可能的把物体合批到一起渲染(降低Drawcall数目)对于渲染优化是非常有效果的。Cocos Creator可以通过调试参数来看到当前渲染整个游戏场景分几次提交给GPU(Drawcall数目)如下图: 常用合批技术的原理以及优点与缺点分析 上面分析了合批对渲染性能提升的意义,接下来分析合批常用的技术原理以及优缺点...
可以观察到无论哪种模式,只要label使用的字号,颜色,字体不同,都会进行单独的渲染,注意这里的颜色,也会受影响,原因是shader里面不处理node color导致的。 即如果label除了颜色剩下的属性都相同,都会生成同等颜色个数的label。 通过spector.js可以找到对应的shader ...
动态合图是按照渲染顺序来选取要将哪些贴图合并到一张大图中的,这样就能确保相邻的 DrawCall 能合并为一个 DrawCall。 动态合图遵循上述第二点的合批的条件。 启用、禁用动态合图 Cocos Creator 在初始化过程中,会根据不同的平台设置不同的CLEANUP_IMAGE_CACHE参数,当禁用CLEANUP_IMAGE_CACHE时,动态合图就会默认开启。
>YAML 101 · Cocos Creator ## 精灵的渲染 首先我们熟悉一下默认精灵的shader代码,笔者用ccc版本是2.4.5,其默认精灵的shader代码如下: ```yaml // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. CCEffect %{ techniques: - passes: