¿Cómo puedo identificar regiones de características en un mundo generado por procedimientos?


26

Estoy construyendo una isla. Uso la solución clásica de mapa de altura: con una función de construcción de colinas, evitando las esquinas del mapa, hago altitud. Entonces, el ruido perlin me da algunas variables climáticas para manejar los biomas. Ahora, me enfrento a dos desafíos que, de alguna manera, están conectados:

  • En Dwarf Fortress, uno de los aspectos más interesantes de la generación mundial es cómo el juego parece "conocer" las áreas y darles nombres, aunque no son formas rectangulares. Me gustaría poder "reconocer" mis bosques, mis ríos, mis colinas ... ¿alguna idea de qué tipo de algoritmo podría usar para escanear mi mapa e interpretar sus áreas? ¿Y cómo almacenarías eso? Estoy usando un gráfico básico de C ++ hecho de un vector de vector de "objeto de mosaico".

  • Esta isla debe dividirse en áreas políticas, no solo en regiones puramente naturales. Podría usar montañas y ríos para hacer "fronteras naturales", pero mi mapa generado por procedimientos no garantiza que tendré buenos "enclaves" que formarían un reino; Podría encontrarme con una gigantesca área política "en forma de cinta" rodeada de micro reinos. Otra posibilidad sería buscar áreas apropiadas para una ciudad o un castillo. Luego, "haga crecer" un área política a su alrededor. Pero de nuevo, me gustaría tener algunos algoritmos bien conocidos antes de intentar idear el mío.

Esta pregunta podría interpretarse como un poco vaga, por lo que una forma de reformularla sería: ¿cómo dividir (sin modificar) un mundo generado por procedimientos en áreas adecuadas para el juego? Gracias de antemano por tu ayuda.


Gracias por la corrección, y perdón por la mala calidad de mi inglés :)
Raveline

Su inglés es excelente, es solo que el "título" se formula preferiblemente como una pregunta en los sitios de StackExchange.
dlras2

Respuestas:


21

Amitp sugiere usar cuencas hidrográficas para definir varias regiones, como se explica en su publicación sobre la generación de mapas poligonales . Las cuencas se ven mejor generando un mapa usando su demo . La ventaja de usar cuencas hidrográficas para ayudar a subdividir continentes es que proporciona límites perpendiculares a la costa, mientras que las montañas generalmente proporcionan límites paralelos.

Si subdividiera regiones geográficas, usaría una combinación de montañas, cuencas hidrográficas y detección de bordes en los diversos biomas de mi mapa.

También señalaré que las regiones políticas generalmente abarcan muchas regiones geográficas. Primero generaría regiones geográficas, luego asignaría a cada región una calificación de deseabilidad (¿es una costa? ¿Hay oro? ¿Buenas tierras de cultivo?) Y un costo de viaje (terreno empinado? Bosques pesados?). Luego, utilizando su algoritmo de ruta favorito , genere un mapa de calor de viaje entre regiones deseables. Estos terminarán siendo tus caminos, y puedes construir tus límites políticos desde allí. Estos límites generalmente tendrán muchos caminos dentro de ellos, y menos caminos entre ellos.


1
Gracias por tu ayuda. Ya conocía la solución de Amit, y aunque la encontré bastante elegante, no sé lo suficiente sobre las matemáticas detrás (¡tendría que estudiarlas, lo que haré tarde o temprano, pero no ahora!). Pensar en términos de cuenca hidrográfica ciertamente podría ayudarme y ajustar el algoritmo de generación de ríos no debería ser demasiado difícil. Me encanta su solución para construir carreteras y límites políticos, tengo que considerar cómo voy a implementarla exactamente, ¡pero la idea es genial!
Raveline

@Raveline: si utiliza la generación de límites políticos, ¡comente aquí y hágamelo saber! Me encantaría ver cómo resulta.
dlras2

13

Para agregar a la respuesta de Dan Rasmussen :

Una de las razones principales por las que cambié de Perlin Noise ( este proyecto ) al uso de polígonos ( este proyecto ) es que los polígonos proporcionan una estructura agradable para asignar áreas más grandes (regiones políticas, bosques, desiertos, áreas con nombre, límites, etc.). Comenzar con la estructura y luego generar el mapa es similar a la representación de polígonos, algo que es relativamente fácil. Comenzar con el mapa y luego inferir la estructura es similar a la visión por computadora, algo que es relativamente difícil, pero posible. Quiero tanto la estructura como el mapa, así que decidí tomar la ruta relativamente fácil de construir un mapa en la parte superior de la estructura (nodos y bordes).

Incluso entonces, descubrí que quería estructuras más grandes que las que había generado. Las cuencas hidrográficas fueron un intento de construir esas estructuras más grandes, pero necesito probar más enfoques para agrupar polígonos juntos. No he encontrado algo con lo que estoy feliz.

No estoy seguro de cómo lo hace la fortaleza enana. Dado lo brillantes que son esos tipos, no me sorprendería si tuvieran un sofisticado algoritmo de "visión por computadora".


Entiendo el razonamiento, aunque no estoy seguro de que tu camino sea tan fácil ... Como mi proyecto es bastante humilde, intentaré parchear algo no demasiado sofisticado, pero sin polígonos, ya que significaría estudiar mucho más los algoritmos implícito. (PD: su sitio web es una fuente increíble de inspiración y ¡me encanta!)
Raveline

3
El artículo de generación de mapas poligonales fue excelente.
Raine

3

Para su primera pregunta, mi mejor conjetura sería utilizar un algoritmo de detección de bordes para encontrar los límites de sus regiones naturales (bosques, colinas, ...). Existen muchos algoritmos para este tipo de problema.

Para la segunda pregunta, puede usar su propia idea para engendrar un castillo (generalmente en la cima de una colina para una buena defensa y cerca del agua dulce), luego use un algoritmo voronoi para tener regiones alrededor de cada castillo. Puede usar el ruido o los límites de sus biomas para hacer que los límites sean más realistas.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.