CocosCreator客户端优化系列(二):渲染优化

CocosCreator客户端优化系列(二):渲染优化

转载请保留原文链接:https://blog.csdn.net/zzx023/article/details/85319733

渲染方面优化主要集中在如何降低draw call上,draw call越多,渲染的压力也就越大,对应的帧率可能就会下降,正常情况下如果draw call超过100就有可能带来卡顿,所以要注意这方面的优化

自动图集批处理

这方面相关的官方文档比较少,可以参考:BMFont 与 UI 合图自动批处理,但需要注意,这个文档比较旧了,现在新版本的情况都没有更新上去,只能参考一下。

draw call是openGL的描绘次数
一个简单的openGL的绘图次序是:设置颜色→绘图方式→顶点座标→绘制→结束。
每帧都会重复以上的步骤。这就是一次draw call
通常每一张图片都是一个纹理,一次draw call

如果有两个纹理,那么就需要两次draw call

自动图集批处理所做的事情就是将两张图片放在一张纹理里面进行绘制,这样的话每帧就只有1个draw call

目前creator的自动图集批处理机制为,根据节点renderCmd的顺序,将相邻顺序的所需纹理放入到同一个批次进行处理。实际表现的话大致可以理解为节点树中相邻的节点会进入同一批次。

例如下面这样,场景中只有一个单色精灵时,它的draw call就为1。(这里解释一下为什么左下角显示为2,这是因为左下角的信息显示也需要一次draw call,本文后面所说的drawcall都是去掉这个fps显示draw call的数量)
在这里插入图片描述
下面这个渲染了2个纹理,3个精灵节点,同样draw call也是1,这就是因为自动图集批处理将2个纹理进行了合并处理,将原本需要2个draw call才能完成的事情合并成1个draw call
在这里插入图片描述

以上就是关于draw call和自动图集批处理的简单介绍。

那在实际的项目过程中,既然已经有了自动图集批处理的机制,为何我们的draw call还居高不下?
这是因为并不是所有的纹理都可以放到自动图集批处理中。

使用自动图集批处理有几个限制:
1、单图尺寸小于512512并且大于88
2、渲染buffer必须为MeshBuffer类型的资源才能批处理
3、对节点部分特殊的操作不能进入批处理

第1点比较好理解,第2点的话需要各位自己去看引擎关于各个renderComponent的源码了。
像bmfont label和sprite都是MeshBuffer,所以它们可以进入到批处理中。而像9ScaleSprite,Spine这些所使用的为QuadBuffer,因此没办法进行批处理。

上面记住第1条就好,其他的感兴趣自己可以去研究研究,这里总结了一个表:

  • 11
    点赞
  • 69
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Cocos Creator 中,你可以使用自定义材质来实现顶点着色渲染。顶点着色渲染是一种在渲染管线中对模型的每个顶点进行颜色计算的技术,通过改变顶点的颜色来实现特定效果。下面是一个简单的示例代码: ```javascript // 在节点上添加一个脚本组件 VertexColor.js cc.Class({ extends: cc.Component, properties: { color: cc.Color.WHITE, // 自定义颜色 }, // 在渲染组件的 updateMaterial 方法中设置材质的属性 updateMaterial: function() { var material = this.getComponent(cc.RenderComponent).getMaterial(0); // 获取渲染组件的材质 material.setProperty('u_color', this.color); // 设置自定义颜色属性 }, // 在 onLoad 方法中注册 updateMaterial 方法到渲染组件的 updateMaterial 方法中 onLoad: function() { this.getComponent(cc.RenderComponent).updateMaterial = this.updateMaterial.bind(this); }, }); ``` 在上述代码中,我们假设节点上有一个渲染组件(如 Sprite、Mesh 等),我们通过自定义脚本组件 `VertexColor.js` 来实现顶点着色渲染。脚本组件中定义了一个 `color` 属性,用于设置自定义颜色。在 `updateMaterial` 方法中,我们获取渲染组件的材质,并设置自定义颜色属性。最后,在 `onLoad` 方法中将 `updateMaterial` 方法注册到渲染组件的 `updateMaterial` 方法中,以便在每帧更新时调用。 然后,你可以在 Cocos Creator 编辑器中将该脚本组件 `VertexColor.js` 添加到需要进行顶点着色渲染的节点上。在脚本组件的属性面板中,可以设置自定义的颜色值。 需要注意的是,顶点着色渲染需要使用支持顶点着色的材质和渲染组件,例如使用自定义的 Shader 或在材质中设置相应的 Uniform 属性等。具体的实现方式和效果可以根据你的需求和场景进行自定义调整。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值