isomage

03-14-2009, 05:27 AM

I just wanted to run my latest experiment past you all. This is just a vague overview of what i've done so far, not a tutorial or anything.

One of the problems with simple fractal heightfields is that you get all your mountains in the center of your continents, which leaves something to be desired -- while such mountain ranges do exist, you also tend to get coastal mountain ranges, and these are often overlooked by terrain generators.

So I decided to see if I could proceed from random "tectonic plate" boundaries and generate continental elevations in such a way that plate boundaries could end up being subduction zones, or mountain ranges, or whatever.

Caveat: I know nothing about geology.

The first thing to do, then, is come up with some random large squiggle-bordered areas on the sphere, just like Earth's plate boundaries (http://en.wikipedia.org/wiki/File:Plates_tect2_en.svg). To this end, I opted for a Voronoi (http://en.wikipedia.org/wiki/Voronoi_diagram) tessellation of the sphere, but I used turbulence to perturb the boundaries so that they'd look more natural.

Once the plate boundaries had been determined, I needed to decide which edges would be convergent (plates smashing together) or divergent (plates pulling apart). In real life there are also transform boundaries (plates grinding past each other), but... baby steps.

I simplified this step by having each plate either be expanding on all edges or contracting on all edges. Thus, where two expanding plates meet we have a convergent boundary, where two contracting plates meet we have a divergent boundary, and where an expanding plate meets a contracting plate I decided to model a subduction zone (one plate going under the other).

So in this model, the first type of boundary should have a predisposition toward mountains, the second to rifts, and the third to mountain ranges along coastlines (recall the original motivation).

My first draft therefore uses a base heighfield of 1/f noise (a summation of several octaves of Perlin noise) which is filtered by a map generated from the Voronoi cells with high values at the convergent boundaries and the centers of contracting plates, and low values at the divergent boundaries and centers of the expanding plates.

Here are some results so far (representing only one day of design, implementation, and testing, so very much a rough draft!). Horizontal and vertical pixel coordinates map directly to longitude and latitude so the images can be easily mapped onto a sphere. Plate boundaries are shown in gray. Feedback is not only welcome but hoped-for.

One of the problems with simple fractal heightfields is that you get all your mountains in the center of your continents, which leaves something to be desired -- while such mountain ranges do exist, you also tend to get coastal mountain ranges, and these are often overlooked by terrain generators.

So I decided to see if I could proceed from random "tectonic plate" boundaries and generate continental elevations in such a way that plate boundaries could end up being subduction zones, or mountain ranges, or whatever.

Caveat: I know nothing about geology.

The first thing to do, then, is come up with some random large squiggle-bordered areas on the sphere, just like Earth's plate boundaries (http://en.wikipedia.org/wiki/File:Plates_tect2_en.svg). To this end, I opted for a Voronoi (http://en.wikipedia.org/wiki/Voronoi_diagram) tessellation of the sphere, but I used turbulence to perturb the boundaries so that they'd look more natural.

Once the plate boundaries had been determined, I needed to decide which edges would be convergent (plates smashing together) or divergent (plates pulling apart). In real life there are also transform boundaries (plates grinding past each other), but... baby steps.

I simplified this step by having each plate either be expanding on all edges or contracting on all edges. Thus, where two expanding plates meet we have a convergent boundary, where two contracting plates meet we have a divergent boundary, and where an expanding plate meets a contracting plate I decided to model a subduction zone (one plate going under the other).

So in this model, the first type of boundary should have a predisposition toward mountains, the second to rifts, and the third to mountain ranges along coastlines (recall the original motivation).

My first draft therefore uses a base heighfield of 1/f noise (a summation of several octaves of Perlin noise) which is filtered by a map generated from the Voronoi cells with high values at the convergent boundaries and the centers of contracting plates, and low values at the divergent boundaries and centers of the expanding plates.

Here are some results so far (representing only one day of design, implementation, and testing, so very much a rough draft!). Horizontal and vertical pixel coordinates map directly to longitude and latitude so the images can be easily mapped onto a sphere. Plate boundaries are shown in gray. Feedback is not only welcome but hoped-for.