I have tried several different methods to create ‘A realistic world’ but all i can achieve is ether a very flat world with a soft incline or a hilly world… How would i go about including biomes, hill ranges, flatlands, etc?
That has to be done yourself. Simplex/Perlin noise only does so much…Minecraft’s world generation uses Perlin noise, but the cave, biome, mountain ranges, flatlands and other natural formations are all generated using Notch/Mojang’s own algorithms. You should create your own algorithm, like I did. It might take a couple of days, but it’s not that hard. Just a lot of debugging. It’s easier to implement your own algorithm if your world is made of blocks. And don’t follow ThinMatrix all the way, because it’s easier to forget stuff that you learned from someone else than to forget things you learned from experimenting with OpenGL yourself.
Also, it might take a while to figure out how to add biomes and natural formations in the world. It’s not easy, unless you want to “learn” how to do it from someone else. By all means, try to learn things by experimenting. That’s the most effective way.
Switch to real manly noise! OpenSimplex was made by a JGO user in java!
Try increasing the interpolation between sample points for larger spacing between hills.
noise(x / 10, y / 10) to noise(x / 20, y / 20)
Then increase the scaling you’re using for the noise.
height = 5 * noise(x,y) to 20 * noise(x,y)
Then get some erosion going, you can use the random distribution of erosion to make it more varied by just adding some more noise.
height = (20 * noise(x,y)) + (2 * noiseDifferentSeed(x,y))
Just make sure both sample values are the same (x, and y)
This is pretty bad looking though, so you should invest some of your time into hydraulic or thermal erosion.
(Hydraulic erosion requires you to process the map as a whole, you can’t do this on ‘infinite’ maps I don’t think. Thermal is pretty good to though!)
I urge you to make modular pipeline system for heightmaps, many games do this so you can modify a feature more individually. This can be done by a sort of ‘post-processing’ on the heightmap sample by sample, or the map as a whole. If you want some good looking heightmaps, you’re going to need to sacrifice your infinite map. Hydraulic erosion requires a fixed map, and so do many other really cool features of terrain.
Check out world-machine and world-painter for making maps outside your game. (World-Painter can export minecraft heightmaps too!)
Also check out my looping noise! http://www.java-gaming.org/topics/opensimplexnoise-looping-noise/36701/view.html
I like the Simplex Noise implementation from Gustafson, myself. But whichever one uses, mostly the same principles apply.
If you want more abrupt changes, then you need to add higher frequency content. If you want to stay within the Simplex-random-generative algorithm, you can add more octaves, via a fractal weightingl to get steeper slopes. But it is also perfectly legit to “modulate” the simplex algorithm with your own functions over a given area.
For example, I made the graphic below by modulating the function with a sin function on the x-axis and with a radial gradient (getting the slight arch effect, center pole is higher than the end poles).
Or if you want a specific geography, you can just generate it and put in in place (as ShadedVertex suggests) but I’d also use some linear interpolation for a cross-fading at the boundary area between the two sources.
I have made sure not to follow his tuturials by law and have made several changes now such as (May not be seen in this photo since its old); Shadows, Chunking, overlapping terrain (Like on peeks).
Ill try out OpenSimplexNoise when i get back from work and i see where you are coming from but i do still want to try and keep it infinite, ill spend some time over the coming week to try and get a good implementation of OSN working.
In regards to modifying the terrain…maybe in areas where it is deemed ugly, i have already configured my server to send a seed on a players connection so they can generate the worlds chunks, but before submitting them to be rendered, the server sends any corrections to fix the chunk