620 likes | 755 Views
Visualización de Terrenos Multiresolución Prof. Rhadamés Carmona, Lic. Henry Iguaró Universidad Central de Venezuela http://ccg.ciens.ucv.ve Email: rhadames.carmona@ciens.ucv.ve. Agenda: Terrenos y Mapa de Alturas. Generación de mapas de alturas artificiales.
E N D
Visualización de Terrenos Multiresolución Prof. Rhadamés Carmona, Lic. Henry Iguaró Universidad Central de Venezuela http://ccg.ciens.ucv.ve Email: rhadames.carmona@ciens.ucv.ve
Agenda: • Terrenos y Mapa de Alturas. • Generación de mapas de alturas artificiales. • Texturizado básico de terrenos. • Iluminación de terrenos. • Algoritmos Multi-resolución. • Geomipmapping ó GeometricalMipmapping. • ROAM • Bibliografía
¿Qué son Terrenos? • Típicamente un Terreno, es una aproximación a una superficie, real o simulada de una región montañosa, mediante un mayado tridimensional. • La visualización tridimensional de terrenos tiene un gran campo de aplicaciones, entre algunas cabe citar: • Turismo virtual. • Visualización del clima y topología ambiental. • Uso militar, como parte del ambiente en un simulador de vuelo o de combate (con propósitos de entrenamiento). • Juegos de video. • Visualización de obras
Mapas de Alturas Un mapa de alturas es una imagen, normalmente en escala de grises, donde cada píxel representa la altura del terreno. Una característica importante es la continuidad que se presenta dentro de la imagen, es decir, no existen cambios bruscos de contraste entre dos píxeles vecinos.
+ =
Algoritmos para generación de Mapas de Alturas artificiales • Formación por fallas. • Desplazamiento del punto medio. • Deposición de Partículas. • Perlin Noise (ver exposición de generación de nubes procedurales)
Formación por fallas. Es un algoritmo que consiste en ir generando fallas de manera progresiva en todo el terreno. El mapa de alturas para el terreno se inicializa 0 y se procede a trazar líneas aleatorias de extremo a extremo que dividen al mismo en regiones. Después se escoge una de las dos regiones producidas y se le suma un valor de altura (configurable) a todos los píxeles que están dentro de dicha región. A la otra región se le resta otro valor aleatorio. http://www.lighthouse3d.com/opengl/terrain/index.php3?fault
Formación por fallas. + filtro de erosión
Algoritmos para generación de Mapas de Alturas artificiales • Formación por fallas. • Desplazamiento del punto medio. • Deposición de Partículas.
Desplazamiento del punto medio. También conocido como Plasma Fractal o Diamond Square algorithm, consiste en tomar el punto medio de una línea y desplazarlo utilizando un valor apropiado de altura. A B A C B C Altura A B
Desplazamiento del punto medio. Teniendo esta idea en mente, lo siguiente es aplicarla recursivamente para cada nueva línea generada tantas veces como iteraciones se deseen, antes de entrar en cada nueva iteración se multiplica el valor de Altura por 2-rugosidad, donde rugosidad es el factor de aspereza o rugosidad que se desea dentro del terreno. Se puede observar que en lugar de hacer el decremento lineal, como en el algoritmo Fault Formation, se utiliza esta relación exponencial, basado en el factor rugosidad que es tomado como un parámetro del algoritmo. rugosidad = 0.5 rugosidad = 1.0 rugosidad = 1.5 rugosidad = 5.0
Desplazamiento del punto medio. Aplicando ahora este concepto en dos dimensiones, se debe iniciar con un cuadrado que contenga valores iniciales (valores semilla) de altura en cada esquina y calcular el punto medio del mismo, al cual se le asignará el valor de desplazamiento (Altura) obtenido como el promedio del valor de Altura de los cuatro puntos que lo generaron más un valor aleatorio que oscile entre [-Altura/2, Altura/2]. A B A B E C D C D Primer paso del algoritmo Midpoint Displacement (también denominado paso del cuadrado), se asigna un valor inicial de Altura en cada una de las cuatro esquinas del cuadrado ABCD y luego se obtiene el punto medio E.
Desplazamiento del punto medio. F A B A B E E G H C D C D I Repitiendo el paso del cuadrado pero ahora en todos los sub-rectángulos que se formaron por el paso de diamante anterior, se forman los nuevos puntos medios J, K, L y M, como centros respectivos a los cuadrados AFEG, FBHE, GEIC y EHDI
Algoritmos para generación de Mapas de Alturas artificiales • Formación por fallas. • Desplazamiento del punto medio. • Deposición de Partículas.
Deposición de Partículas. Con este algoritmo, se pretende la formación de mapas de alturas que representan terrenos con aspecto volcánico o terrenos formados a partir de erupciones volcánicas. Basado en el campo del procesamiento molecular, el procedimiento se inicia con un mapa de alturas vacío, en el cual se escoge un punto (x,y) al azar en donde “se deja caer” una partícula. La próxima partícula se lanza en alguna de estas posiciones random: (x+1,y), (x-1,y), (x,y-1), (x,y+1). Opcionalmente, cada vez que se agregue una partícula, se agita hasta que se “derrame” en los vecinos hasta que no pueda continuar (tal cual como la lava se esparce cuando fluye por la tierra). Se establece un # de iteraciones. Si se quieren varios picos, se puede volver a empezar con otro random (x,y).
Deposición de Partículas. (Px, Py) (Px, Py) Partícula Nueva Partícula (Px, Py) Mapa de Alturas (vacío) Mapa de Alturas (Px, Py) (Px, Py) Escoger a un vecino ? (Px, Py) (Px, Py) Si no hay otro vecino, escoger al que este disponible Nueva Partícula (Px, Py)
Deposición de Partículas. (Px, Py) No hay vecinos para continuar “derramando” la partícula Nueva Partícula (Px, Py) Nueva Partícula ?
Texturizado básico de Terrenos. Generación de Texturas Procedimentales (Texturas artificiales) • Solicitar al usuario un conjunto de texturas que representen las distintas etapas del terreno (agua, nieve, fango, grama, etc). • Se crea el buffer de salida con las mismas dimensiones del mapa de alturas. Este buffer se convertirá al final en la textura a emplear. • Para cada textura se solicita (o se calcula) un rango de presencia que debe estar entre 0 y 255, dicho rango representará una región, la cual tendrá 3 valores, altura mínima, altura máxima y altura optima (generalmente es el punto medio entre altura mínima y altura máxima).
4. Por cada píxel en el mapa de alturas, se recorren todas las texturas del conjunto de texturas y se calcula el porcentaje de presencia de cada una sobre el píxel, este porcentaje se obtiene de la siguiente manera: • a. Si el valor de altura esta en el rango definido para la región a la cual pertenece esta textura, se procede al paso b, de lo contrario se asigna 0 como porcentaje. • b. Si la altura del píxel está por debajo de la altura optima de la región definida para la textura actual, entonces se aplica la siguiente formula: • para calcular el porcentaje, de lo contrario si es igual a la altura optima, se toma el porcentaje como 1.0 (100%) y si es mayor a la altura optima se aplica la siguiente formula:
5. Teniendo los porcentajes por cada región, se procede a mezclar mediante un proceso de blending los colores de cada texel en el buffer de salida en la misma posición del píxel en el mapa de alturas.
255 Valor de altura del Vértice (brillo) C A B 0 Ubicación del vértice en x Iluminación y Sombreado de Terrenos Iluminación basada en alturas La iluminación basada en alturas es sumamente simple y poco realista, pero es bastante útil para el despliegue pre-visualizaciones y terrenos en pequeña escala. Consiste en dar a cada píxel dentro del terreno un brillo de acuerdo a su valor de altura.
Iluminación y Sombreado de Terrenos Iluminación basada en alturas Luz
Iluminación y Sombreado de Terrenos Lightmapping Un lightmap es bastante similar a un Mapa de Alturas, excepto que este contiene información sobre luminosidad para cada elemento en (x, y) en lugar de valores de alturas. Los lightmaps definen el patrón de iluminación a utilizar en cada parche o pedazo de terreno y como son pre-calculados, se pueden utilizar diversos métodos de iluminación global para crearlos
Iluminación y Sombreado de Terrenos Iluminación por pendientes Consiste en tomar los vértices vecinos del vértice actual durante una iteración (estos son tomados de acuerdo a la dirección del vector de iluminación) y restar los valores de altura del mismo menos el actual, luego se calcula el valor de brillo para ese vértice utilizando la siguiente expresión. SUAVIDAD = 1 SUAVIDAD = 10 SUAVIDAD = 15
Luz D A C B Iluminación y Sombreado de Terrenos Iluminación por pendientes Visualización del procedimiento de iluminación por Slope Lighting, el área gris es el volumen de sombra producido por la proyección del vértice A sobre el segmento BC en dirección de la luz, el vértice B está completamente obscurecido por A
Iluminación y Sombreado de Terrenos Generación Rápida de Mapas de Sombra Es otra técnica para la generación de zonas claras y obscuras dentro de un terreno que es bastante sencilla en términos de implementación. El procedimiento consiste en lo siguiente:Por cada píxel dentro del mapa de alturas, se hace un chequeo para ver si el rayo disparado desde la fuente de luz hasta esa posición intercepta el terreno, esto se logra de manera eficiente si se chequean los puntos que están por debajo de la proyección del vector luz.
Iluminación y Sombreado de Terrenos Generación Rápida de Mapas de Sombra Posición de la luz Dirección de la luz Posición de la luz proyectada Proyección del vector L sobre el mapa Punto actual dentro del mapa de alturas
Iluminación y Sombreado de Terrenos Generación Rápida de Mapas de Sombra Textura a emplear para el terreno Mapa de sombras generado Textura modulada con el mapa de sombras
Algoritmos para Niveles de Detalle Continuos Niveles de Detalle Continuo (CLOD) es la propiedad que tiene un mayado dinámico de polígonos el cual agrega una mayor cantidad triángulos adicionales a las áreas que requieran mayor nivel de detalle y todo lo contrario para las áreas que requieran un menor nivel de detalle. Algoritmos para CLOD requieren mayor investigación, son más complicados de implementar y requieren mayor uso del CPU que el proceso de despliegue por fuerza bruta, sin embargo, al hacer uso de los CLOD el render del terreno es más rápido y el uso del GPU disminuye considerablemente. Por lo general, las técnicas dividen el terreno en parches. A cada parche se le asigna un nivel de detalle. La diferencia entre parches conectados debe ser a los sumo de 1 nivel (restrictedquad-treetriangulation, para el caso de usar quadtrees).
Algoritmos para Niveles de Detalle Continuos Los algoritmos CLOD tienen que solventar dos problemas básicos de la visualización de terrenos. Agrietamiento: Consiste en rupturas que se presentan en el mayado debido a los cambios que ocurren al pasar de un nivel de detalle a otro en parches vecinos, esto se debe a que el número de vértices empleados para renderizar un parche es menor que el del otro, generando T-vértices. Popping: Cuando un parche cambia de nivel de detalle, su número de triángulos puede disminuir o aumentar, sin embargo, el usuario puede notar estos cambios repentinos dependiendo del paso o nivel de detalle al que se está moviendo dicho parche, creando un efecto poco grato visualmente que resta realismo al terreno y revela al usuario detalles sobre la implementación del mismo.
Fast Terrain Rendering Using Geometrical MipMapping Desarrollado por Willem H. de Boer, es un algoritmo sencillo que esta basado en el concepto de mipmapping aplicado a vértices en lugar de texturas. Niveles de detalle: Los vértices generados a partir del mapa de alturas se agrupan en varios parches con un tamaño fijo denominadas geomipmaps, por ejemplo: rejillas de 5x5, dichos parches o geomipmaps contendrán a su vez varios niveles de detalle que van disminuyendo a medida que el valor del nivel aumenta, así por ejemplo: Para un parche de 5x5 vértices, el nivel de detalle 0 (el mayor nivel de detalle) contiene 5x5 = 25 vértices, para el nivel de detalle 1 el parche anterior de 5x5 es reducido a una rejilla de 3x3 vértices conteniendo solo 3x3 = 9 vértices, de manera similar, para el nivel de detalle 2 (el mínimo nivel de detalle) se mantienen solo 5 ó 4 vértices.
Geomipmapping ó GeometricalMipmapping: LODs Izquierda: Parche de 5x5 con nivel de detalle 0, los círculos blancos corresponden a los vértices generados a partir del mapa de alturas que son enviados al GPU para su rendering. Centro: El parche anterior de 5x5 reducido al nivel de detalle 1, los círculos negros corresponden a los vértices descartados para el rendering, se puede observar, como las conexiones entre los vértices blancos son reordenadas para mantener la coherencia entre los mismos. Derecha: El mismo parche pero el nivel de detalle es 2, descartando el envío de 20 vértices al GPU.
Geomipmapping ó GeometricalMipmapping: otra configuración de LODs
2 2 2 2 2 2 2 2 1 1 1 1 1 1 2 2 1 1 1 1 1 1 2 2 0 0 0 0 1 1 2 2 0 0 0 0 1 1 2 2 0 0 0 0 1 1 2 2 Posición del ojo 0 0 0 0 1 1 2 2 1 1 1 1 1 1 2 2 Geomipmapping ó GeometricalMipmapping: asignando LOD a parches Se asigna un nivel de Detalle según la distancia al ojo: por cada nivel, un threshold de distancia
Geomipmapping ó Geometrical Mipmapping Durante cada frame, el proceso de actualización es bastante sencillo, se recorre cada parche y se calcula la distancia desde la posición de la cámara hasta el centro del parche en proceso, utilizando la formula de la distancia euclidea dependiendo de esta distancia se asigna o se calcula el nivel de detalle adecuado para el parche y se procede al siguiente. Sin embargo, esto genera POPING, al cambiar un nivel por otro durante la navegación, debido a que se eliminan (o insertan) nuevos vértices. Podemos considerar el cómo se maneja el mipmapping con texturas, y adoptar ciertas ideas. En texturas, el algoritmo baja la resolución cuando la relación pixel/texel deja de ser 1:1 y se convierte en 1:2 (por ejemplo). Esto ocurre a una cierta distancia d. Podemos aplicar la misma idea para mallados.
Geomipmapping ó Geometrical Mipmapping Popping Parchenivel 2 Parche nivel 3, visto como una aproximación del nivel 2. Los vértices negros son removidos al pasar del nivel 2 al nivel 3.
Geomipmapping ó Geometrical Mipmapping Al eliminar vértices, que además de que pueden ocasionar T-vértices, hay un cambio de altura genera una cambio de altura . El valor de esmenos notable mientras d sea mayor (debido a la perspectiva). Asíque, la idea esproyectar para saber sulongitud en pixels, quees a la final el cambioque el usuariova a notar en la altura. Si excede un threshold (e.g. 4 pixels) el error esmuynotorio, y por lo tanto no se permitirá el cambio de LOD mientras se cumpleque > . Porcadaparche, hay varios (unoporcadavértice a remover). Simplementetomamos el mayor de los en el parcheparacalcularsu .
Geomipmapping ó Geometrical Mipmapping Finalmente, en vez de calcular los deltas y la decisión de cambiar de LOD en cada frame, se precalculan las distancias por cada parche en las cuales de cambia de un nivel de otro. Es como tener un pequeño LUT por cada parche, de manera de hacer el chequeo del LOD correspondiente tan rápido como sea posible en cada parche, dada la distancia actual del parche al ojo. La inclinación de la cámara se ignora en este caso (aproximación). El poping se reduce con esta técnica. Sin embargo, para umbrales grandes de , el poping va a ser aún notable, lo cual hace sugerir “trilineargeomipmapping”.
Geomipmapping ó Geometrical Mipmapping Trilineargeomipmapping B Nivel 2 (mayor nivel de detalle) Nivel 3 (menor nivel de detalle) A B’ C B Niveles intermedios generados a partir del proceso de morphing entre el parche Nivel 2 y 3 A B’ C