El ruido 3D se vuelve obligatorio si el terreno necesita redes de cuevas y voladizos.
Para extraer una isosuperficie de la información de densidad, las 2 técnicas más populares son Marching Cubes (MC) y el nuevo Dual Contouring (DC). La estructura de datos necesaria es bastante diferente según el método elegido.
Como se mencionó anteriormente, el artículo Geiss 3 de GPU de Geiss es un punto de partida muy instructivo para comprender e implementar terrenos MC en la GPU (tenga en cuenta que su enfoque MC se ejecuta completamente en la GPU y requiere al menos SM4 - GS-compatible).
Debido a que los datos de densidad en voxels MC solo pueden permanecer en los bordes de voxel, el MC clásico puede contornear el volumen sin preservar las características de bordes afilados. DC no sufre este inconveniente ya que la información de densidad se expresa como un punto 3D (minimizador QEF) en cualquier lugar dentro del vóxel más el signo en cada esquina.
Por otro lado, MC no sufre de caras de auto-intersección porque todos los triángulos generados están encerrados en sus correspondientes vóxeles, mientras que DC necesita cálculos adicionales para evitar las intersecciones entre las caras generadas. Los autores de DC abordaron este problema en una versión mejorada de su algoritmo.
http://www.cs.wustl.edu/~taoju/research/interfree_paper_final.pdf
http://www.cs.berkeley.edu/~jrs/meshpapers/SchaeferWarren2.pdf
Este compañero también propone un enfoque probablemente más limpio basado en análisis convexo / cóncavo para evitar las auto intersecciones. Utiliza también mejores reglas de división cuádruple para ayudar a preservar la orientación del borde:
http://www2.mae.cuhk.edu.hk/~cwang/pubs/TRIntersectionFreeDC.pdf
Classic MC tampoco está listo para usar "sin grietas" y puede requerir parches de grietas si se ejecuta en octrees sin restricciones. DC no sufre de este último problema.
Aquí hay una encuesta bastante agradable y completa de la mayoría de las técnicas de extracción de malla:
http://www.cs.berkeley.edu/~jrs/mesh/
Un enfoque octree / voxel es intrínsecamente "CSG-friendly", lo que hace que sea más fácil planificar una estrategia de nivel de juego completamente "destructible", pero si uno necesita implementar todo esto en un juego, la profundidad del octree también tendrá que ser frustum -dependiente.
Si todo el contenido cabe en la memoria o se transmite correctamente, los datos también se pueden usar para representar AO y calcular la física / colisiones.
Supongo que, en ese ejemplo en particular, es que usó el valor z para determinar qué tipo de material: roca madre, piedra, tierra o aire.
fuente
Minecraft utiliza el algoritmo de cubos de marcha para generar terreno en 3D. No tengo una referencia para esto, lo siento. No estoy seguro exactamente de qué estaba hablando Notch cuando mencionó la función de ruido Perlin, tal vez una semilla para el algoritmo de cubos de marcha. Más información aquí:
Y un excelente artículo de GPU Gems si está interesado en marchar cubos:
fuente
fuente