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):
Y un ejemplo de un mapa terrible. (El negro es sólido, el blanco es aire):
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.
fuente
Respuestas:
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 :
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 .
fuente