5 ms·
Show HN: Gravitle – 2D soft-body engine built with Rust for the web
- rgovostes 7y agoThis works in Chrome, but not Safari (macOS 10.14.5).
- bourgoisloic 7y agoThank you for the feedback. I will look into this. Maybe the issue is only related to WebGL rendering.
- boardwaalk 7y agoIt indeed works on Safari with WebGL 2.0 enabled (Developer -> Experimental Features)
- slavik81 7y agoHow 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?
- phkahler 7y agoLike the old xspringies from '93.
- electricslpnsld 7y agoI 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.
- bourgoisloic 7y agoThe 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/frontend/index.js#L12 https://github.com/loicbourgois/gravitle/blob/master/fronten... [2] https://github.com/loicbourgois/gravitle/blob/master/src/particle.rs#L341 https://github.com/loicbourgois/gravitle/blob/master/src/par... [3] https://en.wikipedia.org/wiki/Drag_equation https://en.wikipedia.org/wiki/Drag_equation
- joelthelion 7y agoYou 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.
- andai 7y agoMan this is great fun! I got all scrunched up by the circles of doom.
- aloer 7y agosuper 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 7y agoThank 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=test_15 https://loicbourgois.github.io/gravitle/playground.html?test...
- markdog12 7y agoSite freezes on Moto G4, latest Chrome after about a second. At least back button still worked.
- boomskats 7y agoThis is very nice. It works perfectly on a BlackBerry K2 - with full keyboard support :)
- emilfihlman 7y agoDoesn'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.
- hu3 7y agoFreezes in Firefox mobile on a LG G5.
- Narishma 7y agoDoesn't work in Firefox 67 on Windows.
- rectang 7y agoFreezes Firefox 67.0.4 on Mac.
- faitswulff 7y agoFirefox 69.0a1 (2019-06-22) (64-bit) chugging along just fine on macOS
- NikkiA 7y agoRunning fine on FF 67.0.4 on win 10 here.
- xchip 7y agoI 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 7y agoWhat was the context? Where people still using 286s in 1999?
- michaelgrafl 7y agoNope. Probably meant to say 30 years ago.
- gitgud 7y agoHow do I use this on mobile? The controls mention touchscreen...
- connicpu 7y agoIdk 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
- sidewinder128 7y agoIt would be possible to use SDL2 with rust for rendering too.
- mdonahoe 7y agoDidn’t work on my iphone
- neetodavid 7y agoVerlet 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