StriverТа вобщемто никаких особо хитрых оптимизаций не делал, всегото изменил две строчки в своем коде:
Если не сложно, напиши, что получилось после всех оптимизаций, какая скорость?
1. Заменил world.step(dt / n) на world.quickStep(dt / n)
2. И добавил сразу после инициализации world вот такую строку
world.setAutoDisableFlag(True)
Здесь можно было бы еще поиграться с функциями
setAutoDisableAngularThreshold(threshold)
setAutoDisableLinearThreshold(threshold)
Но мне эти 2 функции не нужны были, т.к. размеры объектов у меня близки к единице и мне подошли умолчательные значения этих параметров.
space = Space(type=1) # Create a HashSpace
Этим пользоваться пока что не стал, т.к. в моем случае от этого мало толку. У меня все объекты в одной большой куче, думаю если их раскидать по маленьким кучкам то от HashSpace будет гораздо больше толку. Конечно если раскидать по маленьким кучкам, то и без HashSpace скорость увеличится, т.к. меньше столкновений будет :) Но всеравно от применения HashSpace в такой ситуации скорость должна еще больше возрасти. Я правда не проверял на сколько возрастет скорость благодаря HashSpace если объекты разбросаны по маленьким кучкам, т.к. мне нужна одна большая куча :)
На данный момент у меня 50 объектов (25 сфер и 25 кубов), все они лежат какбы в аквариуме, т.е. куча разползтись в стороны НЕ может. В общем получаю около 30 fps. А до оптимизаци в такой же ситуации было гдето 2-5 fps. Наибольшую роль в оптимизации сыграла функция quickStep, причем если добавить объектов, то выгода от использования quickStep будет только возрастать, т.к. она на много лучше маштабируется чем step.
Вот и все, мне пока хватает скорости. В будующем, если сложность сцены возрастет и опять будет тормозить, тогда буду думать как еще оптимизировать.
P.S. Если надумаешь разбираться с pyode, то имей ввиду документация по pyode довольно скудная, лично мне очень помогла разобраться документация по ode (по ode даже русская есть).