DrawCall 究极 动态合批 优化 (优化内存占用!)

嘿嘿时隔一年多我又回来了 上次带着同步 这次 一样还是重磅功能 名字叫做: (DrawCall 究极 动态合批)
直接上链接 : http://kyu.jisol.cn:8886/down/vcKfKn3eimwK

开始啰嗦:
这从我前几天一个小Demo说起 在做这个Demo的时候 想着今年找工作老是问DC优化 所以这个Demo我非常注重DC 也跑去充分了解DC 然后 我最终决定使用动态合图的快乐~

在写完Demo 测试时候发现一个严重的问题 因为我Demo是一个动态加载地图 经常移除移入节点 并且字体用的是 BITMAP 然后 高频率的加载地图 莫名导致 DC上升 和 内存上升问题

通过Spector.js发现动态合批并没有最优解 每次移除节点时候动态图片还存在移除节点的图片 尤其是文字 如果要重置动态合批则需要加载新的场景 但是大部分公司的框架加载场景都是预制体加载 很少加载场景 在我看来 动态合批如果没有用好 甚至不如 不合批 所以大部分项目使用自动合批+渲染工具(渲染前修改节点位置 渲染完改回来 有时候 效果不好)

所以经过我两天两夜的爆改引擎 已经达到了下面效果:
1.BITMAP 文字复用 引擎会尽量使用之前的文字贴图
2.贴图没有被使用会自动从合批中释放

效果视频: https://demo.kyu.jisol.cn/engine/录制_2023_05_30_00_50_23_85_x264.mp4

小Demo网址: Cocos Creator | WorldCard (jisol.cn)

提示:
1.建议酌情使用因为没有系统测试呢 (还可以优化不过我着急分享出来)
2.随便用哈 不过前提是以后面试遇我别问我DC哈
3.官方赶紧优化动态合批呗~
4.下载引擎的老铁请留言哈~
5.太晚了先不分享修改内容(有空分享) 自己比对改动地方哈

8赞

这个也做了 label 纹理复用,但是对于删除 texture 纹理,只能记录删除区域占用的大小和位置(复用的时候也只能绘制比这个区域小的图片),如果完全重绘,频率一高性能还不如直接保留纹理

删了减少内存 不删省去初始化纹理 看场景 到时候我写一个参数比如没引用纹理空间大于多少比例在删除不需要的纹理

能分享下实现原理吗?这个优化真的很有用,感谢分享

好的不过要找时间分享。

替换引擎教程
https://demo.kyu.jisol.cn/engine/%E5%BD%95%E5%88%B6_2023_05_30_13_08_24_251_x264.mp4

1赞

内存以及CPU这两块有前后对比数据么? 单个试验小界面不敢用

支持原生吗?

打不开呀大佬

F12,然后点下左上角箭头,然后点链接,再点elments页切里的链接就自动下载了

因为不适用于节点多次更改的场景 所以我没有进行弄了哈哈哈哈哈

1赞