← Back to Blog
[field-report]Nov 20257 min read

Real-time Fire Simulation on Actual Terrain Data

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:

python
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