Implementation:

Modeling Lava Flows with a Particle System


Creating Particles

Particles were generated at the top of the volcano. They were given initial temperatures and velocities within the ranges specified by the model file. This file could easily be modified to change the behavior and characteristics of the lava.

The volcano was represented as a 2-D grid. For each square of the grid, the volcano had a height and a temperature. Each particle is associated with a grid square according to its location.


The squares of the volcano grid


Heat Transfer

We calculated heat transfer locally between particles within each grid square. The particles transferred heat among themselves, with the volcano surface, and with ocean water.


Particle Motion

Particle motion is affected by a number of factors. There are both inter-particle forces (viscosity, repulsion, and attraction), and external forces (gravity and friction).


Killing Particles

When the temperature of particles drops below a certain threshold, they solidify and become part of the volcano. We then increase the height of the volcano around the particle, and recycle the particle.


Building the Volcano

As the lava particles solidify, they contribute to the growth of the volcano. Here we show a volcano both before an eruption and after the lava has been flowing for 1000 frames. You can see how the volcano has gotten larger, growing in the directions that the lava flowed.

It's interesting to note that, on the right side of the volcano, the lava built up at a rather steep angle, while on the left side, the lava created a rather flat shelf. This is a result of the varying slopes of the initial volcano. Steep slopes on the right cause the lava to plunge straight into the ocean, cooling quickly and then building upward. The gentler slopes of the left side allow the lava to spread out more before reaching the water and solidifying.


Rendering the Lava

The lava particles are rendered as polygonal approximations to spheres. They have the same specular and diffuse properties as the solid rock, but they have an additional emissive glow that increases with temperature. We implemented this glow by increasing the ambient light term for the lava.

In this frame from the movie, you can see how the lava on the left side of the volcano has a more grayish appearance (especially the colder lava, near the ocean), while the lava in the shadows appears more reddish. This effect can also be seen in comparison of the two real-world pictures on our project's front page.

At night, the lava's glow is often bright enough to illuminate some of the rock around the flow. To simulate this effect, we added an additional ambient term to the volcano for squares that had hot lava nearby. This effect can best be seen if we render only the volcano, and not the particles:


Changing the Lava Parameters

The parameters of our lava are specified by a text file. By changing just a few of the characteristics, we can get variations in the lava behavior. For example, if we add more initial upward velocity, increase the number of particles generated per frame, and decrease the attraction between particles, we can get a lava fountain that spreads out rather than forming narrow flows. Just by changing these three parameters, we get:


Simulated lava fountain versus Real-life lava fountain


Back to the lava page.