I like explosions.
The goal of my project is to combine an implementation of Animating Suspended Particle Explosions (Arikan, Feldman, O’Brien, 2003) with a GPU-accelerated fluid simulation, and the results of that into a GPU-accelerated volumetric renderer.
The implementation of the 2003 paper written by Arikan et al was previously implemented by myself and Steve Lovejoy in CIS 563. The method modifies incompressible semi-Lagrangian flow by allowing discrete quantities of simulated fuel to locally inject non-zero divergence into the fluid grid, with the evolution of the explosion visualized by particles representing these fuel quantities. Our simulation included one-way interaction with solid obstacles; i.e. the obstacles restrict the explosion, but the explosion does not push or otherwise cause physical effects on the obstacles.
However, our implementation was slow and kind of ugly: the fluid simulator ran at a single-digit framerate, and the fact that the elements of the fire and soot were represented by relatively small amounts of 2D particles greatly limited the visual quality of the results. The particles moved in nice explosion-y ways, but they didn't really capture the volumetric appearance of what they were supposed to represent.
GPU Gems 3 describes a shader-based implementation of incompressible Navier Stokes fluid, illustrated in a video from one of the authors:
I will be modifying their implementation to allow for tracking of particles in the fluid grid, and so that their solver handles injected divergence/temperature/velocity caused by the burning particles.
A second work that I will be drawing on to improve the rendering quality is Simon Green's Volumetric Particle Shadows:
This implementation allows for user-controlled real-time volumetric rendering of a set of particles. However, in order for it to be applied to the results of the fluid solver, it will have to be modified in a variety of ways: it needs to be able to handle input particle positions, the light source will have to be dynamically adjusted, a reversed accumulation method will need to be added for the burning particles, and a color mapping from the temperature needs to be implemented.