real-time visual simulation of smoke
DESCRIPTION
Project presentation for my MS Exam on April 09, 2010.TRANSCRIPT
Real Time Visual Simulation of Smoke on the GPU
By Muhammad S. KarimMSCS Student
Department of Computer ScienceThe University of New Mexico
Introduction & MotivationHORVATH, C., AND GEIGER, W. 2009. Directable, high-resolution
simulation of fire on the GPU. ACM Trans. Graph. 28, 3, 1-8.Used in creating visual effects in “Harry Potter and the Half Blood
Prince”.Uses a incompressible, inviscid Navier-stokes equations for fluid flow.Pursuing as part of an Individual Study project with Dr. Joe Kniss.
The Project and GoalStarting with an implantation of the following:FEDKIW, R., STAM, J., AND JANSEN H. W. 2001. Visual
Simulation of Smoke. In proc. of ACM SIGGRAPH 2001.Based on: Stam, J. 1999. Stable Fluids. In SIGGRAPH 99.Goal is to pursue the real-time implementation using GPU
specific vertex & fragment processing features.
Images from [FEDKIEW 2001]
Equations of Fluid FlowUsing incompressible and inviscid (leaving out the viscausity
term) form of Navier-Stokes equations for fluid flow:
u=velocity, p=pressure, f=force
Smoke properties (scalar fields): a. Density (ρ), b. Temperature (T)
Simulation Algorithm, inside a 3D grid:Step 1: Add Forces (Buoyancy, Vorticity)Step 2: Advect Velocity FieldStep 3: Solve for intermediate pressure term. Step 4: Project velocity field to make the field divergence free.Step 5: Apply boundary conditions to Velocity & Pressure fields.Step 6: Advect, Dissipate scalar fields (Density & Temperature)
u = Velocityp = Pressuref = Forcet = Time
Mass Conservation
Momentum Conservation
Simulation Algorithm Steps1.a Add Buoyant force to the velocity field:
+ =
Shader
u(t) F(buoy)
u’(t)
ρ(t) T(t)
*Tamb
Simulation Algorithm Steps1.b Add back Vorticity Confined Force to the velocity field:
+ =
u(t) Fvort u’(t)
Curl(u)
Shader
Simulation Algorithm Steps2. Advect Velocity field: (Semi-Lagrangian Advection)Move back along the vector back a timestep.Pick a vector by Tri-linear interpolating the 6 neighboring cells
from the 3D texture. Set this computed value to the current cell.]Benefits: ‘Stable’ field, avoid “blow-ups”, GPU friendly.
u(t) u’(t)
Shader
Simulation Algorithm Steps3. Compute field Pressure (for the next projection
step): u(t)
Shader
Div(u)
ShaderIterative
Jacobi Solver
p(t) after N Jacobi Iterations(I use 30-40)
Solve for p
Simulation Algorithm Steps4. Project Velocity field:Using Helmholtz-Hodge decomposition. (To ensure 0
divergence). Any vector field u* can be uniquely decomposed as the
following equation where u has 0 divergence:
u(t)u (t+1)
= -
Grad ( p(t) )
Simulation Algorithm Steps5. Apply boundary conditions:Based on ‘fixed-grid’, fluid confined to the grid.a. Velocity goes to zero on the boundary (no-slip condition).b. Pressure derivative goes to zero on the boundary.
(Neumann pressure condition).
Draw 4 lines along the boundary on each slice of the 3D texture
Draw a quad on the front (z=0) and another on the back (z=slices-1) of the 3D texture
GPU Implementation
Simulation Algorithm Steps6. Advect the scalar fields (Density & Temperature)Similar to velocity field advection.Dissipate the scalar fields based on time.
Shader
Shader
u(t)
ρ(t)
T(t)
Volume Renderinga. Slice the grid region from the viewer’s point-of-view.b. Render each slice from front-to-back order.c. Use the “under” operator to composite (blend) the slices to make
the final images of the smoke region. I used the polygon slicing algorithm implemented in a vertex
shader exactly described in: Ref “Real-time Volume Graphics” – Engel et. al. Ch-3.5.
Demonstration from my programshowing 2 slices
Volume Rendering (more…) Implemented volumetric shadows using the Half-Angle
Slicing technique by Kniss et al. 2003. Ref: Kniss, J., S. Premo e, C. Hansen, P. Shirley, and A. McPherson. 2003.
"A Model for Volume Lighting and Modeling." IEEE Transactions on Visualization and Computer Graphics 9(2), pp. 150–162.
Using a 2D light buffer to accumulate opacity at each slice, the use as a shadow map
Some ResultsSelf-shadowing the smoke volume produces more realism.Smoke volume transparency is computed based on the
smoke density values computed in the grid.
No self-showing inside the volume
With self-showing inside the volume
Closing Remarks and Demo I used 64 x 64 x 64 grids in the Demo, higher resolution
provides finer details. I also used a fixed grid, will possibly explore techniques to
move the fluid out of the box.Practical and possible to use in real-time applications with
mid-high end GPUs.