In Semester 1, 2008 I completed a Real-Time 3D Fluid simulation, which solves the Navier-Stokes equations in real time. The project was implemented in C++, OpenGL and Cg. It simulates the fluid or gas entirely on the GPU, which is fast enough to be used inside a game.
On the right are a few videos showcasing the end results of this simulation. It could be inserted as a node in a scene graph quite easily, with minimal recoding required.
The smoke is rendered using a simple raycasting technique. It will only perform the raycast on visible portions of the fluid volume, and the fluid blends in appropriately with its surroundings.
Small steps have been made in making in react to light properly, though this is currently limited to a directional light.
Download Demo and Source
If the videos are not enough to capture your attention enough, head to the Fluidic project page.
Space: switch between camera mode and inject mode Q: Quit G: Perturb to a circular vortex G: Inject Gridded Ink [ and ]: Change X Size ; and ': Change Y Size . and /: Change Z Size (inject mode) Click+Drag: inject smoke (colour depends on button pressed) (camera mode) WASD + Mouse: Move around