[贾贵对比] 3.3.2 IOS 2D metal问题

更新
根据测试,IOS 3.3.2的3D性能是明显优于2.4.6的

更新

1.2D renderer ms过高:相同的场景在IOS,2.4.6,渲染时间为13ms左右,而3.3.2渲染时间在35-37左右,此问题官方已在优化当中,且在9月底的3.4计划中就有渲染时间的优化计划。

2.内存占用:当场景元素较多的时候(png,只限于2D),内存会爆表,原因是引擎加载资源占用了一份内存,提交到metal后又占用了一份内存,导致双份内存占用。
引擎本身对此问题就是留有优化的,打开即可。
main.js添加如下代码
cc.macro.CLEANUP_IMAGE_CACHE = true;
cc.dynamicAtlasManager.enabled = false; //动态合图根据自身情况开启。
如果效果不明显,可将引擎占用的内存强行释放(需自定引擎)


旧贴,无需看

更新
尝试优化这个问题,经过查看源码,这也不能算一个bug,只是优化没做好,看了与metal相关的部分代码并学习了一点metal,这一块优化也并不简单。
但能用上metal的话,这些尝试是值得的。
捋了捋大致的加载逻辑是这样
一、JS调用load texture的请求->jsb_global_load_image->createImageInfo->callback将纹理的data回调给JS,JS处理后供开发者使用
二、与此同时发起渲染队列请求,将textureInfo(纹理的信息)MessageQueue给metal渲染,metal消费此消息并执行,根据纹理信息newTextureWithDescriptor新开内存创建出mtlTexture。
同时入列纹理填充的消息 ----> copyBuffersToTexture-> [mtlTexture replaceRegion:…];
上传纹理数据至新开的内存,从而导致第一步内存和 新开内存同时存在数据
我一直在尝试让metal使用第一步的内存,避免额外创建,但要捋一遍整体加载逻辑,又牵扯queue,挺麻烦的,望引擎团队做这一块的人能插手进来


测试机:IPHONEX
系统版本:14.4.1

游戏场景如图,在进入游戏场景前即需要大量的加载资源。(图为WEB端表现)
在进入之前,会有预加载的处理,预加载方式如下

将进入场景所需的资源全部加载到内存中,且使用map存索引,之后再使用此图片/资源的时候,在map中查询以复用

测试对比方式如下,登录相同的账号,在预加载完成后进入游戏场景查看内存占用(如果单独对比预加载,3.3.2内存占用大约在1.45G,为了同时查看CPU的占用情况,所以下方截图都是进入游戏主场景后的占用情况)
3.3.2版本内存及CPU占用

2.4.6版本内存及CPU占用

在3.32中,如果将cc.resources.load 更为 cc.resources.preload,那么预加载的过程大约需要470-500MB内存,但进入游戏场景后立刻飙升到1.1GB,就不截图了,虽然相较load降低了一部分,但也在崩内存的边缘了。

对比都是在不使用压缩纹理的情况下,因为热更新的缘故,所以线上项目也并没有使用压缩纹理,不在考虑范围,同时压缩纹理的构建速度太过夸张的慢了,素材少了还行。

4赞

前排围观 :see_no_evil:

话没错。

不过这差得有点多,完全相同的游戏内容,3.x内存和CPU占用等于2.x版的2倍,感觉就是引擎自身优化问题。引擎升级带来的额外损耗如果是一个固定值那还能接受。

3.3确实内存涨了很多,底层设计的时候感觉没关注这个问题,每次升级都要帮官方优化完才敢用到生产环境,每次更新都是性能各种嘴炮的提升,没有看见任何性能测试对比报告,还没有楼主专业

建议仔细看内容后再发表评论。
举例也很不恰当,引擎就是引擎,却拿操作系统说事,一个应用层一个底层,是一回事吗,真就照你所说,占用的1.5G内存都足以流畅运行win10了吧?

整个resources文件夹也不过200MB的大小,单单预加载资源就能造1.5G内存,难道3D就不加载贴图,不加载fbx,UI,png了是吗?

15年注册的老鸟都能回答出这样的帖子来,可笑

独立开发者兼职策划、开发、运维、客服,还要再兼引擎开发是吗?
专业的事就由专业的人来做,这是高效的最基本原则,还是说你天天没事有的是时间去看引擎组的代码并协助找bug?然后你拿着公司给的工资悠然自得一拖就是半个月?

免费使用引擎属实,store里的源码和插件不都是免费的吧?
引擎有用户使用,引擎团队才能拿到投资,这也是事实吧?
引擎表现的优秀,才能拿到更多投资以良性循环,对吧?
有的引擎是通过游戏收益来收费,个人免费,话说游戏如果有了收益拿一小部分给引擎这属于基本商业合作,但凡入这行的都明白,对吧?
免费就是引擎质量的托辞,对吗?
14年的老手了,时刻还把免费放嘴边,改不了就等,你看帖子反馈的问题内容了吗?逗吗?

2赞

cocos的主力在web,不过现在小游戏也不好赚了
反正给我的感觉就是web>原生
然后测试也是一个调调,web好了,原生好不好先放着

2赞

cocos是步子迈得太大扯到蛋了



@panda @jare
在将png交给metal渲染之后,即createMTLTexture之后,jsb_global createImageInfo创建的原始png内存未正确释放,导致内存中每张png都有两份内存占用。请官方完善

3赞

看你发的这,我都不敢用了。。。

mark一下,帮顶

官方还是重视一下吧,遇到商用大型游戏的例子多难得啊

顶一下 看看官方的反馈

mark一下

1赞

mark一下

虽然没用3.x,但还是帮顶

ios 上面一直都卡得很,内存飙升
做原生用这个 很揪心啊

android 相对还行

口口声声说creator3缺大型商业项目案例

真正的原生商业项目出问题了,而且bug开发者自己都找出来了, 官方不吭声了.

这种帖子官方是不会回的,只能等。。。

2赞