Hydraulic erosion is a dominant force in shaping most landscapes on Earth. The basic process runs as follows:
Within these general guidelines there are many additional factors to consider. Water has momentum and interacts with other water; water dynamics change with temperature and amount of carried sediment; the ground is made of many types of material, some more easily eroded than others; drying out can change the material properties of the ground; and so on.
Simple hydraulic erosion works as follows:
An initial non-eroded terrain is created, either by a fractal method like faulting planes or by an artist-supplied base mesh.
A few thousand iterations of water moving across the terrain are simulated. There are two broad ways to do this:
Water is modeled as a grid of water heights and other properties. Basic laws of water flow are used to update this grid. A few thousand iterations are needed to get reasonable erosion effects, each of which processes the entire grid.
Water is modeled as a sequence of individual particles. Particles are distributed based on rainfall models and roll down hill. Hundreds of thousand of iterations are needed to get reasonable erosion effects, each of which processes the path of just one particle.
This page explores a simple version of each of these methods.
A simple grid-based erosion technique was published by Musgrave, Kolb, and Mace in 1989. It runs as follows:
Let each vertex have an altitude a, water volume w, and suspended sediment s.
The top of the water at a vertex is thus at height w+a; that’s important because the difference in top-of-water heights is what decides which way water flows (and how quickly).
Move water and sediment between adjacent vertices i and j using \Delta w = \min\big(w_i, (w_i+a_i)-(w_j+a_j)\big)
If \Delta w \le 0, increase a_i and decrease s_i by K_d s_i, where K_d is a deposition rate constant you pick
Otherwise,
In the original paper this algorithm was said to apply to each
neighboring vertex
with this caveat:
In a full two-dimensional implementation, one must take care to distribute water and sediment to all neighboring lower vertices in amounts proportional to their respective differences in overall elevation.
This not only requires some care to pick the distributions, but also requires care so that the order in which you compute the motion from cell i to j vs the motion from cell j to k does not change the results.
Various realizations of this distribution criteria has been used; one of the simplest is a two-pass system
Parameters in this method:
The first particle-based erosion technique was published by Chiba, Muraoka, and Jujita in 1999. That paper described a fairly involved algorithm, including a model of the under-cutting effects of turning rivers, though their simulations did not show that complexity’s impact.
A simpler version works as follows:
The above has a particle moving in analog steps across a discrete grid. While it is somewhat more accurate to interpolate particle positions onto the nearby terrain vertices, it is generally adequate to simply round to the nearest vertex instead when finding normals and lifting and depositing sediment.
Parameters in this method: