What are people's favourite physics engine?

Hi. I know it’s not usually right to ask opinion questions like this in these kinds of forums, but I was wondering if ‘generally’ Babylon users gravitated towards any one particular physics engine of the 3 available for any reason? Of course, I’m talking between Ammo, Cannon & Oimo.

In terms of which ones are still actively developed today, which has the best community support & which has the least headaches involved when using with BabylonJS, what are people’s favourites? Is there a consensus on the matter?

Also if anyone has any bits to share about real main differences between them. Will they mostly all come up with the same result?

2 Likes

Hiya K! Wow, 3 days, and no replies! hehe. Everyone is avoiding answering, eh? Amazing.

I’m going to speak for myself, and not on behalf-of any seen/sensed consensus.

I like CannonJS, generally. I also like OimoJS (fastest, least featured, I have much experience with it), but BJS implementation of it… somehow garnered a screwed-up setMotor maxPower that has never been fixed. It use-to rock, but always had some unpredictable restitution (sometimes gained bounce power across scene running-time).

CannonJS has a screwed-up setMass() that sends mesh flying, too… and nobody has fixed that either. That sucks. SetMass() is not used by TOO many people, but some.

Everyone says I am supposed-to like AmmoJS because it is the newest and most feature-packed… even though its slower than others and is missing angle-limits and getAngle on its hinge joints.

That’s my opinion on all three of BJS’s physics engine interfaces. The local big dogs probably don’t like me speaking bad of the physics systems… but too bad. They want us to speak positive all the time, cuz that’s the “corporate way”… never talk bad about “product”.

I don’t think there’s much concern about BJS physics interfaces anymore. All the superstars seem to be concentrating their efforts on something else, these days. Sort of sad, really. It used to be nicely grass-roots 'round here. That died, somehow.

Other peoples’ mileage will surely vary. Probably wise to use AmmoJS. That’s what they tell me.

https://www.babylonjs-playground.com/#1IB3JT#14

There’s CannonJS two-sphere simple test… both spheres… .999 restitution. Red sphere stays active… for a reasonably long while… as it should. Now let’s watch AmmoJS…

https://www.babylonjs-playground.com/#1IB3JT#15

Sleepy-time red sphere. hehe. Junk.

Now OimoJS…

https://www.babylonjs-playground.com/#1IB3JT#16

Better again.

4 Likes

Darn, DK gave me a LIKE for that post? I figged he’d want me hanging from a noose… after those snarky comments I made.

DK, you are a classy and kind chap, that’s all there is to that. (hug)

1 Like

I like you :slight_smile: and honestly I truly appreciate the energy you put in helping everyone (which helps me a lot indirectly :))

3 Likes

Thank you so much! Coming across all these for the first time as a guy in a room somewhere in the world (that I am), I must say the options seem baffling (I’m trying all this out from a Unity-user perspective).

@Wingnut I wonder if I may trouble you further. I’m at my wits end and need help as outlined in my question here

…or, skip my linked question, what I’m really looking for is some shred of evidence that BJS can actually use AmmoJS in a TypeScript/Webpack project without CDN.

1 Like

Hiya k… that other question is FAR over-my-head… but still a great question for the experts. I just do simple little physics experiments in playgrounds or basic JS scenes… no packaging or TS. I’m a Fisher-Price/Playskool-level “bounce box across heightMap” or “fire cannonball” - level experimenter and introductory level teacher.

Mostly, I help youngsters attain their “first physics smile”. :slight_smile:

Stay tuned to that other thread… its a fine question/quest. Big-god webPackers ARE nearby… and all are VERY helpful/kind.

But they are a bit busy IRL right now, and they also might be working on an operational proof-of-concept for your quest… as we speak. I think your question/challenges will help others, too.

@MackeyK24, if I may ping you once more (I owe you a few pings)… have you done Unity-AmmoJS webpack stuff… for your race car game/system? (Mackey24 is a genius, but he won’t admit it) :slight_smile:

I create some test demos
cannon https://playground.babylonjs.com/#H9YK7I#4
ammo https://playground.babylonjs.com/#H9YK7I#1
oimo https://playground.babylonjs.com/#H9YK7I#2
if create more cylinder, ammo is best,oimo have some shake, cannon worst
my question is : How to make cannon or oimo be better ,whitch parameters to adjust to make them more stable.

1 Like

I haven’t found a more recent discussion of this topic, but here’s a data point:

There’s a really neat example of Physics provided with the documentation on Using a Physics Engine.

If you try swapping in the different options for Ammo (which is used by default), at least of writing this, Olmo produces pathologically wrong behavior and Cannon just blows up the whole demo.