Fire spread prediction has existed for decades. But almost every model runs on simplified, synthetic terrain — DEMs with 30-meter resolution, generalized fuel models, and uniform wind fields. We built something different.
The Resolution Gap
Traditional fire models (FARSITE, FlamMap) use terrain data at 30-meter resolution. That means a single pixel covers an area the size of a baseball diamond. At that resolution, you miss:
- Individual structures and their fire-resistant properties
- Narrow firebreaks like roads and streams
- Micro-terrain features that channel or block fire spread
- Vegetation density variation within a single pixel
Simulation on Reconstructed Terrain
Our approach starts with centimeter-level terrain reconstruction. The fire model runs on actual geometry with detected fuel types:
scene = percept.load("hillside_reconstruction")
sim = scene.simulate(
scenario="fire_spread",
ignition_point=(37.8716, -122.2727),
duration=4,
resolution="native", # Use full reconstruction resolution
fuel_model="detected" # Use scene graph vegetation classification
)
# Compare with and without a proposed firebreak
sim_with_break = scene.simulate(
scenario="fire_spread",
ignition_point=(37.8716, -122.2727),
duration=4,
modifications=[
percept.Firebreak(path=proposed_break_geometry, width=10)
]
)Results for First Responders
In our pilot with a California fire department, prediction accuracy improved from ~60% (FARSITE on standard DEMs) to 96.2% on reconstructed terrain. More importantly, the predictions were available in minutes rather than hours.
"For the first time, we could see where the fire was going to be in 2 hours and position crews accordingly." — Battalion Chief, pilot program participant