Carlos Correa
← VenRad

Generador de cuevasvshcave

Cuevas que se generan solas: primero como un mapa en 2D, y después como paredes en 3D dentro de VenRad.

C++ · versión 1.5
Código en GitHub

Mapa de cueva generado en consola: paredes con almohadillas y suelo con puntos

Cómo funciona

  1. Ruido. Se rellena una rejilla al azar a partir de una semilla.
  2. Suavizado. Cada celda mira a sus vecinas y decide si es pared o suelo. Tras unas pasadas aparecen las salas. (autómata celular)
  3. Conexión. Se detectan las salas y se unen con los caminos más cortos posibles. (flood fill y árbol de expansión mínima)
  4. Pasillos. Se trazan entre salas con una anchura irregular, para que no parezcan hechos con regla. (Bresenham y value noise)

La misma semilla siempre da la misma cueva.

De mapa a 3D

Al principio era un cubo por celda, y parecía Minecraft. Ahora las paredes siguen el contorno de la cueva: se extrae el borde, se suaviza y se levanta en 3D. (marching squares y Chaikin)

Pasillo de una cueva en primera persona, con las paredes suavizadas siguiendo el contorno
Paredes suavizadas, vistas desde dentro de la cueva.

Pendiente

El suelo y el techo todavía van por celdas y no encajan con las paredes suavizadas.

Siguiente

Un módulo de ruido común para todo el motor, pasar de cuevas a mundos (pueblos, campos, ciudades) y una versión que funcione en esta web.