Smoke Simulator/Volumetric Renderer
A Semi-Lagrangian smoke simulation system and integrated volumetric renderer
Overview
One of the spring 2012 CIS563: Physically Based Animation assignments was a semi-Lagrangian smoke simulator based on the MAC-grid advection approach described in the SIGGRAPH 2007 Fluid Simulation course notes. I extended the project to include multithreading, RK4 integration, better support for extremely large simulation grids, and added a volumetric renderer with a pseudo-blackbody lighting system. The volumetric renderer can be run either separate from the simulator, or as an integrated component rendering frames as soon as they are simulated. This project is written entirely in C++.
Base Code
The simulator component of this project utilizes base code written by Aline Normyle and Peter Kutz for CIS563: Physically Based Animation. The volumetric renderer component was written from scratch and utilizes no base code.
Features
Select Images and Videos
Acknowledgements
This project would not be possible without the guidance of Dr. Joseph T. Kider, the instructor for CIS563 in the spring of 2012. Additionally, the volumetric renderer component of this project was derived from CIS460/560, taught by Professor Norm Badler. I would also like to thank CIS563 TAs Tiantian Liu and Peter Kutz. Friends Gabriel Leung and Dan Knowlton acted as sounding boards for various ideas and discussed ideas.
Project Blog Posts
Progress updates for this project were posted to my development blog, Code & Visuals. The following posts detail the development of this project. Posts are listed starting with the most recent:
Resources
In the process of building my simulator, I drew upon the following papers, and articles. They are listed in no particular order.
SIGGRAPH 2007 Fluid Simulation Course Notes: An extremely comprehensive set of notes detailing semi-Lagrangian based fluid simulation, by Robert Bridson and Matthias Muller-Fischer.
Fluid Simulation for Computer Graphics: The go-to reference book for fluid simulation, by Robert Bridson.
Preconditioner Wikipedia Article: An article summarizing how mathematical preconditioners work.
Runge-Kutta Methods Wikipedia Article: A fairly concise summary of the Runge-Kutta integration schemes, including RK4.
SIGGRAPH 2011 Production Volume Rendering Course Notes: An extremely comprehensive set of notes detailing volumetric rendering by Magnus Wrenninge and Nafees Zafar.
Beer-Lambert Law Wikipedia Article: An article summarizing the mathematics and physics of Beer-Lambert absorption.
Display of Surfaces from Volume Data: The 1988 Marc Levoy paper introducing volume rendering.

