物理碰撞性能很低,如何优化?(CocosCreater 3D v1.0.1)

60个刚体,运行起来iPhone8P帧率不到10,没法玩啊。求优化方法

emm,我这边也做了一个 子弹打小人的游戏,同屏幕大概200个刚体是没有问题的。我怀疑你的游戏帧率很低不是刚体的原因导致的。你看看这个地方每帧花在物理上的时间。

好 我再看看,你这22帧能流畅玩么


目前来说,3D 使用的物理引擎Cannon.js有个致命问题

创建过多的刚体,我这边实验了一下,大概500个 左右吧,会挂。官方也确认了这个Bug。你使用的时候要注意一下。

我擦,牛逼了。我同屏200个刚体,物理逻辑耗时在20ms-40ms徘徊(这个其实也不能接受)。但是我有敌人还有子弹呢。你这个啥也没干,怎么会有90ms。坐等引擎组来解决这个问题

物理耗时20-40,加上渲染和逻辑,帧率估计30以下,玩起来就卡了:no_mouth:

你那个问题解决啦?要删帖子?

咦 ,没啊 我删的是一条回复呀

你好,可以给下你测试的 Demo 吗

1赞

Demo.zip (430.0 KB)

@jiaxin 你看看辛苦啦~

1赞

maxSubStep 物理每帧模拟的最大子步数,默认为 2
deltaTime 物理每步模拟消耗的时间,注意不是每帧,默认为 1 / 60

PhysicsSystem这两个属性,我不太理解,有大佬能通俗的讲一下吗?
不知道这两个属性对性能有什么影响

一般的物理模拟有两种方式:

  • 不考虑实际时间的固定模拟
  • 根据实际时间进行的插值模拟

现在采用的是插值模拟(目前还没有通过属性设置,后面版本会有),每帧会固定执行一次物理模拟

这是因为每帧花费的实际时间是不一样的,为了和实际时间同步,就需要根据 deltaTime 跟实际时间的比例,去执行相应的子步数 ,因此需要设置一下最大的子步数。

比如某帧花费了 1/30 的时间,如果 deltaTime 是 1/60 ,maxSubStep 是 2,哪么就会执行两步来达到实际所花费的时间

所以,帧率低的时候,花费的实际时间就长,哪么物理模拟就需要通过执行多次步数才可以达到实际花费时间

计算量更大了,帧率就会更低

1赞

@吴彦祖
发的demo工程,能分析出问题吗?希望不是底层Cannon.js 的问题,还有优化空间。
有任何可行的手段,望告知一下我来试试 [抱拳]!
如果目前还没有好的方案也告知一下 。

目前还不太清楚,应该和 ios 系统有关

安卓机帧率比iphone高点,但也不到30帧,玩起来也是卡。

@jiaxin
现在用代码控制延时enable模型的刚体组件,减少每帧处理的刚体数量。
android上可以稳定50帧左右了,但是iPhone上依然只有15帧。
你说的跟ios系统有关能具体找出原因么

iOS 环境下不支持 jit,对物理引擎这种重计算的模块非常不友好

嗯,jit这个就没法优化了,只能想想别的办法。谢谢大佬[爱心]!