The idea of using noise to generate game terrain has been around for a while and making it look decent is one of the most challenging and in my mind, rewarding task I have encountered in game programming.
If you are doing it realtime, it can be really challenging. Otherwise, just go nuts.
The hardest thing for me was always making this kind of world look good when rendered. So few resources, so many vertices and so much stuff you can't know is hidden until one frame later.
Otherwise, I just try to one thing at a time, or I will go insane.
Good luck with all your projects, and just message me if you want to talk about procedural generation things. Not that I know what I'm doing or anything.
At least it looks ok http://fbcraft.fwsnet.net/morning.png but the FPS is really bad.
Anyways,
the first thing to do when doing terrain generation is to make 2 steps:
1. create a function that returns an ID for each integral (x, y, z)
this is the procedural generation function, unless you aren't doing things realtime, in which case you can do several steps including volumetric fills etc for lakes
you basically use noise to generate density, and where density is < 0 add dirt (or stone, preferrably dirt as we will see later), otherwise AIR
if the value was AIR but the Y coordinate value was less than WATERLEVEL (eg. 64 blocks) just return water instead
2. postprocess the terrain from top to bottom to make it natural
start at the top, for each air block all the way down you have "atmospheric light" with you, so any dirt turns into grass
after you hit ground after a certain amount of blocks you should fake pressure by converting dirt into stone so that the world is layered
you can use noise here to emulate pressure differences
before postprocess create a 2d noise value:
use to create some variance in the seabed height, so that some green terrain is underwater, and other places have long beaches
use to create some forest boundries, use the inverse to add more dense ground foliage.
looks very natural now
use volumetric fill on randomly picked stones to quickly add minerals
3. Realize too late that the world scale is all wrong
My world is basically a giants version of a real world (I guess?) which makes it look really small when high up.
World scale is important! And don't write your generator in a dead language, like me.
I have collected some useful noise functions in my (new) generator (which doesn't generate anything yet):
https://github.com/fwsGonzo/generator/tree/master/terrain/noise