Doom Fire 3D

The same cellular model in three dimensions, lighting a Blender campsite

Presets

Playback

Fire

Speed and colour

Camera

Layers

Quality

Model check

The science

The cellular model

This is the classic Doom fire algorithm given physical units. The bottom row is the fuel bed at temperature Ts (flickering, and only a chosen fraction burning). Every other cell takes the temperature of the cell below it (or diagonally below, with the wind and turbulence probabilities you set) and subtracts a random cooling c × {0, 1, 2}, never dropping below the ambient 300 K. Hot gas therefore rises one row per tick and cools on the way, giving a plume. With no wind and no turbulence the mean temperature at height y is Ts - c y exactly (check 1).

From temperature to colour

A hot body emits the Planck spectrum B(λ,T) = 2hc2/λ5 / (ehc/λkT - 1). The colour on screen is that spectrum integrated against the CIE 1931 colour-matching functions (analytic approximations) and converted to sRGB; the brightness is set by the emitted power (Stefan-Boltzmann j = σ T4, compressed for display with a gamma, since the eye and screen are not linear). That is why a 1000 K ember is dim red, 1500 K orange and 1900 K nearly white-yellow. The peak wavelength obeys Wien's law λmax T = 2.898 mm K, deep in the infrared for every flame, so most of the emitted power is invisible heat; checks 2 and 3 verify the Planck, Wien and Stefan-Boltzmann numbers numerically.

Honest simplifications

Real flames get their light mostly from glowing soot and from chemical emission bands, not from a single temperature field, and the flow is governed by the Navier-Stokes equations with combustion chemistry, which this cellular model does not solve. The plume height is set by the cooling constant rather than by buoyancy, heat release and entrainment. Colours use the blackbody locus, which is a good model for the soot glow but not for blue hydrocarbon flames. Treat the page as a model of how heat, cooling and drift shape a plume, and of how temperature maps to colour.

Loading model...
Loading Blender model...
Row-mean temperature vs height
Flame height vs time
Radiated flux vs time
Planck spectra (visible band shaded)
Made with 🟠 Blender · Three.js