Le bruit 3D devient obligatoire si le terrain a besoin de réseaux de grottes et de surplombs.
Pour extraire une isosurface à partir des informations de densité, les 2 techniques les plus populaires sont les Marching Cubes (MC) et la nouvelle Dual Contouring (DC). La structure de données nécessaire est assez différente selon la méthode choisie.
Comme mentionné précédemment, l'article de Geiss sur les GPU Gems 3 est un point de départ très instructif pour comprendre et implémenter des terrains MC sur le GPU (notez que son approche MC fonctionne entièrement sur le GPU et nécessite au moins SM4 - compatible GS).
Étant donné que les données de densité sur les voxels MC ne peuvent rester que sur les bords du voxel, le MC classique peut contourner le volume sans conserver les caractéristiques des arêtes vives. DC ne souffre pas de cet inconvénient car les informations de densité sont exprimées sous la forme d'un point 3D (minimiseur QEF) posé n'importe où à l'intérieur du voxel plus le signe à chaque coin.
En revanche, MC ne souffre pas de faces auto-intersectées car tous les triangles générés sont enfermés dans leurs voxels correspondants, tandis que DC a besoin de calculs supplémentaires pour éviter les intersections entre les faces générées. Les auteurs de DC ont résolu ce problème dans une version améliorée de leur algorithme.
http://www.cs.wustl.edu/~taoju/research/interfree_paper_final.pdf
http://www.cs.berkeley.edu/~jrs/meshpapers/SchaeferWarren2.pdf
Ce boursier propose également une approche probablement plus propre basée sur une analyse convexe / concave pour éviter les auto-intersections. Il utilise également de meilleures règles de fractionnement en quad pour aider à préserver l'orientation du bord:
http://www2.mae.cuhk.edu.hk/~cwang/pubs/TRIntersectionFreeDC.pdf
Classic MC n'est pas non plus «prêt à l'emploi» et peut nécessiter une correction des fissures s'il est exécuté sur des octrees sans restriction. DC ne souffre pas de ce dernier problème.
Voici un aperçu assez agréable et complet de la plupart des techniques d'extraction de maillage:
http://www.cs.berkeley.edu/~jrs/mesh/
Une approche octree / voxel est intrinsèquement "CSG-friendly", ce qui facilite la planification d'une stratégie de niveau de jeu parfaitement "destructible", mais si l'on doit implémenter tout cela dans un jeu, la profondeur d'octree devra également être tronconique -dépendant.
Si l'intégralité du contenu tient dans la mémoire ou est correctement diffusée, les données peuvent également être utilisées pour le rendu AO et le calcul de la physique / des collisions.
Je suppose, dans cet exemple particulier, qu'il a utilisé la valeur z pour déterminer quel type de matériau: substrat rocheux, pierre, saleté ou air.
la source
Minecraft utilise l'algorithme des cubes en marche pour générer un terrain 3D. Je n'ai pas de référence pour cela, je suis désolé. Je ne sais pas exactement de quoi Notch parlait quand il a mentionné la fonction Perlin Noise - peut-être une graine pour l'algorithme des cubes en marche. Plus d'infos ici:
Et un excellent article GPU Gems si vous êtes intéressé par la marche des cubes:
la source
la source