
Show HN: Gravitle – 2D soft-body engine built with Rust for the web - bourgoisloic
https://loicbourgois.github.io/gravitle/index.html
======
markdog12
Site freezes on Moto G4, latest Chrome after about a second. At least back
button still worked.

------
gitgud
How do I use this on mobile? The controls mention touchscreen...

~~~
connicpu
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

------
slavik81
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?

~~~
bourgoisloic
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...](https://github.com/loicbourgois/gravitle/blob/master/frontend/index.js#L12)

[2]
[https://github.com/loicbourgois/gravitle/blob/master/src/par...](https://github.com/loicbourgois/gravitle/blob/master/src/particle.rs#L341)

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

~~~
joelthelion
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.

------
xchip
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.

~~~
electricslpnsld
What was the context? Where people still using 286s in 1999?

~~~
michaelgrafl
Nope. Probably meant to say 30 years ago.

------
neetodavid
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

------
andai
Man this is great fun! I got all scrunched up by the circles of doom.

------
rgovostes
This works in Chrome, but not Safari (macOS 10.14.5).

~~~
boardwaalk
It indeed works on Safari with WebGL 2.0 enabled (Developer -> Experimental
Features)

------
emilfihlman
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.

------
Narishma
Doesn't work in Firefox 67 on Windows.

~~~
faitswulff
Firefox 69.0a1 (2019-06-22) (64-bit) chugging along just fine on macOS

------
boomskats
This is very nice. It works perfectly on a BlackBerry K2 - with full keyboard
support :)

------
mdonahoe
Didn’t work on my iphone

------
sidewinder128
It would be possible to use SDL2 with rust for rendering too.

------
aloer
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?

~~~
bourgoisloic
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](https://github.com/loicbourgois/gravitle#learn-more)

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

[3]
[https://loicbourgois.github.io/gravitle/playground.html?test...](https://loicbourgois.github.io/gravitle/playground.html?test=test_15)

------
hu3
Freezes in Firefox mobile on a LG G5.

