I've been looking into simplex and perlin noise for procedurally generated heightmaps. One of the minor annoyances I had with this approach is the lack of coastal mountain ranges, cliffs and other structures relatively common in the real world. I have found attempts to solve this using plate tectonics, and while the results have more unique structures than regular noise, it takes a lot of computations and is not easy to implement. In an attempt to create these structures, I discovered that it may be emulated to some degree by iterating over the noise with an added dimension.
The first iteration is a normal 2D simplex heightmap. For each iteration, we use the previous simplex heightmap as the third dimension. This amplifies the heightchanges, and creates a kind of noise different from using linear weights on multiple simplexes (simplices?). This noise may result in lots of different not-exactly-natural-looking structures like cliffs and craters and lakes, but has an unfortunate tendency to create unnaturally large plateaus. By the first iteration, it usually looks worse, but by the third or the fourth, it will begin to jump between two acceptable versions and mostly adds some minor random noise in following iterations. I have also added a fourth dimension, which is a displacement with relation to iteration count. This counteracts some of the effects from the third dimension, but not all.
It may not be the most realistic terrain structures, but it is a nice change from the oddly smooth and/or evenly spread out heightmaps I used to get. It could benefit from some blurring at certain places, though, and sometimes it goes completely wrong with whole sections out of place. By using the grayscale colormap, it's easier to see the effect this has on the noise as a whole. With certain adjustments to the scales and iterations (high prevScale, mid iterScale), it will curl and twirl and almost look like a cloud/pressure map.
scale (iter nr) scales the effect from the iteration count,
scale(prev map) scales the effect from the previous iteration. Both scales are logarithmic.
iterations is self-explanatory, with 0 being regular simplex.
same noise makes it use the same simplex noise between the iterations. If false, the iterations have much less visibly in common with each others.
RENDER to render the world and
seed & render to render with a new seed (otherwise, the same noise space will be used). Left is the iterated version and right is the normal version.
What about sending in information from other heightmaps, like a voronoi diagram or a spherical simplex? Here's a collection of heightmap methods piped into either simplex on the surface of a sphere, or to a regular 2D simplex. For spherical simplex methods, might need to adjust
methods > simplex sphere to view it correctly. It is a simple inversion of D3's geo-projections. By default, it shows spherical onto spherical, with orthographic projection. Spherical projections works best piped to spherical, so in order to change to planes, you need to turn off
pipe scale is logarithmic.