<p>Perlin noise is just a base block, not very interesting by itself. You don't need to modify it, but to combine and filter it in interesting ways. Look at how to make <a href="https://en.wikipedia.org/wiki/Fractional_Brownian_motion" rel="noreferrer">fractal Brownian motion (fBm)</a> with it for example, which combines octaves based on few parameters to get a richer texture.</p>

<p>The question of terrain rendering is a difficult one and a topic of active research. Many generated terrains have this artificial and uninteresting look. This is exactly what the paper <a href="http://jcgt.org/published/0004/02/01/" rel="noreferrer">"Modeling Real-World Terrain with Exponentially Distributed Noise"</a> tries to address, by proposing a formula based on statistics measured from actual terrain, which yields more convincing shapes.</p>

<p>Another source of valuable information is <a href="http://www.iquilezles.org/www/" rel="noreferrer">Iñigo Quilez's website</a>, where he mentions procedural generation a lot, <a href="http://www.iquilezles.org/www/articles/morenoise/morenoise.htm" rel="noreferrer">including tricks to fake erosion</a>.</p>

CC BY-SA 3.0
2017-11-10T23:23:13.840Z
See also Giliam de Carpentier's series of articles on terrain on [his blog](http://www.decarpentier.nl/)—look for the "Scape" articles.
Nathan Reed
CC BY-SA 3.0
2017-11-10T08:24:07.170Z
2017-11-10T08:32:04.707Z
2017-11-10T08:32:04.707Z
Julien Guertault
<p><a href="https://youtu.be/dZG60_c29EI" rel="nofollow noreferrer">Here’s</a> a video that talks about a couple different techniques.</p>

<p>One idea mentioned in the video is to take the values from 0.0 to 1.0 you get from the noise and only care about ones within a certain range, (mapping the rest to 0.0). Further, you can map the values in that range to different values, following a curve. For instance if you take the values between 0.25 and 0.75 you can map 0.5 to 1.0 and fill in the values in between with a straight line. </p>

<p>Another technique mentioned is to compose your noise function. Say you have a noise function that takes a 2d vector, you can call <code>Vec2(Noise(pos), Noise(pos + offset))</code> to get a vector you can put into the noise function again. This gives an interesting skewed/streaky look. </p>

CC BY-SA 3.0
2017-11-11T20:41:18.200Z
2017-11-11T20:41:18.200Z
Ryan1729
<p>Perlin noise not good for real planet surface because planet surface is not random. Planet structure is create by geology/physics and interaction between different parts.<br/>
<br/>
This video show geology simulator have name PlaTec (have link in text below video):<br/>
<a href="https://www.youtube.com/watch?v=bi4b45tMEPE" rel="nofollow noreferrer">https://www.youtube.com/watch?v=bi4b45tMEPE</a><br/>
<br/>
Link have source code at SourceForge web site too.</p>

CC BY-SA 4.0
2019-05-30T04:34:39.833Z
2019-05-30T04:34:39.833Z
Châu
<p>I have been playing around for a day with Perlin noise, and I am currently stuck. Most of the modifications I have made to the algorithm produce more or less the following:</p>

<p><a href="https://i.sstatic.net/LNK39.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/LNK39.png" alt="Perlin noice"></a></p>

<p>Now, this is a very good start, but the idea is to generate terrain similar to real life (as close as I can get at least). Rivers and lakes would be nice to have, but that's way ahead in the schedule, right now I would like some help understanding 2 things.</p>

<p>Let's say that in my image, black is water and grey is land this is quite unlike the earth's shores. On earth continents are large masses of land and if they are cut by watter, it's usually on large areas (Imagine the Mexican gulf or the Mediterranean sea). However my image has a lot of narrow elongated "peninsulas" with patches of water around it. Due to the nature of Perlin noise (the square grid with the underlying random vector field) I am not sure how to create those large clusters of land and water. </p>

<p>The other problem is vertical, if we see the grey scale as a height map, these islands are too odd. In real life one would have large sections of flat land with elongated mountain ranges cutting through.</p>

<p>Some options that I have considered are, changing the smoothing/fade function in the improved Perlin noise algorithm for one that extends over multiple squares in the grid, but this adds too much computational complexity. I have also considered changing the vector field generation from pseudo random to one that follows a pattern, but this doesn't seem like it would actually solve the problem given that Perlin noise, as is, doesn't seem able to generate large consistent clusters.</p>

<p>Edit:</p>

<p>I know about octaves, but they have their limitations, re-sampling perlin noise at different frequencies and amplitudes does change the terrain generation and ca give you some good results:
<a href="https://i.sstatic.net/Wd6Da.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/Wd6Da.png" alt="enter image description here"></a></p>

<p>But even this has issues.
For example if I want smooth hills I loose jaggy shores, same as if I try to create more valleys. And doing this also reduces the likelihood of generating islands in the middle of the bodies of water, moreover in terms of topography, the mountains look chaotic, they don't really from mountain ranges, they rather spread semi-chaoticly, which is not exactly what I need. </p>

