求助!关于3d物理游戏的性能优化问题

  • Creator 版本: 3.8.6

  • 目标平台:谷■浏览器h5

在做一个黑洞游戏的3d试玩广告,在性能比较差一点的手机上会卡顿。

目前的思路是用谷■浏览器的性能工具定位问题位置,找到了每帧中消耗性能比较多的地方:


看起来主要性能损耗在这两个方面,需要从这两个方面下手做优化:
1.首先是物理引擎,但是他调进了wasm中,不清楚应该怎么优化?
目前在这方面已经做的优化工作都有:
1.碰撞组中只勾选了确实需要碰撞的物体。
2.让所有刚体创建完成后就进入sleep,等玩家靠近之后才wakeup。
3.因为刚体只需要x、z轴运动,所以设置了LinearFactor.y = 0;
有没有其他方面可以优化的建议呢?
2.这个root.frameMove看起来是调用了cocos的自定义渲染管线,但是他消耗了4ms是不是有些不对?
是不是还有优化空间呀?应该从哪些方向入手呢?

附一张截图:

希望能获得大家的建议!

截图在这里

看你截图,性能挺好

传错图了 :sweat: 我改了一下,这个是运动时的,会感觉一顿一顿的。 :confounded:

物理悄耗挺大,你不已经是局部激活,
按道理没接触到其他,不会有太多消耗

碰撞的形状是圆形吗?

运动发生的动作目前有
1.玩家的黑洞是一个刚体,移动时,直接设置了刚体的位置
2.遍历所有刚体位置,在一定范围内的刚体wakeup,设置useGravity = true,
3.根据玩家黑洞位置设置摄像机位置(这样是比较常见的做法吗?会不会是因为这个动作导致的Root.frameMove时间比较长?)
附个摄像机的设置截图:


4.修改了刚体的 group

1.移相机是最快
2.你遍历碰撞用是什么写法?

  • AABB或球全遍检测
  • 八叉树或其他碰撞筛选
  • 用引擎几何投射做收集

我3D麻将消除就是,几何投射&局部激活

现在是圆柱,我试一下圆形

碰撞现在是 (坐标1 - 坐标2) 再取模长,我研究一下这两种方法 :pray:

试下屏幕外的东西隐藏下 性能会提升很多

用AABB检测激活也可以,全遍历也非常快

试了一下,效果不太明显,root.moveFrame时间没什么变化,怀疑cocos渲染时已经帮忙做了这部分裁剪的工作 :thinking:

不会帮你做裁剪的 你要看下你是否真的隐藏成功了 假如你这个都是圆形都不需要使用物理做碰撞检查

想要一些物理效果,所以才接了物理引擎 :grinning:
我看在我移动摄像头的时候
05700ded-8c9c-4cc0-bf01-01b865bb6ef1
这个面数一直在变化,应该是已经被cocos剪掉了吧?

刚才我试了一下手动隐藏屏幕外的节点,移动的时候会不停修改超出屏幕范围节点的active,有一定的损耗,每帧大概要多消耗1-2ms左右,并且root.moveFrame时间基本没有什么变化。 :thinking:

我之前用的 3.8.3,摄像机会剔除渲染视口区域外的模型

除了物理改碰撞盒为圆形,还可以设置自动休眠,然后关闭光照试试

好吧那时使用的是2.x的2d物理需要自己去隐藏