Generación de terreno para plataformas 2D basadas en mosaicos

15

Actualmente estoy trabajando en un juego de plataformas 2D basado en mosaicos similar a Terraria de alguna manera, aunque tengo dificultades con la generación del terreno. Tengo algunos conceptos básicos, aunque no me parecen útiles.

He probado algunas técnicas diferentes, como Perlin Noise, y he leído sobre otras, como Midpoint Displacement, aunque no estoy seguro de cuál sería la mejor, o una combinación de diferentes técnicas para generar diferentes áreas. (Como el desplazamiento del punto medio para la forma general del terreno y el ruido de Perlin para las cuevas).

He encontrado una excelente explicación de cómo podría superponerlo con la Biblioteca de ruido accidental , aunque está en C ++, y no conozco suficiente C ++ para compilarlo en una DLL que puedo usar desde C #. He intentado copiar esto en C #, aunque no sé cómo puedo fusionar dos efectos (el gradiente para la base general y luego el fractal para el detalle).

Actualmente estoy usando un Plasma Fractal y los resultados son extremadamente variados. Por ejemplo, puede generar terreno donde casi no hay superficie, o puede generar terreno donde no hay superficie en absoluto.

Sin embargo, un ejemplo de un mapa correcto sería mejor con algunas mejoras más. (El negro es sólido, el blanco es aire):

Buen mapa

Y un ejemplo de un mapa terrible. (El negro es sólido, el blanco es aire):

Mapa terrible

Básicamente, lo que pregunto es cuál sería una mejor manera de generar el terreno, o forzarlo a asegurarse de que haya una superficie razonable, con el tiempo de generación lo más rápido posible. O, alternativamente, cómo podría lograr el mismo resultado que la Biblioteca de ruido accidental, pero en C #.

Cualquier ejemplo sería muy apreciado.

Dimensiones sombreadas
fuente
Hola, me preguntaba cómo hiciste esto. Estoy tratando de entender cómo generar mundos como este y me gustan los resultados que está obteniendo. ¿Qué algoritmo estás usando porque no parece ruido de perlin 2D y definitivamente no es ruido de perlin 1D?
G3tinmybelly

Respuestas:

8

Intentaría seguir con el ruido de Perlin, pero agregando un peso basado en la altura, para asegurar una cierta densidad promedio en ciertas altitudes. Para citar parte de la publicación de Notch sobre la generación de terreno de Minecraft :

Así que cambié el sistema a un sistema similar basado en el ruido 3D Perlin. En lugar de muestrear la "altura del suelo", traté el valor del ruido como la "densidad", donde cualquier cosa menor que 0 sería aire, y cualquier cosa mayor o igual a 0 sería tierra. Para asegurarme de que la capa inferior sea sólida y la superior no, simplemente agrego la altura (compensada por el nivel del agua) al resultado muestreado.

Esencialmente, estás tomando una pequeña porción de un terreno de Minecraft. Por lo tanto, genere ruido 2D Perlin, pero péselo de modo que cualquier cosa por encima de cierto punto sea probable que sea aire, y cualquier cosa por debajo de un cierto punto probablemente sea ​​tierra.

Esto le dará un buen terreno, con algunos voladizos y características interesantes, así como algunas cuevas e islas flotantes. (Si no desea islas flotantes, puede probarlas y eliminarlas manualmente). Este método no le proporcionará elementos como túneles, por lo que querrá un método para agregarlos en la generación posterior al terreno, como un del paseo aleatorio .

dlras2
fuente
No estoy del todo seguro de que esté usando el ruido Perlin a su máximo potencial. Después de hacer exactamente lo que describiste, acaba de hacer muchas cuevas, con muchas islas flotantes. No hay definiciones reales de tipo de terreno. Usando un gradiente para sopesar los resultados, obtengo este resultado .
Dimensiones sombreadas
@ Dimensiones sombreadas: los parámetros de ruido de Perlin necesitan ajustes. Tiene un ruido muy variable, cuando lo que desea es un patrón mucho más suave y amplio. Echa un vistazo a freespace.virgin.net/hugo.elias/models/m_perlin.htm e intenta jugar con tus parámetros. Prueba con menor persistencia y menos octavas. (Estos términos pueden variar, así que lea ese artículo.)
dlras2
Bien, gracias por el enlace. También descubrí que el peso no funcionaba según lo previsto después de cambiar algunos parámetros.
Dimensiones sombreadas
De acuerdo, modifiqué bastante los parámetros y obtuve algo que es bastante aceptable, al menos por ahora. También eliminé las cuevas generadoras solo para esta prueba, ya que quería hacer el terreno real primero. Este es el resultado final . Solo necesito agregar cheques para eliminar esas islas flotantes. Gracias de nuevo.
Dimensiones sombreadas
@ Dimensiones sombreadas: ¡bonito! Muchas veces, los buenos terrenos provienen simplemente de ajustar los parámetros y superponer el ruido. Pasará un tiempo antes de que obtenga algo con lo que esté muy contento, pero siempre puede usar lo que tiene ahora y volver para agregar ajustes finales. ¡Buena suerte!
dlras2