CocosCreator游戏性能优化

为什么合批能提升性能?

  • 游戏引擎绘制一个游戏页面,首先需要遍历此页面中的所有需要绘制的物体,然后把这些物体提交给GPU来进行绘制。大体流程如下
  1. CPU 准备绘制所需要的数据:位置、尺寸、纹理等等
  2. CPU下达绘制命令(draw cmd)
  3. GPU 渲染物体,显示出来
  • 如果页面中有100个物体需要提交给GPU进行绘制,如果一个一个的提交,则需要执行100次绘制过程。1和2 会多次频繁调用,且、1和2开销也是比较大的,3会不饱和:类似一车次高铁只乘坐一位乘客。
  • 合批:把游戏中场景中的多个物体合并到一起,一次性传递给GPU进行渲染。如果我们把100个物体合并成一个批次,只需要执行一个1和2。虽然和增大3的开销,但是GPU的性能比较的强,综合下来,可以大大的提高渲染性能。

如果查看系统的DrawCall?

通过CocosCreator 的show fps 即可查看Draw call次数。
在优化之前需要先清楚DrawCall次数的分布情况。

  • label +1
  • button +1。相邻button节点不增加
  • sprite +1。相邻sprite节点不增加,sprite默认开启了packable。
  • button和sprite 如果被label间隔开来,都会增加。label打断合批。
    - 最直接的查看某个节点占用的dc次数,直接显隐目标节点,对比前后两次dc变化即可。

合批常用的技术原理和缺点

  • 静态合批
    • 引擎将静态(不能移动)的可以合批(具有相同材质)的物体通过预先计算,生成一个包含这些小物体的大物体,然后把这些大物体一次性传递给GPU 进行绘制。 相当于多个小物体一次性进行绘制。
    • 优先:提升渲染效率
    • 缺点:预先计算,增加启动时长。计算出新的大物体,可能会因为模型顶点增加,增大内存的开销。
  • 动态合批
    • 绘制的时候,CPU计算出这些相同材质物体的每个顶点*世界矩阵=>世界坐标,加上材质,提交给GPU。
    • 优点:能合批,提高渲染效率。
    • 缺点:实时占用CPU,增大了CPU的开销。因此进行动态合批的物体,顶点数目不能过多。当增加的CPU开销 > 合批带来渲染提升 =>导致性能不增反降。
  • GPU Instancing 合批
    • 同一个物体的N个实例的情况,我们提交一个物体的Mesh给GPU绘制出来N个实例。这N个实例可以拥有不同的位置、旋转、缩放等等。

3D优化DrawCall注意点

2DGUI优化DrawCall注意点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值