2011-05-22 75 views
13

Puedo envolver mi cabeza usando una función de ruido 2D Perlin para generar el valor de altura, pero no entiendo por qué se usaría una función de ruido 3D Perlin. En Notch's blog, mencionó el uso de una función de ruido 3D Perlin para la generación de terreno en Minecraft. ¿Alguien sabe cómo se haría eso y por qué sería útil? Si está pasando x, y, y z valores, ¿no significa que ya tiene la altura?¿Cómo se usa una función de ruido 3D perlin para generar terreno?

Respuesta

12

Bueno, Minecraft es sobre Minas. Entonces, lo que Notch intentó resolver fue: "¿Cómo puedo obtener agujeros/voladizos en mi mundo?"

Dado que el ruido perlin 2D genera colinas agradables/lisas, el ruido perlin 3D generará colinas agradables/lisas y agradables agujeros en su cuadrícula 3D voxel.

Se puede encontrar una implementación here (mientras que es una solución N-dimensional).

En otros casos de uso, la componente Z de un ruido 3D perlin se establece en la hora actual. De esta forma obtendrás una transición suave entre los diferentes ruidos 2d perlin y que se puede usar como base para texturas fluidas.

+1

El enlace está roto, archive.org afortunadamente tiene una instantánea de 2008: http://web.archive.org/web/20081118194515/http://peter.grumpykitty.biz/perlin.html – Tyron

+0

@Tyron ¡Gracias! Se lo agregó al texto de respuesta – jpaugh

41

El artículo dice exactamente por qué se utiliza el ruido 3D:

utilicé un ruido de alturas 2D Perlin ... ... pero la desventaja de ser bastante aburrida . Específicamente, no hay forma de que este método genere voladizos.

Así que cambié el sistema a un sistema similar basado en 3D Perlin ruido. En lugar de muestrear la "altura de altura", traté el valor de ruido como la "densidad", donde cualquier valor menor que 0 sería aire, y cualquier mayor o igual a 0 sería tierra.

+6

¡Hater tiene que odiar! – Brian

4

Debería consultar la fuente de Minetest, específicamente en los archivos noise.cpp y map.cpp.

+1

El proyecto está realmente alojado en GitHub - [noise.cpp] (https://github.com/minetest/minetest/blob/master/src/noise.cpp) y [mapgen.cpp] (https://github.com/minetest/minetest/blob/master/src/mapgen_v7.cpp). – new123456

+0

@ new123456 ¡Gracias! Enlaces agregados. – jpaugh

Cuestiones relacionadas