In order to receive my Master's Degree in Computer Science, I had to spend a year writing a dissertation. I wanted to do something in the area of computer graphics or game engines, and so I got in touch with my computer graphics professor who slotted me into the SI-MORENA project at my university. SI-MORENA stands for "Intelligent Systems for Monitoring Natural Resources" (translated from Portuguese), and it is a set of tools which my university was working on to help different municipalities around the country to monitor its resources and land. My project was related to a tool developed by my university to playback forest fires after they had ocurred (forest fires being a big problem in Portugal during the summer season), I was tasked with improving the simulation and graphics of the tool. The tool used data from another tool from a company called Macfire, which had a database of fire fronts collected by people in the field during said fires. The forest fire visualization tool, which was written in Unreal Engine, was to take this data and allow users to playback the fire to see how it spread over time in a VR environment.
Since I would not be required to simulate an actual forest fire from the ground up, the scope of the project was significantly diminished as my goal was to make the visuals congruent with the simulation data. For instance, if a user is not looking at a specific area of the fire, that part of the simulation can be entirely culled, and regenerated quickly once the user does look at it again. My approach to tackling the problem was to break the world into grids, stored inside a quadtree, that can scale themselves based on the intensity of the fire in a given region and the proximity of the user to the fire (so lots of small grids can be combined into one big one as the user gets further away from it). This system also supported the burning of 3D objects and foliage (which was stored in Octrees instead), fires spreading from object to object, a wind vector to push the fire in a given direction, and allowed for the use of materials to provide properties for the fire to spread (such as some materials being inflammable),
The simplicity of aligning everything to a grid made the system very scalable on the CPU, supporting thousands of individual fire elements without any drop in performance on a mid-range system (GeForce RTX 2060). My custom quadtree and octree implementation used a deferred removal system to ensure that lag spikes were not present as the trees were modified, as those pose a significant detriment to VR usability as jitter introduces motion sickness. The GPU performance was also tested, showing different particle qualities and their impact on the performance, concluding that one could opt for a few hundred high quality fires or thousands of lower quality billboards.
The entire dissertation is available for download below.