1 visualización de terrenos multiresolución prof. rhadamés carmona, lic. henry iguaró...
TRANSCRIPT
1
Visualización de Terrenos Multiresolución
Prof. Rhadamés Carmona,
Lic. Henry Iguaró
Universidad Central de Venezuela
http://ccg.ciens.ucv.ve
Email: [email protected]
2
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 ó Geometrical Mipmapping.• ROAM
• Bibliografía
3
¿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
4
Ejemplos de un terreno:
5
Ejemplos de un terreno:
6
Ejemplos de un terreno:
7
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.
8
9
+
10
+
=
11
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)
12
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
13
Formación por fallas.
14
Formación por fallas.
+ filtro de erosión
15
Formación por fallas.
16
Formación por fallas.
17
Algoritmos para generación de Mapas de Alturas artificiales
• Formación por fallas.• Desplazamiento del punto medio.• Deposición de Partículas.
18
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.
B
A BC
C
A B
Altura
A
19
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
20
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
DC
A B
DC
E
,
4 2 2A B C D i i
E
Alt Alt Alt Alt Altura AlturaAltura random
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.
21
Desplazamiento del punto medio.
A B
DC
A B
DC
EE G H
F
I
2.,
4 2 2
2.,
4 2 2
2.,
4 2 2
2.
4
A B E i iF
A C E i iG
B D E i iH
C D EI
Alt Alt Alt Altura AlturaAltura random
Alt Alt Alt Altura AlturaAltura random
Alt Alt Alt Altura AlturaAltura random
Alt Alt AltAltura random
,
2 2i iAltura Altura
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
22
Algoritmos para generación de Mapas de Alturas artificiales
• Formación por fallas.• Desplazamiento del punto medio.• Deposición de Partículas.
23
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).
24
Deposición de Partículas.
Mapa de Alturas (vacío)
Partícula
(Px, Py)
Mapa de Alturas
(Px, Py)
Nueva Partícula
(Px, Py)
(Px, Py) Escoger a un vecino?
(Px, Py)
(Px, Py)
Nueva Partícula
(Px, Py)Si no hay
otro vecino, escoger al que este
disponible (Px, Py)
25
Deposición de Partículas.
Nueva Partícula
(Px, Py)No hay vecinos para continuar
“derramando” la partícula
Nueva Partícula
(Px, Py)
?
26
Deposición de Partículas.
27
Texturizado básico de Terrenos.
. _ _ , . _ _x y
s factor repeticion x t factor repeticion yANCHO ALTO
28
Texturizado básico de Terrenos.
Generación de Texturas Procedimentales (Texturas artificiales)
1. Solicitar al usuario un conjunto de texturas que representen las distintas etapas del terreno (agua, nieve, fango, grama, etc).
2. 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.
3. 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).
29
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:
altura AlturaMinima
AlturaOptima AlturaMinima
AlturaMaxima altura
AlturaMaxima AlturaOptima
30
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.
31
Iluminación y Sombreado de Terrenos
Iluminación basada en alturas
255
0Ubicación del vértice en x
Valor de altura del
Vértice (brillo)
A
B
C
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.
32
Iluminación y Sombreado de Terrenos
Iluminación basada en alturas
Luz
33
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
Lightmapping
Iluminación y Sombreado de Terrenos
34
Iluminación por pendientes
Iluminación y Sombreado de Terrenos
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.
. .1
mapaAlturas x vluz x z vluz z mapaAlturas x z
SUAVIDAD
SUAVIDAD = 1 SUAVIDAD = 10 SUAVIDAD = 15
35
Luz
A
B
C
D
Iluminación por pendientes
Iluminación y Sombreado de Terrenos
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
36
Generación Rápida de Mapas de Sombra
Iluminación y Sombreado de Terrenos
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.
37
Posición de la luz
Posición de la luz proyectadaDirección de la luz
Punto actual dentro del mapa de alturas
Proyección del vector L sobre el mapa
Generación Rápida de Mapas de Sombra
Iluminación y Sombreado de Terrenos
38
Mapa de sombras generado
Textura a emplear para el terreno
Textura modulada con el mapa de sombras
Generación Rápida de Mapas de Sombra
Iluminación y Sombreado de Terrenos
39
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 (restricted quad-tree triangulation, para el caso de usar quad trees).
40
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.
41
Algoritmos para Niveles de Detalle Continuos
42
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.
43
Geomipmapping ó Geometrical Mipmapping: 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.
44
Geomipmapping ó Geometrical Mipmapping: otra configuración de LODs
45
Geomipmapping ó Geometrical Mipmapping: asignando LOD a parches
Posición del ojo
2 2 2 2 2 2 2 2
2
2
2
2
2 2
2 2
2 2
2 2
2 2
1
1
1
1
1 1
1 1
1 1
1 1
1 1
1
1
1
1
0 0
0 0
0 0
0 0
1 1
1
1
1
1
0 0
0 0
0 0
0 0
1 1
Se asigna un nivel de Detalle según la distancia al ojo: por cada nivel, un threshold de distancia
46
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
47
Popping
Geomipmapping ó Geometrical Mipmapping
Parche nivel 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.
48
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 es menos notable mientras d sea mayor (debido a la perspectiva). Así que, la idea es proyectar para saber su longitud en pixels, que es a la final el cambio que el usuario va a notar en la altura. Si excede un threshold (e.g. 4 pixels) el error es muy notorio, y por lo tanto no se permitirá el cambio de LOD mientras se cumple que > .Por cada parche, hay varios (uno por cada vértice a remover). Simplemente tomamos el mayor de los en el parche para calcular su .
Geomipmapping ó Geometrical Mipmapping
49
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 “trilinear geomipmapping”.
Geomipmapping ó Geometrical Mipmapping
50
Trilinear geomipmapping
Geomipmapping ó Geometrical Mipmapping
C
B
AB’
Nivel 2 (mayor nivel de detalle)
Nivel 3 (menor nivel de detalle)
C
B
AB’
Niveles intermedios generados a partir del proceso de morphing entre el parche Nivel 2 y 3
51
Agrietamiento: hay que estudiar las fronteras de cada parche. Se modifica la triangulación del LOD más fino entre parches adyacentes.
Geomipmapping ó Geometrical Mipmapping
Conectar ambos parches genera T-vértices (A, y B), que se traducen en grietas
52
Antes
A
B
Después
A
B
Antes
A
B
A
B
Después
Geomipmapping ó Geometrical Mipmapping
Agrietamiento
53
Otros patrones de niveles de detalles
Aeropuerto de
Maiquetía
54
Otros patrones de niveles de detalles
Aeropuerto de
Maiquetía
55
ROAMing Terrain: Real-time Optimally Adapting Meshes
Triangulación Multi-resolución que optimiza métricas dependientes de la vista.
Considera el conteo de triángulos y el tiempo de generación
Usa coherencia frame-to-frame
No genera grietas
Utiliza una árbol binario
Considera el frame rate
Reduce poping, con vertex-morphing
56
ROAM: Real-time Optimally Adapting Meshes
Arbol Binario de triángulos:
T0=(vc,va,v0)
T1=(vc,v1,va)
T=(va,v0,v1) split
57
ROAM: Real-time Optimally Adapting Meshes
Arbol Binario de triángulos: para el triángulo T hay 3 vecinos. TB (base), TL (left), TR (right). La diferencia de LOD entre T y sus 3 vecinos es a lo sumo 1 nivel. El nuevo vértice central puede aparecer gradualmente usando geomorphing.
58
ROAM: Real-time Optimally Adapting Meshes
Diamante: ocurre cuando T y TB están en el mismo nivel. El split agrega un nuevo vértice y dos triángulos. Operación invertible. Si TB no existe, el split se hace sólo sobre T.
59
ROAM: Real-time Optimally Adapting Meshes
T no puede refinarse si TB tiene nifel de detalle inferior, pues la diferencia sería de 2 niveles después del split. Se requiere entonces refinar primero la base TB antes de T, sugiriendo recursión.
Así, se garantiza que nunca habrán T-vértices
60
ROAM: Real-time Optimally Adapting Meshes
No se generan T-vértices
La triangulación óptima se obtiene con un algoritmo greedy:- Se asigna una prioridad a cada triángulo.- Se utiliza una cola de prioridad, que se inicia con el
triángulo raíz.- Iterativamente se refina la raíz de la cola (mayor prioridad)
y se re-insertan sus hijos en la cola.- Para garantizar optimalidad, la prioridad debe ser
monotónica (i.e. prioridad de un triángulo hijo no es mayor a la de su padre).
- El refinamiento termina al alcanzar el límite de polígonos
61
ROAM: Real-time Optimally Adapting Meshes
Cuando las prioridades cambian entre cuadro de imágenes, se puede partir de la última triangulación, y aplicar una serie de splits y merges hasta alcanzar la triangulación deseada en varios frames.
Se puede limitar la cantidad de split y merge por frame, según la cantidad de triángulos nuevos a subir a la tarjeta.
Se requiere de dos colas de prioridad (una para splits, otra para merges).
La triangulación obtenida a la final es la misma que si se aplicara el algoritmo de cola de prioridad, con la condición de que la función de prioridad sea monotónica; i.e. la prioridad de un triángulo no puede ser mayor a la prioridad de su triángulo padre.
62
Bibliografía
• Renato Pajarola, ETH Zürich. “Large Scale Terrain Visualization Using The Restricted Quadtree Triangulation”. In Proceedings Visualization 98, pp. 19–26 and 515. IEEE Computer Society Press, 1998.
• Mark Duchaineau, LLNL, Murray Wolinsky, LANL, David E. Sigeti, LANL, Mark C. Miller, LLNL, Charles Aldrich, LANL, Mark B. Mineev-Weinstein, LANL. “ROAMing Terrain: Real-time Optimally Adapting Meshes”. In Proceedings Visualization 97, pp 81 – 88. Oct. 1997.
• Willem H. de Boer . “Fast Terrain Rendering Using Geometrical MipMapping”. In flipCode featured articles, Oct. 2000.