Light a fire on a real 2.4 km ridge-and-lake landscape and watch the front stretch into an ellipse as wind, slope and dry fuel push it. Then try to save the village with a firebreak.
The science
Rate of spread. The model follows Rothermel (1972): the head-fire speed on flat ground without wind is a fuel property R0 (here an illustrative round value per fuel type), reduced by fuel moisture ηM = 1 − 2.59 r + 5.11 r² − 3.52 r³ with r = Mf/Mx (zero at the moisture of extinction), and increased by wind and slope: R = R0 ηM (1 + φw + φs). Wind factor φw = C (196.85 U)B (β/βop)−E with the mid-flame wind U in m/s and the fuel's surface-area-to-volume ratio σ setting C = 7.47 exp(−0.133 σ0.55), B = 0.02526 σ0.54, E = 0.715 exp(−3.59·10−4σ); slope factor φs = 5.275 β−0.3 tan²θ. The 10 m open wind is cut to mid-flame height by a fuel-dependent wind adjustment factor (grass 0.40, shrub 0.35, timber 0.25: typical sheltering values).
Fire shape. Wind and slope combine as vectors in φ. The effective wind they are equivalent to gives the length-to-width ratio of Anderson (1983), L/W = 0.936 e0.2566 Ue + 0.461 e−0.1548 Ue − 0.397 (Ue in mph, capped at 8). Each burning point then spreads as an ellipse with the ignition at its rear focus (Richards 1990): the speed in a direction ψ away from the head is R(ψ) = Rhead (1 − e)/(1 − e cos ψ) with e = √(1 − (W/L)²). The fire front is the envelope of all those ellipses (Huygens principle); the code finds it as minimum ignition time over the grid (Dijkstra with a 32-neighbour stencil, 25 m cells), re-solved whenever you change something. Slope and aspect come from the real height grid of the 3-D terrain model.
Intensity and flames. Byram's fireline intensity I = H w R (H = 18 000 kJ/kg, w = fuel consumed in kg/m², R in m/s) gives kW per metre of fire front; flame length Lf = 0.0775 I0.46 m. Intensities above about 4 000 kW/m are beyond direct hand-crew attack, above 10 000 kW/m beyond any ground attack. Flames in the picture are drawn larger than the computed length so they read from far away.
Spotting. Burning cells may loft embers that land downwind and start new fires; probability grows with wind speed, intensity and fuel type (timber most), the landing distance with wind speed. This is a simple stochastic stand-in (seeded, repeatable), not a validated ember-transport model: real spotting depends on tree height, firebrand shape and turbulence.
What is simplified. Surface fire only (no crown fire, no fire-induced wind), one fuel model per cell, uniform moisture and wind over the whole area and all 12 hours, constant fuel loads, no diurnal weather change, no suppression other than your firebreak. R0, wind factors, fuel loads and residence times are illustrative, not a calibrated fuel model; use the output to understand why fires behave this way, not to predict a real fire. The picture follows the same logic: red is burning, black is burned. Models built with Blender, scene by Three.js.