每次游戏卡的时候,策划总问:是不是DrawCall太高了?

点击上方亿元程序员+关注和星标

引言


玩家反馈这个界面好卡啊!

测试机帧率都掉到个位数了!

是不是因为DrawCall太高了?

最近某个策划同事总是发出类似这样的灵魂拷问。

不知道是不是上次游戏卡的时候给他提了一下DrawCall这个专业名词。

并且告诉了他在哪里可以查看这个数值:

结果一发不可收拾,DrawCall就成了他的口头禅。

贴心的他,有一次还发来一条商城链接,“kkk动态合批”,“不行你就用这个吧,99也不贵”。

大佬,有没有什么好办法把DrawCall降下来的同时,还能省下99


哈喽大家好,感谢上面粉丝提供的素材。

看完这个故事,同为程序的你,是不是心头一紧,五味杂陈?

一方面,“DrawCall”这个概念已经深入人心,不再是程序自己的黑话。

另一方面,你又哭笑不得,因为这感觉就像:“车开不动了,别人就问是不是发动机的螺丝没拧紧?”

这一期,我们重点聊一下DrawCall。各位看完能不能省99不好说,但是可以有一定的了解。(注意,游戏卡顿其实原因很多,本文主要探讨DrawCall

1.什么是DrawCall?

DrawCallCPU通过图形API(如OpenGL/DirectX)向GPU发送的绘制指令,包含网格数据、材质参数和渲染状态等信息。‌‌

为什么DrawCall高会卡?

可以这么通俗地理解:

把策划比作CPU,把程序比作GPU,那么下单一次的完整需求,我们可以比作一次DrawCall,程序能很快并且很好地完成需求(DrawCall低,游戏不卡)。

但是,如果策划下单需求之后,分多次再下单调整UI修改玩法补充内容,不停地打断程序的“施法”,导致需求迟迟不能完成(DrawCall高,游戏卡顿)。

因此我们需要想办法把DrawCall降下来,回到上面的例子就是把策划提的需求完整化,一次提完,实在不行就去解决策划,毕竟瓶颈在CPU

那有什么办法可以将DrawCall降下来呢?

2.老规矩,上例子

接下来给大家演示一个简单的降低DrawCall的例子,但是不同的项目有不同的难度,本例子只做演示。

1.准备资源

首先还是准备一下资源,有美术搭子的找美术搭子,没有美术搭子的找AI搭子(下期给大家分享一下)。

任劳任怨的老员工

2.拼UI

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

3.写代码

首先绑定一下资源和脚本,包括背景、图标和名字

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

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

下面我们尝试一下降低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个了。

有什么办法可以合并LabelDrawCall吗?

答案是有的,我们可以设置Label的文本缓存模式为BITMAP

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

3.进阶

现实项目并不能像示例中那么简单粗暴,可以采用以下思路:

在渲染前阶段 (EVENT_BEFORE_DRAW)

  • 记录原始节点结构
  • 创建新的层级结构

在渲染后阶段 (EVENT_AFTER_DRAW)

  • 恢复原始节点结构

结语

看完的小伙伴,是不是觉得99非常值了。

卡顿的原因其实还有很多,策划不喊DrawCall了,小伙伴们知道还可以喊哪些吗?

本文源工程可通过私信发送 DrawCall 获取。

我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。

AD:笔者线上的小游戏《打螺丝闯关》《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》《方块掌机经典》大家可以自行点击搜索体验。

实不相瞒,想要个爱心!请把该文章分享给你觉得有需要的其他小伙伴。谢谢!

推荐专栏:

知识付费专栏

你知道和不知道的微信小游戏常用API整理,赶紧收藏用起来~

100个Cocos实例

8年主程手把手打造Cocos独立游戏开发框架

和8年游戏主程一起学习设计模式

从零开始开发贪吃蛇小游戏到上线系列

点击下方灰色按钮+关注。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

亿元程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值