¿Cómo puedo hacer generación programática de mapas de fantasía?

Encontré este bot de Twitter https://twitter.com/unchartedatlas publicando mapas que parecen sacados de una novela pulp de fantasía.

ingrese la descripción de la imagen aquí

¿Alguna idea de cómo se hacen?

Respuestas (3)

Afortunadamente, el autor, Martin O'Leary, ha publicado un tutorial bastante detallado del algoritmo de cómo se generan los mapas aquí: http://mewo2.com/notes/terrain/ así como también cómo se crearon los nombres aquí: http:/ /mewo2.com/notes/naming-language/ .

Un breve resumen del algoritmo cubierto por la publicación de Martin O'Leary:

  • Cuadrícula: cree un mapa de altura con una cuadrícula de puntos aleatorios. Los puntos aleatorios no parecen naturalistas, así que aplique una iteración del algoritmo de Lloyd a las esquinas de los polígonos de Voronoi.

  • Esquema aproximado: aplique un conjunto de secuencias de primitivas (pendiente constante, conos, manchas) y las operaciones (normalizar, redondear colinas, altura local promedio, establecer el nivel del mar) se pueden variar para producir diferentes tipos de paisajes, como costas, islas y Cadenas montañosas.

  • Erosión: aplique un flujo constante de agua sobre todo el mapa y use el algoritmo de Planchon-Darboux para rellenar las depresiones. Calcular el flujo de agua para obtener ríos.

  • Representar el terreno: la línea de costa es donde el mapa de altura cruza el cero. Ríos en función del flujo de agua y algún suavizado de los puntos. Aplicar sombreado a la pendiente.

  • Ciudades y fronteras: coloque la ciudad cerca del río y penalice la cercanía a otras ciudades y al borde del mapa. Marque la región en función de la distancia, la pendiente, el flujo de agua y las costas.

Este es un resumen aproximado de la publicación de Martin O'Leary. Realmente recomiendo leer la publicación, ya que el autor entra en detalles sobre la generación programática del terreno y la publicación en sí tiene elementos interactivos.

Del mismo modo, la publicación del autor sobre el aspecto lingüístico de cómo se generaron los nombres de los lugares también tiene elementos interactivos.

El proyecto del mapa del terreno es de código abierto en github aquí: https://github.com/mewo2/terrain

El proyecto de nombres es de código abierto en github aquí:

https://github.com/mewo2/naming-language

Otro artículo detallado sobre la generación de mapas programáticos: www-cs-students.stanford.edu/~amitp/game-programming/…
Los enlaces se pudren. ¿Te importaría describir el proceso dentro de la publicación?
@Mast, lo que hay en esos enlaces sería una respuesta muy, muy, muy larga que aún falta ...
El principal defecto de esos programas es que no mapean un mundo completo y armarlo sería extremadamente difícil. Realmente desearía que alguien hiciera uno de esos que funcionaran a escala global, pero eso es poco probable debido a lo difícil que es hacer que esas cosas funcionen correctamente.
@Mast Estoy de acuerdo con la descomposición del enlace, pero si realmente miraste la publicación, es (a) larga y (b) interactiva. Sospecho que cada una de las referencias dentro de la publicación solo merecería su propia discusión, es decir, solo la sección Grid habla de la relajación de Lloyd y los polígonos de Voronoi. El autor está dirigido a una audiencia técnica, pero como proporciona el código y su proceso de pensamiento, pensé que sería al menos una referencia apropiada para este sitio.
@Durakken Sin embargo, sería mejor de lo que es actualmente. Si los enlaces se pudren ahora, la respuesta completa puede desecharse.

El sitio web del creador está bastante bien documentado sobre cómo lo hicieron.

(Esto se mencionó en el chat y alentamos a OP a responder su propia pregunta, ya que es un recurso útil y parecía la mejor manera de documentarlo para la comunidad).

También hay un maravilloso generador de mapas de fantasía en: https://donjon.bin.sh/fantasy/world/

Además, un generador de mapas del mundo más científico en el mismo sitio: https://donjon.bin.sh/scifi/world/ y también un generador de sistema estelar completo: https://donjon.bin.sh/scifi/system/