Me gusta la forma en que Age of Empires II genera mapas aleatorios (buena variedad, transiciones de biomas decentes, mapas parecidos aleatorios sin sentirse caóticos), pero estoy luchando por replicar el estilo. He intentado utilizar, por ejemplo, el ruido Perlin, pero todo sale demasiado homogéneo o, si no, el valor Perlin -> las heurísticas del terreno son demasiado sensibles y frágiles para crear una variedad de tipos de mundo.
Recuerdo que el tipo de mapa AoE2 "The Unknown" anunciaba "100,000 mapas posibles", sugiriendo cierto uso de números de semillas, pero no estoy seguro de cómo usar los números de semillas para producir la variedad que vi.
¿Qué algoritmos y heurísticas podría usar para producir mapas aleatorios que se sientan como mapas aleatorios de AoE2?
Editar para ser más específico:
Pensando más en mi problema y estudiando lo que me gusta del motor de mapas aleatorios de AoE2, creo que mi mayor problema es administrar la distribución del agua y la vida de las plantas en el mapa . Ahora veo que también lo he vinculado a mi mente con "transiciones de bioma que tienen sentido", pero ese es un problema diferente (aunque espero que mi uso continuo del ruido de Perlin dificulte la resolución).
He agregado varios mapas aleatorios de AoE2 que resaltan lo que me gusta de su motor de mapeo, que mis propios esfuerzos no pueden reproducir. Todas las capturas de pantalla se toman del tipo de mapa aleatorio, "Personalizado" -> "Lo desconocido". No le dije al juego que usara geografías específicas como archipiélagos.
Más abajo hay imágenes de mi propio motor de mapas. Cada píxel corresponde a un mosaico de mapa AoE2.
Una complicación para mi proyecto es que quiero que los mapas sean mucho, muchas veces más grandes que los mapas AoE2. Por lo tanto, cualquier motor que use debe ser capaz de crear el rango completo de biomas en cada mapa, y no un conjunto estrecho de biomas por mapa, como los que usa AoE2.
Mapas de Age of Empires II
Aquí hay un ejemplo que presenta lagos del interior y algún tipo de cosas que parecen ríos. Me gusta cómo el mapa incluye una gran cantidad de agua dispersa, pero esa agua todavía está algo concentrada: hay grandes extensiones de tierra disponibles para construir su imperio. No tienes que pasar todo el juego planeando tu ciudad alrededor del agua.
Aquí hay un ejemplo similar donde el juego fue lo suficientemente inteligente como para conectar islas con pantanos transitables. No puedo imaginar cómo un algoritmo basado en ruido crearía el pantano allí, y solo esos lugares. Además, observe cómo el juego creó la tierra de modo que cada jugador tiene su propia franja de tierra privada y grande, todo para comenzar. No creó parches de tierra al azar, luego adivina cuál sería el menos terrible para cada jugador.
Me gusta que este mapa también haga un uso intensivo del agua, pero no incluye muchos lagos del interior. Contraste con la primera imagen. Me gusta la forma en que AoE2 crea geografías completamente diferentes utilizando los mismos bloques de construcción. Mi intento de usar el ruido de Perlin falló aquí: o recibo enormes océanos en expansión que eclipsan la masa terrestre, o la Tierra de los 10.000 lagos. También me resultó difícil obtener ambas islas y continentes conectados (piense en Norteamérica / Sudamérica).
Contrasta esta imagen con la de arriba. Muestran que la aridez de un mapa no depende del nivel del agua. La primera imagen presenta un mapa casi desprovisto de agua, pero que contiene bosques y hierba. La segunda imagen tiene una cantidad moderada de agua, pero es un desierto. Me gusta que eso sea posible (piense en tener a Nuevo México o el Sahara y Costa Rica en su mundo).
Mis propios mapas
He leído en muchos lugares que una buena forma de construir mapas es superponer varios niveles de ruido de Perlin, cada uno de los cuales representa una dimensión diferente de los datos. Siguiendo las recomendaciones populares, fui con elevación y humedad, seleccionando tipos de terreno de la tabla Whittaker aquí .
Tomé dos mapas de perlin, cuantifiqué los valores de cada uno en enteros a través de un simple if perlin_val < x { i=some_int } else if perlin_val < y...
, luego asigné los pares de enteros (elevación, humedad) a una tabla de tipos de terreno (por ejemplo, [1,0] -> desierto tropical, [1,1 ] -> pastizales). Los océanos se incluyeron en este sistema: elevación = 0 océano definido.
Hay una buena variación, y en muchos sentidos se siente como un mundo real, pero hay algunos problemas:
Primero, no hay patrón en las profundidades del océano. Es de esperar aguas poco profundas cerca de la costa y aguas profundas más lejos, no hay rima o razón sobre dónde es
Segundo, toda el agua se concentra en los océanos; no hay lagos o ríos, porque el ruido de Perlin no cae repentinamente a un valor más bajo en medio de un continente.
Crear un equilibrio entre las cantidades de cada bioma es muy, muy difícil. Atribuyo esto a:
El ruido de Perlin sigue una distribución normal, por lo que es difícil estimar cómo ajustar la probabilidad de mapeo de cada dimensión
Tratar de equilibrar múltiples dimensiones es difícil, tal vez quiero más (2,3), así que tengo muchas posibilidades de obtener (n, 3). Bueno, ahora tengo demasiado (3,3) y todo parece estar mal.
Cuando acerqué el ruido lo suficiente como para tener datos uniformes, no estaba obteniendo una muestra muy completa de los valores de Perlin. Así que modificaba mis distribuciones para el mapa que tenía delante, recargaba un nuevo mapa aleatorio y obtenía resultados muy diferentes.
Traté de solucionar el problema de los ríos / lagos haciendo agua a partir de un tercer conjunto de valores de Perlin. Una decisión binaria de agua / tierra, luego aplique todas las cosas anteriores a la tierra. Esto hace que sea mucho más fácil controlar la distribución del agua (aún no es perfecta, pero sí mejor), pero introduce el problema de que hay muchas transiciones de bioma que no tienen sentido. Por ejemplo, parches inexplicables de desierto en medio de exuberantes praderas, nieve en la playa, etc. También es difícil controlar las proporciones de los biomas terrestres, por las razones mencionadas anteriormente.
Al observar los problemas anteriores, probé un algoritmo más simple que solo asignaba el ruido de Perlin a una dimensión. Ahora tengo una variedad de tipos de terreno que aumentan desde 0 = océano profundo -> 1 = océano poco profundo -> 2 = playa ... -> N = nieve. Si bien esto produce islas y continentes, y hace que sea mucho más fácil equilibrar la proporción de cada terreno, los tipos de terreno están demasiado agrupados. Cada masa terrestre parece un mapa de elevación, generalmente sin tipos de terreno dispersos en su superficie. Cada masa terrestre tiene aproximadamente las mismas características, siempre en el mismo orden y siempre en la misma forma de anillo.
fuente
Respuestas:
Echa un vistazo al excelente artículo de Amit Patel que creo que es una especie de recurso por excelencia para la generación de terreno procesal ...
http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/
Lo principal que hace es usar la estructura gráfica para modelar su terreno, no mapas de ruido directos (Perlin et al). No incrustaré sus ilustraciones, pero leí el artículo, y creo que le resultará útil hacerle pensar en un enfoque diferente.
Si está haciendo un juego tipo CIV / AOE, la ubicación de los recursos será importante. No puede hacer que los recursos clave sean demasiado raros, o que los de alto valor sean demasiado comunes. Si presume que cada polígono es una zona con una característica dada (vea las ilustraciones del artículo, tendrá más sentido), podría ver la asignación de recursos a cada polígono en función de algún algoritmo de su elección. Puede ser bastante inteligente haciendo que los recursos en un polígono sean sesgados estadísticamente por los vecinos para que un bosque al lado de un desierto pueda ser raro, pero el bosque al lado de los pastizales sea más común, por ejemplo.
fuente
Creo scripts de mapas aleatorios para Age of Empires 2 . Mi más reciente es para la versión HD.
Si está buscando comprender cómo crear mapas para Age of Empires 2, existe esta excelente guía para RMS (Random Map Scripting) .
Age of Empires utiliza un sistema experto, que permite que los scripts escriban rutinas para las reglas de generación, de las cuales puede aprender mucho. En cuanto a las regiones, imagino que sería simplemente un caso de enmascarar áreas y aplicar diferentes scripts / rutinas a las áreas enmascaradas en consecuencia. Puede ver fácilmente las reglas de generación de los scripts de mapas existentes abriéndolos en un editor de texto. Escribo el mío en el Bloc de notas
fuente