StableFluids
Author: | woei |
Date: | 25 Oct, 2017 |
Category: | plugin |
Credits: | Jos Stam http://www.dgp.toronto.edu/people/stam/reality/Research/pdf/GDC03.pdf |
Download
64bit
Description

This project was a research project for the #node17 visuals and wasn't really aimed for production. It quite strictly reproduces the credited paper, since it mainly served as a reference for evaluating other algorithms and implementation attempts. The only deviations are the additional vorticity confinement routines, eliminating the restriction to a square and evenly spaced base grid, and using Jacobi instead of Gauss-Seidel solver in order to benefit from SIMD instructions.
The repo demonstrates one way how to take advantage of c++'s native speed (SSE instructions) in vvvv without the need for two separate dlls and interop.
https://github.com/woeishi/StableFluids for detailed info
Nodes
all nodes come 2d and 3d versions
- StableFluid: Creates and holds a fluid simulation space
- Evaluate: Drives the fluid simulation, giving access to global parameters
- SetVelocity / SetDensity: Sets the velocities/densities of the entire fluid simulation space
- AddVelocity / AddDensity: Adds velocities/densities to the entire fluid simulation space
- AddRadialVelocity / AddRadialDensity: Adds velocities/densities around the given center to the fluid simulation space (think of it as an emitter)
- AddRadial: Adds velocities and densities around the given center to the fluid simulation space
- GetVelocity / GetDensity: Returns the velocities/densities of the enire fluid simulation space
- Split: Returns the velocities and densities of the enire fluid simulation space
Comments
Comments are no longer accepted.Please create a new topic in the vvvv beta forum to discuss this contribution.
Nice! (And <3 for using GDI Renderer)
Red "Evaluate" node here and then it crashes within 20 seconds.
@io thats a bit unspecific. x64 and you processor must support avx extensions. wiki says intel processors since 2008 and amd 2011
This is a i7 Sandybridge with GTX 675xm, 64bit machine and latest 64bit vvvv
evaluate is red once you open the help patch? does tty say anything?
ah, might be incompatible with avx2 extensions. let me check, if i can compile with avx only
Red on open.
uploaded another version which should be compatible for older cpus. check the list though.
Ok working now thanks
Hi Woei, on github you write you do this in c++ because it must be unmanaged for SSE/AVX.
Just for info you now this System.Numerics.Vectors? It provides hardware-accelerated numeric types (SIMD), suitable for high-performance processing and graphics applications.
@kopffarben: yep, i know. however numerics apply those instruction on vectors. which in this case is maximum 3. i do that on iteration which maxes to 8. the cost of this algorithm is not really complicated arithmetics but just running a lot of loops over a lot of arrays. thus unmanaged outperformes .net quite a bit, since there is no boundschecking on array access. cli would of course also optimize into simd instructions, but only for cases where you exactly loop from 0 to length-1 of the array. and that is nearly never the case here, due to special boundary conditions in the algorithm.
i've also got the same implementation in c# with all the performance optimizations i could think of. still didn't get near the speed of c++