|Home Images Misc. Projects Publications CV Links|
During my time at NVIDIA I wrote a 3D Navier-Stokes fluid solver that runs entirely on the GPU. Fluid solvers are used to generate realistic, physically-based animations of water and smoke. Typically it takes several minutes or hours to generate each frame of animation, but by making some minor compromises in visual quality and taking advantage of the GPU's parallelism and bandwidth the solver is fast enough for real-time applications (e.g., around 120-180 frames per second at 64x64x128 on a GeForce 8800 GTX). I'm currently preparing a chapter that covers some of these ideas for GPU Gems 3.
The solver was used to generate interactive smoke in a launch demo for NVIDIA's GeForce 8800. NVIDIA is currently working with developers to integrate this technology into next generation games -- it is already being used in Flagship Studios' Hellgate: London (video: QuickTime, Windows Media).
The solver also tracks free surfaces (e.g., the interface between air and water). The water images below were generated using a GPU level set ray tracer, which runs alongside the solver in real time. The smoke images were also rendered via ray marching.
Update: In the executable available from NVIDIA's site, you may observe some artifacts when introducing large velocities into the simulation (e.g., when dragging the mouse around quickly). This version of the solver uses a BFECC advection scheme to improve detail in the fluid, but unfortunately the scheme is not unconditionally stable. You can toggle BFECC on and off with the b key, which should eliminate the artifacts. (At some point I'll upload a more recent version that uses an unconditionally stable MacCormack scheme.)
Update: Added a couple videos comparing various numerical schemes, precision, etc.:
More details to come...
Video (DivX, 8.97 MB)
Fire: walk with me
Video (DivX, 5.38 MB)
Video (DivX, 8.74 MB)
Video (DivX, 24.3 MB)
An older image of rising smoke:
|Most of this content is probably copyright 1984-2006 Keenan Crane. Spam bots: please send spam to email@example.com.|