benma / pysph

SPH fluid simulation with advanced screen space fluid rendering, using pyopengl and pyopencl.
110 stars 18 forks source link

pysph

pysph screenshot

pysph is a demo of:

Also contained are ports of radix sort and bitonic sort to pyopencl. Based on enjalot's work.

Big thanks to Ian Johnson (enjalot) for the radix/bitonic sort and his excellent tutorial: "Adventures in PyOpenCL".

Running:

Run with python main.py [number of particles]. Start with python main.py 8000 and slowly scale the number of particles up.

You can disable the advanced rendering by using python main.py --disable-advanced-rendering [number of particles]. For more options, run python main.py --help.

Dependencies

On Debian Testing (sid): sudo apt-get install python-opengl python-pyside nvidia-cg-toolkit python-numpy python-mako python-pyopencl

And either package providing pyopencl-icd: nvidia-opencl-icd for nvidia users, amd-opencl-icd for ati users.

On Ubuntu: sudo apt-get install python-opengl python-pyside nvidia-cg-toolkit python-numpy python-mako

Unfortunately on Ubuntu (up to 12.04), the package python-pyopencl is outdated and is missing the --cl-enable-gl flag. Using pip also won't work, because it does not configure the package using the --cl-enable-gl flag. You will need to follow the official build instructions here: http://wiki.tiker.net/PyOpenCL/Installation/Linux/Ubuntu.

If you want to isolate the installation of pyopencl, you can still install it in a virtualenv by using:

$ virtualenv --system-site-packages pysph_env
$ source pysph_env/bin/activate
$ git clone http://git.tiker.net/trees/pyopencl.git
$ cd pyopencl/
$ python ./configure.py --cl-enable-gl
$ python setup.py build
$ python setup.py install --prefix=/path/to/pysph_env/ --optimize=1 

$ python /path/to/pysph/main.py

On Windows

Limitations

Screen space rendering is not complete. It is not optimized for speed. Also, the rendering at the boundaries is not properly dealt with yet, you can see the artefacts in the screenshots.

The program crashes when using an AMD card. I welcome pull requests from AMD users.