Final Report - CS 184 Summer 2025
We present Ignis Divinus, a real-time 3D fire simulation system that achieves physically realistic flame behavior through GPU-accelerated fluid dynamics. Our implementation combines stable Navier-Stokes fluid simulation with volumetric rendering techniques, leveraging Taichi's differentiable programming framework for high-performance computation. The system features a Semi-Lagrangian advection scheme for stability, temperature-driven buoyancy for natural flame motion, and physically-based blackbody radiation for accurate color representation. We achieved interactive frame rates of 30+ FPS at 96³ grid resolution on consumer GPUs, with advanced post-processing effects including bloom and heat refraction.
Our fire simulation system is built on a 3D grid-based fluid solver implementing the incompressible Navier-Stokes equations. We chose a Semi-Lagrangian advection scheme for its unconditional stability, allowing larger time steps without numerical explosion. The simulation operates on a staggered MAC (Marker-And-Cell) grid where velocity components are stored at cell faces and scalar quantities (density, temperature) at cell centers. The core solver performs these steps each frame:
We implemented a ray marching-based volume renderer that directly integrates emission and absorption along view rays. The renderer uses physically-based blackbody radiation to map temperature values to colors. Key innovations include:
| Aspect | Reference (Stam 1999) | Our Implementation |
|---|---|---|
| Grid Resolution | 32³ - 64³ | 96³ - 128³ |
| Advection | Semi-Lagrangian | Semi-Lagrangian + CFL adaptive |
| Rendering | Simple density mapping | Blackbody radiation model |
| Performance | ~10 FPS (CPU) | 30+ FPS (GPU/Taichi) |
Problem 1: Numerical Instability. Initial implementation suffered from velocity field explosion at high temperatures. We solved this by implementing Semi-Lagrangian advection with CFL-based adaptive time stepping (dt = min(0.066, 0.5 * dx/|v|_max)) and added numerical dissipation.
Problem 2: Unrealistic Flame Motion. Flames appeared too laminar. We added vorticity confinement (ε = 6.0) to restore small-scale rotational motion lost to numerical dissipation, and introduced stochastic fuel injection for natural flickering.
Problem 3: Performance Bottlenecks. Initial ray marcher achieved only 5-10 FPS. We implemented adaptive step sizes, early termination, and moved all computation to GPU kernels via Taichi, achieving 6x performance improvement.
Our system achieves real-time performance across multiple quality presets. At high quality (96³ grid, 256 ray steps), we maintain 30+ FPS while producing visually compelling fire effects. The frame time breakdown shows: Fluid Simulation (40%), Volume Rendering (50%), Post-processing (7%), Other (3%).
📹 Demo Video: View full demonstration with wind effects and color variations
📊 Presentation: View project slides
Chenyang Zhang: Developed Jacobi pressure solver with 80 iterations. Implemented buoyancy forces and boundary conditions. Conducted fluid dynamics algorithm research.
Huachen Qu: Built VolumeRenderer with 256-step ray marching. Implemented blackbody radiation LUT (800-3000K). Designed emission-absorption model.
Muze Du: Co-implemented Fluid3D class with fuel combustion system. Created HeatRefraction effects and PostProcessor pipeline with bloom.
Yijun Xiang: Designed main.py system architecture. Led Taichi GPU integration achieving 30+ FPS. Developed adaptive timestep control.
[1] Stam, Jos. "Stable Fluids." SIGGRAPH 1999.
[2] Fedkiw, Ronald, Jos Stam, and Henrik Wann Jensen. "Visual Simulation of Smoke." SIGGRAPH 2001.
[3] Nguyen, Duc Quang, Ronald Fedkiw, and Henrik Wann Jensen. "Physically Based Modeling and Animation of Fire." SIGGRAPH 2002.
[4] Bridson, Robert. "Fluid Simulation for Computer Graphics." CRC Press, 2015.
[5] Taichi Programming Language Documentation. https://docs.taichi-lang.org/