Logo TooMuchIdle
2D Propagation on GPU – It all started like this…



It all started like this, with a puff of air.



This little gif is the result of my first real-time simulation of pressure propagation in open space.
Apparently nothing special, it looks dull and pretty harmless, but it is the first step of what will probably become a big and terrific piece of software.

We need a bit of context here.

The very day I physically joined UBC [Tue, March 17th, 2015] Sid showed me a beautiful paper+video SIGGRAPH paper that had the potential to completely change the development of our new project, DIGITAL_DUETS. In a nutshell, the original plan consisted of perfecting some of the technologies developed here at UBC over the last 5 years, in particular the 1D propagation model built in JASS.  Yes, 1D, because so far there was no way to run in real-time anything better than a 1D simulations . So it is not hard to imagine how amazed I was when Sid showed me this video, where 2D sound wave propagation is simulated in real-time:

As I wrote before, it came together with an awesome full paper, in which the details of how to use shader scripts to run on the GPU 2D pressure and velocity propagation are laid out. This technology is here used to simulate wind instruments, but from our perspective looks like the perfect candidate gear up and replace the 1D propagation system we were supposed to use for DIGITAL_DUETS.

Of course we immediately contacted the authors and started to collaborate. And here is the connection with the puff of air I proudly post today. After some weeks of intense coding, I managed to have a first working proof of concept, inspired by the Aerophones application. This first example is definitely more similar to a light puff of air than to sound waves; it still does not run at audio rate [it i], i.e., does not produce any sound, and takes into account pressure only and not velocity. However, the behavior is somewhat physically correct, including a light reflection on the upper boundary, before fading out.

It is coded on Linux in C++ and OpenGL GLSL, and runs on a cheap Nvidia GeForce GT 640. The original Aerophones code is for Win only and spins on a ferocious Titan Black. The structure is still very minimal [euphemism], but I have a clear plan. First, I need to get to a much higher temporal resolution, to synthesize audio out of the simulation [probably a better graphics card is needed]; then, my plan is to seamlessly wrap this code into a new class of the ALSA audio engine I designed some years ago, that worked as the first sandbox for the genesis of Bela.
One day I will also share the source of this engine.


more details soon_

Victor Zappi

Comments are closed.