点击上方亿元程序员+关注和★星标
引言
“玩家反馈这个界面好卡啊!”
“测试机帧率都掉到个位数了!”
“是不是因为DrawCall太高了?”
最近某个策划同事总是发出类似这样的灵魂拷问。
不知道是不是上次游戏卡的时候给他提了一下DrawCall这个专业名词。
并且告诉了他在哪里可以查看这个数值:

结果一发不可收拾,DrawCall就成了他的口头禅。
贴心的他,有一次还发来一条商城链接,“kkk动态合批”,“不行你就用这个吧,99也不贵”。
大佬,有没有什么好办法把DrawCall降下来的同时,还能省下99?
哈喽大家好,感谢上面粉丝提供的素材。
看完这个故事,同为程序的你,是不是心头一紧,五味杂陈?
一方面,“DrawCall”这个概念已经深入人心,不再是程序自己的黑话。
另一方面,你又哭笑不得,因为这感觉就像:“车开不动了,别人就问是不是发动机的螺丝没拧紧?”
这一期,我们重点聊一下DrawCall。各位看完能不能省99不好说,但是可以有一定的了解。(注意,游戏卡顿其实原因很多,本文主要探讨DrawCall)
1.什么是DrawCall?
DrawCall是CPU通过图形API(如OpenGL/DirectX)向GPU发送的绘制指令,包含网格数据、材质参数和渲染状态等信息。
那为什么DrawCall高会卡?
可以这么通俗地理解:
把策划比作CPU,把程序比作GPU,那么下单一次的完整需求,我们可以比作一次DrawCall,程序能很快并且很好地完成需求(DrawCall低,游戏不卡)。
但是,如果策划下单需求之后,分多次再下单调整UI、修改玩法、补充内容,不停地打断程序的“施法”,导致需求迟迟不能完成(DrawCall高,游戏卡顿)。
因此我们需要想办法把DrawCall降下来,回到上面的例子就是把策划提的需求完整化,一次提完,实在不行就去解决策划,毕竟瓶颈在CPU。
那有什么办法可以将DrawCall降下来呢?
2.老规矩,上例子
接下来给大家演示一个简单的降低DrawCall的例子,但是不同的项目有不同的难度,本例子只做演示。
1.准备资源
首先还是准备一下资源,有美术搭子的找美术搭子,没有美术搭子的找AI搭子(下期给大家分享一下)。

2.拼UI
简单拼一下UI,期待哪天AI能够彻底解决拼UI问题,那会减少多少矛盾啊!

3.写代码
首先绑定一下资源和脚本,包括背景、图标和名字。

然后创建列表项,按顺序设置背景、图标和名字。

运行之后,我们可以看到不做任何处理的情况下,一共19个DrawCall(Canvas占1个)。

下面我们尝试一下降低DrawCall。
4.合图
上面每渲染一个节点,便产生一个DrawCall,想要不额外增加DrawCall,相邻的两个渲染对象的材质与贴图要相同。
讲到这里,大家应该知道要打图集了。
给大家列举2种方式:
1.手动合图
手动合图我们通常使用第三方软件TexturePacker。
使用方式也比较简单,将散图拖进去,修改格式和路径,然后发布精灵集即可。

生成的图集:

最后通过脚本绑定图集,并且更换为图集中的图片:

2.自动图集
自动图集 作为Cocos Creator自带的合图功能,可以将指定的一系列碎图打包成一张大图,具体作用和TexturePacker的功能很相近。
我们可以通过右键要使用自动图集的图片目录-创建-自动图集配置使用。

生成的auto-atlas文件:

注意:预览项目或者在Cocos Creator中使用碎图的时候都是直接使用的碎图资源,在构建项目这一步才会真正生成图集到项目中。意思就是:
自动图集需要发布之后才能看到效果
5.查看效果
图集处理好之后运行看下效果,使用图集之后,DrawCall降低到13个了。

很明显,虽然背景、图标合并了,但是项与项之间的渲染被Label打断了。
6.处理Label
因为我们的渲染被Label打断了,那么我们简单粗暴地将Label移走不就好了?
于是我们尝试一下,将Label从项中移出来。

这样我们的DrawCall降低到8个了。

有什么办法可以合并Label的DrawCall吗?
答案是有的,我们可以设置Label的文本缓存模式为BITMAP。

这样我们的DrawCall就降低到3个了。

3.进阶
现实项目并不能像示例中那么简单粗暴,可以采用以下思路:
在渲染前阶段 (EVENT_BEFORE_DRAW)
- 记录原始节点结构
- 创建新的层级结构
在渲染后阶段 (EVENT_AFTER_DRAW)
- 恢复原始节点结构
结语
看完的小伙伴,是不是觉得99非常值了。
卡顿的原因其实还有很多,策划不喊DrawCall了,小伙伴们知道还可以喊哪些吗?
本文源工程可通过私信发送 DrawCall 获取。
我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。
AD:笔者线上的小游戏《打螺丝闯关》《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》《方块掌机经典》大家可以自行点击搜索体验。
实不相瞒,想要个赞和爱心!请把该文章分享给你觉得有需要的其他小伙伴。谢谢!
推荐专栏:
点击下方灰色按钮+关注。

237

被折叠的 条评论
为什么被折叠?



