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.