2D小游戏性能优化天花板,复制几个文件搞定!绝了!
共 4208字,需浏览 9分钟
·
2024-08-02 14:53
本公众号由以下老铁赞助,感谢他们❗️
01 引言
众所周知,小游戏非常强调用户体验,除玩法、题材、美术效果之外,个人认为最重要的一点就是游戏性能体验!
然而玩法、题材、美术这些,越是做的好、做的多,往往又与游戏性能体验相冲突,结果背道而驰。
如果游戏没玩起来卡顿、不流畅,所有对项目的心血付出,用户只会体验到——不爽!
项目做到最后,作为程序只会感受到金玉其外,败絮......哪啥的。
我就不说了,过来人都知道,那种滋味不好受,只会让人无比的焦虑与挫败感!
但是,游戏策划和美术同学,则很有可能是完全相反的感觉。
他们会觉得,越来越多的玩法创意、美术效果在尽情释放,自己开发的游戏那是步步精心,独一无二,都快要上天了。
如果游戏发出去不行的话,主要是程序无法实现他们所要的效果和体验。最为可怕的是,老板也这么想的。
啊!那,要怎么办呢?我要变强!
我想,这是绝大多数人的想法。
不停地学习!学习!再学习!
功力大涨之后,一双慧眼,终于可以发现项目的诸多问题。
但,项目已经开发一大半,甚至已经被迫上线,没有机会,也不可能从再头来啊!
以上,是我真实遇到过的经历,而且还不止一次!
......
不知道,你遇到过没有呢?
02 解决方案
这里,我不得不佩服 Cocos 社区一位技术大神:98K!
98K有一套游戏性能优化的理念,超级牛逼——“将游戏内容开发,与性能优化分离!”
98K大佬十多年来,一直在从事游戏性能优化方面的工作,对引擎源码、算法等有过长期而深入的研究。
“将游戏内容开发,与性能优化分离!” 这是什么意思呢?
再直白一点说就是:如果你已经开发好一个游戏,无需修改业务代码,只需要将性能优化相关的代码,放到项目指定位置就OK了!
这就是今天,晓衡推荐的《98K多纹理合批》它为大家提供适应性更强的 2D 小游戏性能优化方案,可解决日常见 2D 游戏性能问题。
可以这么说,它将让你安心做好 H5 小游戏内,下面是对本多纹理方案的实际测试效果:
上图是 Cocos 官方的一个 2D DEMO 工程,背包界面中包含100个图标元素,开启98K多纹理优化后,直接将 867 的 Draw Call 降到了 8 个。
http://wechat.xhserver.com/MultBatch2D/index.html
需要注意的是,H5链接代码经过混淆,性能会损耗,仅作为大家体验,真实性能以小游戏环境为准。
图文背包测试
我们再看一个更极端一点案例,包含 500 个图标元的背包,请注意一下顶部 FSP、DC 数值:
左图:多纹理合批 + 使用大图集 fps: 61.62 | drawCall: 5 | render(ms): 8.69
中图:多纹理合批( sprite 散图 ) fps: 61.88 | drawCall: 297 | render(ms): 10.79
右图:关闭多纹理合( sprite 散图 ) fps: 47.71 | drawCall: 3990 | render(ms): 19.76
通过上面测试可以看出,在开启98K多纹理合批后,游戏性能明显上升。而这还仅仅是一个静态的,游戏背包界面。
动态战斗场景测试
我们再看一个 1000 角色运动遮挡的案例。先给测试结果,开启多纹理合批,均能保持 60 fps,不开启的话仅 28 fps。
这个案例,可以用来模拟游戏动态战斗场景的性能。
左图:多纹理合批 + 使用大图集 fps: 61.62 | drawCall: 6 | render(ms): 9.25 ms
中图:多纹理合批( sprite 散图 ) fps: 62.50 | drawCall: 233 | render(ms): 12.21 ms
右图:关闭多纹理合( sprite 散图 ) fps: 28.14 | drawCall: 5015 | render(ms): 33.67 ms
按常规的做法,游戏中多达 1000 个角色最少要超过 5000 的 DrawCall,这将产生多少次的渲染被打断。
而开启多纹理合批后,将 5000+ 的DrawCall 直接砍到仅 6 次,如果你开发的是 MMO 类的游戏,这个案例非常具有说明性。
测试分析总结
通过以上测试分析,我们来小结一下:
(多纹理+合图) > (仅多纹理) > (祼奔),上面体性能优化效果,有高到低排列。
多纹理合批,不开启合图,散图情况下也能保持60fps以上,DC也能暴砍数倍,性能明显改善。
开启引擎合图(等同打大图集),DC得进步一的降低,render时间消耗也低明显,这样能为游戏逻辑腾出更多性能时间。
提示:使用多纹理方案,结合打大图集+引擎动态合图,进一步降低DC,性能发挥到极致。
现在可以再一下概括,98K多纹理合批具体功能:
对默认精灵材质DrawCall能下降N倍到8倍
开箱即用 ,不影响工程,无需修改引擎源码
解决图文混合不同纹理带来DrawCall问题
支持全图片格式多纹理合批包括压缩纹理
03 极致上手体验
插件、框架功能强大是一会事,如何能无伤害整合到自己的项目,能无痛使用上才是关键!不然再牛逼,也只能看看并不能产生多大的价值。
而 98K 多纹理优化方案,使用方法简单至极,就算你不会代码也能使用上。
资源摆放在工程 resource 目录下,剩下的交给98K
项目设置 BATCHER2D_MEM_INCREMENT (建议1440)
你看是不是,任何人都能用得上?正如文章开头所说的,做到了“将游戏内容开发,与性能优化分离!”
98K多纹理合批上架 Cocos Store
原价¥499
新品上架仅需¥199,限时7天
-
https://store.cocos.com/app/detail/6587
体验链接:
-
http://wechat.xhserver.com/MultBatch2D/index.html
温馨提示:购买用户,文末可以加开发者微信,可加入98K技术交流群,与更多开发者一起分享经验,还有机会享受更优惠活动!
04 小结
今年小游戏流水疯狂,目前已经开始走向中重度,随着游戏体量和复杂度的增加,保证游戏的性能体验,开发要面临以下问题:
复杂UI系统,背包系统,多层的图文混合,由于不同纹理会打断绘画,容易产生大量DC。
为了节省GPU内存,采用压缩纹理方案(不支持动态合图)。实际项目中,未必能全部打上整个大图,容易会产生大量DC。
大量的不同精灵,序列帧精灵播放变换,角色各种层级设计,各种技能buff的层级,这是战斗常见的需求,也是不好控制,很容易产生大量DC。
大地图设计2D ,通常是按类型分层打的大图,而且图量众多,打一张大图也是不现实,各种地编层级和动态物体增删,同时还要兼顾与角色之间排序的遮挡关系,不可避免容易产生大量DC。
高性能多纹理合批,有效的解决上面这些问题,它是一个头部厂商2D性能决方案, 像百炼英雄,江南百景图......,这些成功的游戏项目,都在采用多纹理合批方案。
除上面说的游戏外,对现在流行 2D 游戏,例如:塔防,弹幕,割草,肉鸽,背包,打僵尸......也能提供良好的 2D 精灵合批性能。
上面是 98K 大佬微信,欢迎咨询交流!
晓衡的愿景是助力 1000 位个人开发者