Planet sized terrain method

Started by
2 comments, last by Hawkblood 9 years, 11 months ago

I am wanting to generate a planet's terrain. I want the detail to increase as the viewer approaches the surface. Here is a video showing it in action: (this is not mine, it's just an example)
[media]http:

[/media]

The rough idea is to have 6 surfaces (cube faces) that will be "spherefied" once the detail level and the height map is applied. This will make a planet-shaped mesh with a rough surface. Each of the face of the cube is a separate quadtree object that uses the "distance" from the center (camera) to determine what detail level each chunk of the quadtree is at.

This works fine on approach, but I have a maximum level of detail that I can't get past. I'm using Perlin noise to generate the surface features, but it seems very plain until I get around 10 levels of detail. At 10 and higher, the noise starts to become lines like rows of plants in a garden. Here is an image:
[attachment=21200:Untitled.png]

I'm really not sure where to start to correct this. I think there is a limitation to Perlin noise that is causing this. It may be the use of floats causing this or it could be the sample size..... Don't know.

If this limitation exists, I think I might have to come up with a way to generate greater detail using a trick I've been thinking about.....

I don't want to waste too much time on this because I want to get back to the meat of my game. I put this part of it off as long as I can...

Advertisement

It's kinda hard to see in the screen shot but it looks like your higher frequency noise has too large an amplitude and is becoming more noticeable. A note on single-precision floating point numbers is you should be good for up to 6 significant figures of precision, after that you can start to acumulate rounding error so depending on how high your heights are you should be fine, (unless you are dealing with millions of units in height but even Everest is under 9000m so you shouldn't have any issues with that)

Normally when doubling the frequency you are sampling at, you half the amplitude so it doesn't become too noticeable in repetitions.

As a side note for your generation technique, I've found that perlin noise is quite good at filling in gaps between a low resolution height map for the whole world. That is you could take a low resolution human authored map and use that as a base height value (something quite large) and then add high detail using perlin noise. This can allow you to design your world to have specific continents, mountains, lakes, etc. You could even add extra channels that specify different properties for your perlin generation, ie. specify that this area is a desert and should be full of sand dune type terrain or have grassy plains that would have much lower frequency hills.

When messing around with noise functions, it's helpful to be able to visualize it with a grayscale image. It's very hard to tell what's going on with terrain geometry like that.

I'm using an amplitude of 200.0f.... The value I get from the calculation is applied to the vertex. When rendering, I use a scale value for the entire terrain so that it is similar to Earth's scale. At this point 1unit==1km.

My values are:


SetValues(8,0.000001f,200.0f,98765678);

where SetValues is:


void SetValues(int octaves,float freq,float amp,int seed);

This topic is closed to new replies.

Advertisement