2011-05-22 1 views
13

Je peux enrouler ma tête en utilisant une fonction de bruit Perlin 2D pour générer la valeur de hauteur, mais je ne comprends pas pourquoi une fonction de bruit 3D Perlin serait utilisée. Dans Notch's blog, il a mentionné l'utilisation d'une fonction de bruit 3D Perlin pour la génération de terrain sur Minecraft. Est-ce que quelqu'un sait comment cela serait fait et pourquoi cela serait utile? Si vous passez x, y, et z valeurs ne signifie pas que vous avez déjà la hauteur?Comment une fonction de bruit 3d perlin est-elle utilisée pour générer du terrain?

Répondre

12

Eh bien, Minecraft est sur les mines. Donc, ce que Notch a essayé de résoudre était: "Comment puis-je obtenir des trous/surplombs dans mon monde?"

Depuis bruit 2D Perlin génère belle/lisser les collines à la recherche, 3d bruit de Perlin va générer de belles collines/lisses et trous agréable dans votre grille de voxels 3D.

Une mise en œuvre peut être trouvé here (bien que ce soit une solution à N dimensions).

Dans d'autres cas d'utilisation de la composante Z d'un bruit de Perlin 3D est réglé sur l'heure actuelle. De cette façon, vous obtiendrez une transition en douceur entre les différents bruits 2d perlin et qui peut être utilisé comme base pour les textures fluides.

+1

Le lien est rompu, archive.org a heureusement un instantané de 2008: http://web.archive.org/web/20081118194515/http://peter.grumpykitty.biz/perlin.html – Tyron

+0

@Tyron Merci! Ajouté au texte de la réponse – jpaugh

41

L'article dit exactement pourquoi il a utilisé le bruit 3D:

J'ai utilisé un heightmap de bruit 2D Perlin ... ... mais l'inconvénient d'être assez terne. Plus précisément, il n'y a aucun moyen pour cette méthode de générer des surplombs.

J'ai donc basculé le système dans un système similaire basé sur le bruit 3D Perlin . Au lieu d'échantillonner le "ground hauteur", j'ai traité la valeur de bruit comme la "densité", où rien de plus bas que que 0 serait l'air, et quoi que ce soit supérieur ou égal à 0 serait terre.

+6

Hater doit détester! – Brian

4

Vous devriez regarder la source Minetest, plus précisément les fichiers noise.cpp et map.cpp.

+1

Le projet est actuellement hébergé sur GitHub - [noise.cpp] (https://github.com/minetest/minetest/blob/master/src/noise.cpp) et [mapgen.cpp] (https://github.com/minetest/minetest/blob/master/src/mapgen_v7.cpp). – new123456

+0

@ nouveau123456 Merci! Liens ajoutés – jpaugh

Questions connexes