I can wrap my head around using a 2D Perlin noise function to generate the height value but I don\'t understand why a 3D Perlin noise function would be used. In Notch\'s blog, h
The article says exactly why he used 3D noise:
I used a 2D Perlin noise heightmap... ...but the disadvantage of being rather dull. Specifically, there’s no way for this method to generate any overhangs.
So I switched the system over into a similar system based off 3D Perlin noise. Instead of sampling the “ground height”, I treated the noise value as the “density”, where anything lower than 0 would be air, and anything higher than or equal to 0 would be ground.
Well, Minecraft is about Mines. So, what Notch tried to solve was: "How do I get holes / overhangs in my world?"
Since 2D perlin noise generates nice/smooth looking hills, 3d perlin noise will generate nice/smooth hills and nice holes in your 3D voxel grid.
An implementation can be found here (while that is an N-dimensional solution).
In other use-cases the Z component of a 3D perlin noise is set to the current time. This way you will get a smooth transition between different 2d perlin noises and that can be used as groundwork for fluid textures.
You should look at the Minetest source, specifically at the files noise.cpp and map.cpp.