Entrega Final Compitación Visual - Simulación de erosión por deformación de mesh.

 Simulación de erosión por deformación aplicada a un modelo de elevación.



Universidad de los Andes



Computación Visual



Miembros: Nicolás Rincón y Nicolás Díaz


La generación de terreno por procedimientos abarca un amplio rango de técnicas, con el objetivo de crear de manera eficiente un entorno simulado realista. Algunas de las aplicaciones más famosas de la generación de terrenos procedimentales se encuetran en Minecraft, que genera biomas de forma procedimental, y No Man's Sky, que utiliza técnicas procedimentales para generar planetas y sistemas únicos.


Terreno procedimental en Minecraft


Terreno procedimental en No Man's Sky


Si bien los videojuegos son la aplicación más conocida de generación de terrenos procedimentales, no son la única aplicación. OpenAI ha demostrado la utilidad de entrenar robots en una simulación antes de implementarlos en el mundo real, utilizando el aprendizaje por refuerzo profundo. Hasta ahora, la atención se ha centrado principalmente en enseñar a los manipuladores robóticos tareas complejas, pero los mismos algoritmos también podrían usarse para entrenar automóviles autónomos y otras formas de robots móviles. El desafío con este enfoque es se quiere construir cientos de kilómetros de carreteras fotorrealistas para que los autos conduzcan. Se va a demostrar en lo siguiente como, a través de heightmaps personalizables y una simulación de erosión se puede lograr una aproximación de este tipo de terreno.

Ejemplo de lo que se quiere lograr.



HeightMap

Este paso se baso en usar Perlin Noise para determinar el valor de altura que debe tomar para formar el HeightMap.




Divido en pasos se vería como:

  1. Se crean offsets para añadir más ruido en cada coordenada del hieghtMap, cuyo tamaño es dado en sizeMap.
  2. Se traversa por cada coordenada del mapa y se calcula el valor de ruido.
  3. Se normaliza los valores usando el mínimo y máximo valor para que todos los valores del mapa esten en un rango dentro de [0-1].
Simulación

La función de erosión se puede subdividir en 5 segmentos:

  1. Creación de una gota

La gota se crea en una posición aleatoria dentro del mapa con un volumen, velocidad y vida inicial declarada anteriormente.

      2.  La gota traversa el mapa hasta que su vida se expire.

Para esto primero se interpolación bileniar usando las cuatro coordenadas alrededor de la posición de la gota para saber su gradiente, y por ende la dirección en la que debería ir.
 

Consecuentemente se actualiza la dirección y posición de la gota, y se revisa si esta no tiene una nueva dirección por la que ir o si la gota se salió del mapa, en cuyo caso ya el código termina.



De lo contario se calcula la diferencia entre la altura presente y la previa, la cual se usa para dar la capacidad de sedimiento (cuanta "tierra" puede tomar) para la gota. Entre más rápido va yendo bajo una pendiente, mayor va a resultaría este valor.  



Finalmente se modifica la el valor de altura en el mapa, que indica cuanto la gota tomó o no por el camino. Para esto primero ve si esta yendo hacia arriba o abajo. Si esta yendo hacia arriba, o sea ganando altura, este deposita una fracción de su sedimento. 

De lo contrario, la gota gana una fracción de sedimento y esta se le resta al valor respecto a la posición del mapa en que la gota esta presente.
 

Shader de Pasto

Para dar un vistazo de como la vegetación crecería en el terreno generado se creo un shader que detecta la curvatura de la superficie y dependiendo de su curvatura calcula el color correspondiente.
 




En este caso si la normal del fragmento es igual o cercano 0 significa que este es plano, lo cual le da mayor peso a que este se colorize del color del pasto que el de la roca. 



Ejemplos

Aqui se pueden ver como modificando diferentes valores puede dar como resultado tipos de terrenos variados que pueden representar diferentes formas de paisajes dependiendo en lo que uno quiera lograr.











Comments

Popular posts from this blog

Entrega 4 Computación Visual - Pipeline

FINAL