Вообщем передо мной встала вполне интересная задача: managed физический движок.
В начале своего пути я копал в сторону Bullet, но порты под .Net оказались кривыми и совершенно непроизводительные: никаких расчетов на GPU,относительно настоящего Bullet; отсутствие мультитрединга, если уж на CPU; да и вообще написаны индусами.
Вариант с враппером был неплох, но это только x86 и забудем о мультиплатформенности. Да, можно компилить буллет под каждую платформу, но это гемор и все преимущества пропадут.
Под мою горячую руку попала интересная библиотечка с названием Jitter, перечислим ее плюсы:
• Every platform which supports .NET/Mono
• Also supports the XBox360 and the WindowsPhone (там некоторые оптимизации в плане мультитрединга)
• Written in pure C# with a clean and object orientated API
• Optimized for low to no garbage collections and maximum speed
• Supported Shapes: TriangleMesh, Terrain, Compound, MinkowskiSum, Box, Sphere, Cylinder, Cone, Capsule, ConvexHull
• Take advantage of multi-core CPUs by using the internal multithreading of the engine
А так же рейкасты, мягкие(упругие) тела, ткани. Если у PhysX CapsuleCast, SphereCast, то в Jitter Вы можете делать каст любым мешем.
Из плюсов лаги физики никак не отражаются на Вашей игре, только если Вы не загрузите процессор под завязку(это трудно сделать).
По производительности можете посмотреть в демке:
http://incubegames.ru/publish/Jitter/WebBuild.html
(на правую кнопку управлять камерой + WASD полет)
Пока продолжаю копать.