Great article, but there's one piece I can't quite wrap my head around -- the inner workings of turbulence and how it helps us go from a 2D plane to a 3D volume with overhangs.
Would it be accurate to say that Fractal1 takes as input the x and z values in the world, and returns a y value that is treated as the input to the turbulence function? And then the turbulence function is evaluated along a column of y values to convert a linear gradient to a perturbed gradient, which in the end specifies whether a particular cell should be rock or air?
Is the turbulence function a black box that has its own non-linear, non-monotonic mapping of its input to its output, possibly produced by its own version of Perlin noise? If this is not the case then I'm failing to see how overhangs and such are produced. (and btw what would be the corresponding module type, in say, libnoise?)