Sign in to follow this  
Barrett

Random Continent Generating With Perlin Noise

Recommended Posts

Barrett    174

Hello!

 

I have got a problem with random map generation.

I'm trying to generate a map based on fantastic Perlin noise.

Here my results

 

[url=http://imageshack.us/photo/my-images/208/84df35003a0f42f3ac21851.png/]84df35003a0f42f3ac21851.th.png[/URL][url=http://imageshack.us/photo/my-images/16/396981a3b2684d059b8feed.png/]396981a3b2684d059b8feed.th.png[/URL][url=http://imageshack.us/photo/my-images/94/55b8feee3be543c6a7d6ce7.png/]55b8feee3be543c6a7d6ce7.th.png[/URL]

 

And now I want to create only a continent with nearest islands.

I tried to use Gauss function for reducing squares far from center and I tried to use a simple circular reduction for ignoring squares far from center.

Both of this ways gives me a map with good-loking maps, but with circular contour of reduction at edges of reduction zone.

Here an example

 

[url=http://imageshack.us/photo/my-images/191/a3b30e4f834642839a4b8f6.png/]a3b30e4f834642839a4b8f6.th.png[/URL]

 

I need your opinion to solve this problrm. What another methodics I can use to create best random maps? wink.png

I'm using C#.

 

Thanks in advance!

Denis

 

P.S. Sorry for my English

Edited by Barrett

Share this post


Link to post
Share on other sites
hupsilardee    491

Grow/shrink the circle using 1D perlin noise? Make the radius a function of the angle, something like this:

 

// PerlinNoise1D(x) returns a value in [0, 1]
 
radius = radius * (PerlinNoise1D(angle) + 0.5);

Share this post


Link to post
Share on other sites
Barrett    174

I found a solution that look like good for me.

I 'm creating a radom "fuzzy" rectangle as reduction area/

 

Here are some examples

[URL=http://imageshack.us/photo/my-images/824/040ed4232e7d422d82c503b.png/]040ed4232e7d422d82c503b.th.png[/URL][URL=http://imageshack.us/photo/my-images/836/7eb4aa7a04b24f138a8a945.png/]7eb4aa7a04b24f138a8a945.th.png[/URL]

 

And get some maps like that

[URL=http://imageshack.us/photo/my-images/507/7b16caaff11e45fcb9fd129.png/]7b16caaff11e45fcb9fd129.th.png[/URL]

 

It looks nice.

Any ideas of improving this algorythm?

Share this post


Link to post
Share on other sites
Barrett    174

Grow/shrink the circle using 1D perlin noise? Make the radius a function of the angle, something like this:

 

 

// PerlinNoise1D(x) returns a value in [0, 1]
 
radius = radius * (PerlinNoise1D(angle) + 0.5);

Oh, good idea! I will try it and upload here some results.

Edited by Barrett

Share this post


Link to post
Share on other sites
FLeBlanc    3141


Grow/shrink the circle using 1D perlin noise? Make the radius a function of the angle, something like this:
 

// PerlinNoise1D(x) returns a value in [0, 1]
 
radius = radius * (PerlinNoise1D(angle) + 0.5);


Oh, good idea! I will try it and upload here some results.


Here's some results for you:

CK9dbvJ.png

Since you are using a 1D function indexed by angle, the pattern ends up as a randomized star-like shape. You can't generate disconnected islands this way. All pixels lying along a given angle will use the same radius.

However, if you use a 2D noise function, indexed by (x,y) to modify the radius, you can get some disconnects:
radius=radius+noise2(x,y)
Gk5mgAf.png

Pixels lying along a given angle won't use the same radius, so some pixels further out might use a shorter radius than pixels lying nearer in. This means that voids, or holes, open up, providing the necessary turbulence to create disconnects.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this