同时显示几千上万重复的3d物体,在小游戏平台需要怎么优化才能不卡。

如题,在3d项目生成了重复的成千上万的3d物体,进行了合批处理,打包到微信之后,帧数一直在降低,但是drawcall很正常,vert和tir比较高。请问有什么办法可以处理吗?

降面, 另外drawcall 不是游戏的唯一指标, 太低drawcall意味着cpu压力很大
另外成千上万个你也不可能全部同时渲染, 可以区域划分, 把镜头外的active = false
如果镜头外的也有逻辑, 就逻辑和渲染分离, 这就考验你代码设计能力了

因为游戏镜头是固定的 成千上万的都需要处理在镜头。类似于一个全镜小地图,上面ai和自己走的痕迹。 :joy:

那镜头固定,你模型和贴图就不需要太精美了, 那更需要表现和逻辑分离, 不要全部对像加都一个update, 直接像ecs那样, 连辑层只要处理有变化的对像就好, 另外for 循环不要一帧到底, 分帧一批一批运行

先上个图,看看左下角统计,性能消耗点在那


您看看。那些脚印是这样的3d片

这些都是我生成就放那不管了


就是这些小脚印
游戏久了 生成的多了 就掉帧

估计就是3d物体多了 面太多

脚印肯定不能用模型,用decal,参考链接:CocosCreatorDemos: 大道至简,殊途同归。 CocosCreatorDemos主要是整理并实现了一些常用的用户需求示例,希望可以给用户提供一些使用灵感。 CocosCreatorDemos mainly organizes and implements some common user‘s needs demos, hoping to provide users with some inspiration. - Gitee.com

1赞

好的 感谢 这就研究一下

你玩其它游戏,脚印时间久了都是会自动消失的 :joy:

目前是这种解决方式 但是这边需求还是要完整的留着

脚印片不应该用这种方法处理, 你可以参考一下网上unity 如何处理雪地留下印,
弄一个camera, 然后clear Flags改为Don’t Clear, 镜头的内容都只渲染脚印并投射到render texture上, 然后一开始a camera 渲染, 其间生成一个脚印就下一帧销毁, 因为clear Flags = Don’t Clear 你会发现上帧渲染的脚印像还在, 最后renderTexture作为地板的纹理就好

如果脚印要按时消息, 那就两个camera, 其中一个投影成黑白色, 然后shader 每帧把rgb值下降, 然后跟另一个镜头的脚印混合(就是裁剪图原理)

这种方法 你每车都只有一个脚印节点, 就不会成千上万过影响性能了

11赞

好的 感谢大佬。

必须砍需求 :joy:

最高效做法,你是懂行的

牛逼6666

你是说自己写 code,判断node是否在镜头外,镜头外面的active =fasle?
但是我感觉这功能应该引擎提供比较好啊?

不太明白你说啥, 我方法只是用一个镜头拍下所有脚印, 然后投影到一张rendertexture上, 然后把这张texture做为一个平面的纹理就好