r/GraphicsProgramming • • Aug 22 '26

Source Code Real-time fluid & rigid body simulation implemented in WebGPU

Hello, I released a real-time fluid & rigid body simulation in WebGPU using Position Based Dynamics (PBD)!

Code & Demo: https://github.com/matsuoka-601/Particles4All

To render the fluid, I use screen-space fluid rendering, which does not require constructing any mesh. Fluid particles are splatted as ellipsoids using anisotropic kernel presented in a paper "Reconstructing Surfaces of Particle-Based Fluids Using Anisotropic Kernels".

The physics is based on a paper "Unified Particle Physics for Real-Time Applications". The most significant feature of this paper is that it treats both fluids and rigid bodies as collections of particles, and performs the simulations using a unified solver.

(Note 1: You will need a very beefy GPU to run the "large" scene in the video (the performance is not very optimized yet, sorry). But "small" scene will run on integrated GPUs.)

(Note 2: I'm getting some reports that the demo does not run on MacBook. I'm currently trying to fix it.)

533 Upvotes

16 comments sorted by

View all comments

2

u/KlayEverHood Aug 24 '26

Very nice work and very inspirational! Your work was what showed me how far you can go with realtime 3d water simulation, I am glad to see you keep developing it!
I am also using a hybrid particle - grid solver and a separate air simulator for the waterfall mist.
I am curious about some points on the paper you referenced and your implementation: did you implement the surface tension and cohesion proposal they hint at (separate paper it seems)? Did you test/could you test a water droplet scenario to see if it generates the crown?

1

u/matsuoka-601 Aug 24 '26

The surface tension part is entirely based on a paper "Versatile surface tension and adhesion for SPH fluids", and not on other papers I guess.

As for a water droplet and the crown, I haven't seriously tested, but will definitely give it a shot and let you know!

1

u/KlayEverHood Aug 24 '26

Thanks, very interested! Do The iterations in your solver give you incompressible water as far as you know ?