Estoy trabajando en un juego estilo Worms y quiero generar un terreno de procedimiento. Anteriormente hice mucha generación de terreno usando ruido perlin, y esto es lo que comencé a usar para este juego. El único problema es que es demasiado simple y aburrido, lo que me da algunas colinas, pero no la complejidad que quiero. Me gustaría tener características como cuevas y montañas colgantes y no me importa las islas flotantes y demás. Algo así, pero incluso más loco estaría bien:
Pensé en generar primero el terreno usando el ruido clásico de perlin, luego solo eliminar partes para crear cuevas y lo que no, pero tengo problemas para guiar la eliminación de esas partes. ¿Hay alguna alternativa para generar tal terreno?
Respuestas:
Te sugiero que comiences con 2D Perlin-noise. Algo como esto:
Luego aplique un umbral en la imagen, de modo que obtenga varias islas aisladas, como se muestra aquí:
Elegí un umbral de 0.04, todo por encima del umbral sería de color azul. El resto queda negro. Luego, después de eso, es hora de determinar qué "islas" mantener y cuáles desechar.
Un posible enfoque sería recorrer la imagen de izquierda a derecha a varias alturas y seleccionar "islas" que se cruzan dada una cierta probabilidad. En la imagen de ejemplo, la línea más baja tiene una probabilidad del 100%, por lo que se seleccionará cada isla que cruce (blanco lleno). La segunda línea tiene una probabilidad del 50% y la línea superior tiene una probabilidad del 10%.
Una vez que haya marcado sus islas de esa manera, puede cerrar las brechas intermedias aplicando una operación morfológica ( dilatar )
Y hay un posible paisaje.
La "granularidad" del ruido determinará cuán pequeños serán los detalles en su mundo. Entonces, probablemente sea mejor experimentar con estos valores.
Además, dónde y con qué probabilidades se ubican sus "líneas de selección", el resultado será muy diferente. Si tiene una línea cerca de la parte superior de la imagen con alta probabilidad de "seleccionar" una isla, entonces puede construir algún tipo de paisaje de cuevas, etc.
fuente
24
parabaseX
ybaseY
, 1 octava y elegí emitir ruido en escala de grises e inhabilité el "fractal". ¿En qué idioma estás implementando esto?Comenzaría con un ruido de perlin, filtrado cuidadosamente. Terminarías con algo como en la imagen adjunta a la pregunta, con islas flotantes. Juste elimina las islas flotantes luego usando un algoritmo de conteo como los discutidos aquí
fuente
De hecho, implementé esto a partir de la excelente respuesta de bummzack.
Estos son los pasos con los que terminé:
Y este es un ejemplo del resultado:
Escribí un artículo detallado sobre todo el proceso aquí y el código (JavaScript) es de código abierto, échale un vistazo si quieres algo listo para usar;)
fuente