开发者

How is a 3d perlin noise function used to generate terrain?

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, he mentioned using a 3D Perlin noise function for the terrain generation on Minecraft. Does anyone know how that would be done and why it would be useful? If you are pas开发者_如何学运维sing x, y, and z values doesn't that imply you already have the height?


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.


If you are still confused, I actually had the same question and figured it out and made perhaps the only tutorial video on the subject on YouTube as a whole!

My Video Explaining 3D Perlin Noise: https://youtu.be/plLVPJJCL8w

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