This project implements smoke as an incompressible fluid following the techniques described in Robert Bridson and Mattias Muller-Fischer's SIGGRAPH notes.
Here are some animations produced by the simulation:
The smoke in this assignment is constrained within a closed box. The velocities are stored at each face using a MAC Grid. After advecting velocity, the simulation advects moke density, temperature, and color. Bouyancy and vorticity confinement forces help give the smoke more character. Grid-aligned solids can be placed within the bounding box. The smoke is rendered with axis-aligned sheets (as explained in "Visual Simulation of Smoke") having twice the resolution of the grid. Also cubic interpolation, rather than tri-linear interpolation, is used to store and access the density and temperature values, helping to create more detail.