|
本帖最后由 largewc 于 2013-10-31 15:15 编辑
Tempestglen 发表于 2013-10-31 14:31 ![]()
既然你说了刚体物理,一定知道ODE被良好的prefetch提升了60%性能。而我们都知道prefetch对随机访存一点用 ...
ode我更熟悉了,我们的物理引擎就是基于ode改的,ode性能不如bullet,我们目前是兼容ode和bullet。
我刚才说了物理前端和后端,前端是碰撞检测,后端是物理计算
有一个概念可以普及一下,物理引擎基本上是碰撞,然后计算速度,这里就有一个悖论,因为球掉到地面上,按照这样做永远无法稳定下来,它永远是掉到地上,然后弹起,永远都是抖动的,不能稳定
所以ode用了一个简单的办法,就是后端计算默认计算20遍,取一个影响平均值,这个办法可以有效避免抖动问题,使得场景固定下来。
bullet后端研究的不多,但是肯定不是ode这种办法,应该通过巧妙的一些算法回避了计算20遍。
ode这个20遍是不进行前端碰撞检测的,所以ode的后端计算也很耗时,这个适合于一般教育场景,可以肯定的是,游戏肯定不会用20倍计算的办法,通常会通过一些特殊手段,当速度低于一定程度,就认为是固定的来回避抖动。
我们的游戏ode版本只给了一遍,20这个参数只能是一些demo级别的软件可以接受。
相信这个测试是用默认ode的参数来的,最后默认的20遍计算对于prefetch来说那是固定的,内存已经固定化了,当然不存在问题。前端的碰撞检测仍然无法做到明显的加速。
但是这个办法太笨了,收费物理引擎一般不会用这种办法,bulllet是因为amd投资免费了吧,bullet水平比ode还是明显更好的。 |
|