CC BY-SA 4.0
2019-09-10T10:00:24.460Z
I recommend using (Open)Simplex Noise instead of Perlin Noise, because you'll have 'integer slices' with Perlin Noise. Perlin (top) compared to OpenSimplex (bottom): https://i.sstatic.net/Rlib0.png
Derk Jan Speelman
<algorithm><noise><procedural-generation>
How to modify Perlin (not simplex) noise to create continental like terrain generation
Makogan
# How to modify Perlin (not simplex) noise to create continental like terrain generation

(Asked by: username_0 on 2017-11-10)

I have been playing around for a day with Perlin noise, and I am currently stuck. Most of the modifications I have made to the algorithm produce more or less the following:

[![Perlin noice](https://i.sstatic.net/LNK39.png)](https://i.sstatic.net/LNK39.png)

Now, this is a very good start, but the idea is to generate terrain similar to real life (as close as I can get at least). Rivers and lakes would be nice to have, but that's way ahead in the schedule, right now I would like some help understanding 2 things.

Let's say that in my image, black is water and grey is land this is quite unlike the earth's shores. On earth continents are large masses of land and if they are cut by watter, it's usually on large areas (Imagine the Mexican gulf or the Mediterranean sea). However my image has a lot of narrow elongated "peninsulas" with patches of water around it. Due to the nature of Perlin noise (the square grid with the underlying random vector field) I am not sure how to create those large clusters of land and water.

The other problem is vertical, if we see the grey scale as a height map, these islands are too odd. In real life one would have large sections of flat land with elongated mountain ranges cutting through.

Some options that I have considered are, changing the smoothing/fade function in the improved Perlin noise algorithm for one that extends over multiple squares in the grid, but this adds too much computational complexity. I have also considered changing the vector field generation from pseudo random to one that follows a pattern, but this doesn't seem like it would actually solve the problem given that Perlin noise, as is, doesn't seem able to generate large consistent clusters.

Edit:

I know about octaves, but they have their limitations, re-sampling perlin noise at different frequencies and amplitudes does change the terrain generation and ca give you some good results:
[![enter image description here](https://i.sstatic.net/Wd6Da.png)](https://i.sstatic.net/Wd6Da.png)

But even this has issues.
For example if I want smooth hills I loose jaggy shores, same as if I try to create more valleys. And doing this also reduces the likelihood of generating islands in the middle of the bodies of water, moreover in terms of topography, the mountains look chaotic, they don't really from mountain ranges, they rather spread semi-chaoticly, which is not exactly what I need.

**Tags:** algorithm, noise, procedural-generation

> **Comments:**
> **username_1**: I recommend using (Open)Simplex Noise instead of Perlin Noise, because you'll have 'integer slices' with Perlin Noise. Perlin (top) compared to OpenSimplex (bottom): https://i.sstatic.net/Rlib0.png  

---

## 3 answers

### Answer by username_2 on 2017-11-10. Score: 11 | Accepted answer

Perlin noise is just a base block, not very interesting by itself. You don't need to modify it, but to combine and filter it in interesting ways. Look at how to make [fractal Brownian motion (fBm)](https://en.wikipedia.org/wiki/Fractional_Brownian_motion) with it for example, which combines octaves based on few parameters to get a richer texture.

The question of terrain rendering is a difficult one and a topic of active research. Many generated terrains have this artificial and uninteresting look. This is exactly what the paper ["Modeling Real-World Terrain with Exponentially Distributed Noise"](http://jcgt.org/published/0004/02/01/) tries to address, by proposing a formula based on statistics measured from actual terrain, which yields more convincing shapes.

Another source of valuable information is [Iñigo Quilez's website](http://www.iquilezles.org/www/), where he mentions procedural generation a lot, [including tricks to fake erosion](http://www.iquilezles.org/www/articles/morenoise/morenoise.htm).

> **Comments:**
> **username_3**: See also Giliam de Carpentier's series of articles on terrain on [his blog](http://www.decarpentier.nl/)—look for the "Scape" articles.  

---

### Answer by username_4 on 2017-11-11. Score: 1

[Here’s](https://youtu.be/dZG60_c29EI) a video that talks about a couple different techniques.

One idea mentioned in the video is to take the values from 0.0 to 1.0 you get from the noise and only care about ones within a certain range, (mapping the rest to 0.0). Further, you can map the values in that range to different values, following a curve. For instance if you take the values between 0.25 and 0.75 you can map 0.5 to 1.0 and fill in the values in between with a straight line.

Another technique mentioned is to compose your noise function. Say you have a noise function that takes a 2d vector, you can call `Vec2(Noise(pos), Noise(pos + offset))` to get a vector you can put into the noise function again. This gives an interesting skewed/streaky look.


---

### Answer by username_5 on 2019-05-30. Score: 1

Perlin noise not good for real planet surface because planet surface is not random. Planet structure is create by geology/physics and interaction between different parts.  
  
This video show geology simulator have name PlaTec (have link in text below video):  
<https://www.youtube.com/watch?v=bi4b45tMEPE>  
  
Link have source code at SourceForge web site too.


---

