27 comments

[ 2.9 ms ] story [ 69.8 ms ] thread
This works in Chrome, but not Safari (macOS 10.14.5).
Thank you for the feedback. I will look into this. Maybe the issue is only related to WebGL rendering.
It indeed works on Safari with WebGL 2.0 enabled (Developer -> Experimental Features)
How do you ensure stability? Based on the "learn more" section, I would presume the soft body is made up of vertices stitched together with damped springs. Is that accurate?
Like the old xspringies from '93.
I presume by keeping the time step small enough? If you go into the integrator settings in the demo and crank the time step, it does go unstable.
The springs are not damped yet, but for the main example, drag is enabled[1]. This continuously slows down the particles.

Drag is computed[2] for all the particles using something similar to the Drag equation[3].

Also, like electricslpnsld said, having a small enough time step helps.

[1] https://github.com/loicbourgois/gravitle/blob/master/fronten...

[2] https://github.com/loicbourgois/gravitle/blob/master/src/par...

[3] https://en.wikipedia.org/wiki/Drag_equation

You might want to look into finite elements. That's a bit harder conceptually, but it's not that hard to implement and should be far more realistic and robust.
Man this is great fun! I got all scrunched up by the circles of doom.
super interesting. Is there a blog post somewhere?

how much better is the performance due to rust/wasm compared to implementing the physics in JS?

Thank you. There is not, but on the readme you can find a few links to learn more[1].

I don't have solid metrics, but using only JS for a previous attempt, I couldn't have 8 points running smoothly [2]. Now it works with 500[3].

I'm not sure whether it's because I have a better understanding of the problems now or just because Rust/wasm is way faster, but what is sure is that Rust makes it easier to write performant code, even if it's harder to learn at first.

[1] https://github.com/loicbourgois/gravitle#learn-more

[2] https://loicbourgois.github.io/treeminor/demo/heart

[3] https://loicbourgois.github.io/gravitle/playground.html?test...

Site freezes on Moto G4, latest Chrome after about a second. At least back button still worked.
This is very nice. It works perfectly on a BlackBerry K2 - with full keyboard support :)
Doesn't work in Chrome : /

E: And started to work, could just have been some fringe issue, the page was just a white screen and didn't respond.

Freezes in Firefox mobile on a LG G5.
Doesn't work in Firefox 67 on Windows.
Freezes Firefox 67.0.4 on Mac.
Firefox 69.0a1 (2019-06-22) (64-bit) chugging along just fine on macOS
Running fine on FF 67.0.4 on win 10 here.
I landed my first job 20 years ago by writing a similar demo. It was in ASM on a 80286, I was rendering a torus in 3D and applying physics using a spring/mass model.
What was the context? Where people still using 286s in 1999?
How do I use this on mobile? The controls mention touchscreen...
Idk if it breaks on other platforms, but Firefox on Android it's working to tap and hold the middle of the screen for the center thruster, left for left thruster, and right for right thruster
It would be possible to use SDL2 with rust for rendering too.
Verlet physics are so nifty. A basic implementation with points, springs, gravity, and a simple floor (a Math.max check) produces stunning motion. Going from trying to tune angular momentum calculations to getting believable rotation 'for free' felt like a revelation