(duck and cover! Long post ahead!)
Hi Adam, welcome to the BJS forum… good to have you with us. What an amazing pile of questions you have presented us. We have had discussions here before… you know… "WHEN should something we brute-math-animated, and WHEN is it better to let a third-party physics engine do the animation based-upon real-life environment forces.
End objective is everything. Want to drive your car across a heightMap of hills, and have it act real-life correctly? Then physics engine all the way.
OR, do you want to keep the car on-the-blocks and just wiggle the suspension linkage using some simple math? Can do, and it will look fine, but it will never cross the heightMap looking “real”.
A quick note. BabylonJS has no fancier “joints” than any other webGL framework. For physics engines, we have joints, and springs, and motors. For pure home-grown math and boundingBoxes… we have parenting, centers, dimensions, pivotPoints… and manually-commanded springs and motors… much less automated than a physics engine would provide.
It sounds/looks to me like you will be making lots of minor edits/tweaks to your suspensions. You haven’t really mentioned springs and shocks (dampers)… but I think you will be wanting those, eventually, too.
Here’s what others MIGHT do…for a suspension edit/mod. Remove all physics impostors (mesh ghosts), motors, springs, dampers… ALL the physics stuff that WAS on there, then re-“grow” the linkages and adjust pivotPoints and parentings. Some of the models could be up-scaled or down-scaled, but mainly, re-“derive” the config of the NEW suspension… ALL based-upon the change that was made.
AFTER it has been re-assembled with the new “span” somewhere, re-physics it again… adding all the impostors, frictions, masses, joints, springs, dampers, everything… so not only does it LOOK correct… it also acts correctly when on the track or in the hills.
As you may notice, I didn’t say ANY of this is “automated”. You will be perfoming many sequences of actions during an edit. You must follow a procedure… and a rather lengthy one… during that de-install of all physics, rebuild mesh per modification, and re-install all physics. Not automated at all… until you code-up the functions that do the automation.
By using this method… the car is always ready for the blocks or for the track. You can impulse if you like… watch the suspension bounce and flex… PER ACTUAL algorithms derived from REAL metal springs. Your shocks/dampers/brakes will be fluid, and take-into-complete-consideration… momentum/inertia, traction, center of gravity, mass… ALL of which you would have to do MANUALLY… by writing formulas… if it weren’t for the help of the physics engine.
So, do you want to stay on-the-blocks and off the track… animating linkages that move other linkages and pivots because of parenting (kind of yawn-ful). Or do you want to keep your car… ready for the test track and hill-climbs (exciting and nice realistic accidents/failures)?
Avoid the physics engine, and you remove substantial realism levels… but get back SOME ease of suspension edits (still plenty challenging with boundingbox measurings and moving pivotPoints and rotations). When you “accept” using the physics engine (we honor some Oimo, Cannon, and Ammo partially at easy-level, FULLY at native level), you get BIG returns and quite a few more headaches at the same time.
Sorry if this is bad news. I don’t think BabylonJS has any “joints” that threeJS doesn’t have. They use the same physics engines as we do, I suspect. I think both systems will have the same general procedure… place all the linkages/items in proper worldSpace… and then loosely assemble using set pivots and parenting, OR… populate the mesh with meshImpostors, joints, and springs… each which already know how to BE rigidBodies, joints, and springs (they have the formulas for those things… built-into them, by others).
Again, our joints feature comes from 3rd party physics engines (except for parenting/setPivotPoint and similar)… which threeJS allows. And it is likely that ThreeJS does ITS joints… just like BabylonJS does them. Without using a physics engine add-on (easily included in a BabyonJS scene, but not authored by BJS folk), there will be very little done “for me”. A physics engine is designed to do LOTS of “for me” IF you connect its pieces together properly, and give it some needed values… like friction, mass, spring-stiffness/damping, parts-lengths, bounce-amount, etc.
Have I been any help? Sorry if this is bad news. The reason car/plane accident re-construction simulators are SO expensive? THIS stuff.
Let’s hope others reply, too, because… I’m not sure I did a very good job.