Update 12: Terrain Generation Experiments

I talked before about the improved noise system. I’ve been playing around and experimenting with different parameters, getting some interesting results. The difference between a real island and my fake video game island is that of scale. I want mountains, sweeping rivers, wildly different biomes, all on one island that spans maybe only 1.5 miles coast to coast. So it wouldn’t make sense for my islands to perfectly imitate the natural forming islands of earth. I wouldn’t say the terrain of the islands below look realistic, however these islands might not have even been created using the same tectonic processes. I’ve thought a bit about how far a fantasy world can really deviate from the real world. I think, that If the world looks like it was formed by some sort of natural process then it gets a pass. The real question is weather these maps are fun to play and build on. They definitely provide some nice variation across seeds with each map having some distinctive features.

Below I’ve demonstrated the effect of changing lacunarity on an FBM noise which acts as an input to the frequency of a Ridged Multi noise. So thats one set of noise acting as an input on another noise. Lacunarity starts at 0.0 and increments by 0.1 to a final value of 2.5.

set1272 (1)

Lacunarity (2000 x 2000)

Below you can see the effect of changing the frequency of the input noise.


Frequency (2000 x 2000)

The problem with this noise generation is that quite often I get a dud seed, especially when using noise of lower frequency. Sometimes an island will be very small, or overly large. I’m thinking of writing a function which discards maps based on total landmass, then keeps trying new maps until it finds a good fit. I would only need to sample the noise few times, maybe 200 samples, to get a reasonably accurate landmass approximation.

Below is the effect of changing intensity on the input noise. It starts as a sphere because there is a radial gradient subtracted from the noise to act as a falloff. With our input noise having 0 intensity it means that the main noise has a frequency of 0, the noise becomes just a flat color.


Intensity (2000 x 2000)


Islands with increasing temperature (2000 x 2000)

image 3496.png

Island with biomes (1000 x 1000)


2 thoughts on “Update 12: Terrain Generation Experiments

  1. Casey McCandless

    I just landed on your blog today as I was looking for information on Urho3D and “voxel” game worlds. I am curious if your changes are planned for Urho3D/OpenSource as I would like to help out, I planned to start toying around with “voxel” rendering for a game engine and getting ready to head down the road it looks like you have already gone.

    I have a background in a similar rendering style as I developed volume rendering for Oil/Gas that used opengl and streaming chunking of the data to the GPU (also LOD/compression).

    1. harrykilian Post author

      Hi, I have not really made many changes to the Urho source in order to get to this point. It’s all built on top of urho. Also, what I’m doing here with the terrain isn’t true voxels, It’s really just a specialised heightmap with some trickery going on to make it look like voxels. However I do use voxels elsewhere using polyvox(http://www.volumesoffun.com/polyvox-about/), which is dead simple to integrate into urho. It does the meshing for you which can easily be plugged into an urho3d custom geometry.


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s