Now it spawns and controls particle emitters. Materials burn too - according to their properties (notice the water pond and stones blocking fire). Lighting is also controlled by the system (grid of lights, optimized away when not needed).
The proper simulation code was probably the hardest part. The heat is transferred to neighbors or air (thus lost in the original cell). There’s a fuel property and an ignition temperature to start the reaction.
I also needed to add downsampling to make the emitters work. The simpler grid (mip 1 or 2) is used to control vfx and lighting. In the future it will allow for querying the simulation fast (kind of like an octree, though without its complexity). A full “mip chain” is generated over several subsequent frames, making the calculations quite lightweight.
For setting material properties I wanted something user-friendly. I decided to go the Physical Material route. Subclassing it and adding new fields works like a charm - they show up in Unreal’s UI and are easily read with raycasts.