Академический Документы
Профессиональный Документы
Культура Документы
Tesis de Mster
Visualizacin interactiva de
entornos muy complejos
Fecha: 25/06/07
ndice general
1. Introduccin
2. Trabajo previo
2.1.
Impostores . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.1.
. . . . . . . . . . . . . . .
2.1.2.
. . . . . . . . . . . . . . . . . . . . . . .
2.1.3.
2.2.
Relief textures
Mallas texturadas . . . . . . . . . . . . . . . . . . . . .
Far voxels . . . . . .
Layered Point Clouds
Quick VDR . . . . .
2.2.1.
11
. . . . . . . . . . . . . . . . . . .
11
. . . . . . . . . . . . . . . . . . .
12
. . . . . . . . . . . . . . . . . . .
14
Comparativa . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
2.2.2.
2.2.3.
2.3.
. . . . . . . . . . . . . . . .
17
3.1.
Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
3.2.
Construccin
19
3.3.
Seleccin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
21
3.4.
Visualizacin
. . . . . . . . . . . . . . . . . . . . . . . . . . .
23
3.5.
PLT:
. . . . . . . . . . . . . . . .
25
. . . . . . . . . . . . . . . . . . . . . . . . . . .
29
4.1.
Introduccin . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
4.2.
Generacin
. . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
. . . . . . . . . . . . . . . . . . . . . . . . .
31
. . . . . . . . . . . . . . . . . . . . . . . . .
32
4.2.1.
4.2.2.
Top-down
Bottom-up
33
6. Resultados
37
7. Conclusiones
45
i
A. OpenGL y GPUs
47
. . . . . . . . . . . . . . . . . . . . .
47
48
. . . . . . . . . . . . . . . . . . . .
49
50
51
A.2.1.
Shaders
. . . . . . . . . . . . . . . . . . . . . . . . . .
B. Fragment shader
52
57
ii
ndice de guras
2.1.
2.2.
2.3.
Uso de impostores . . . . . . . . . . . . . . . . . . . . . . . . .
2.4.
Ejemplo de
2.5.
2.6.
relief texture
. . . . . . . . . . . . . . . . . . . . .
10
. . . . . . . . . . .
11
. . . . . . . .
12
2.8.
Far voxels . . . . . . . .
Descripcin del algoritmo Layered Point Clouds
Algoritmo Quick VDR . . . . . . . . . . . . . .
3.1.
18
3.2.
21
3.3.
23
3.4.
Deteccin de
. . . . . . . . . . . .
24
3.5.
26
4.1.
. . . . . . . . . . . .
30
5.1.
33
5.2.
35
6.1.
6.2.
39
6.3.
. . . . . . . . . . .
42
2.7.
solid artifacts
Lucy
en el
. . . . . . . .
13
. . . . . . . .
14
. . . . . . . . . . . . .
shader
. . . . . . . . . . . . . . . . . . . . . .
Lucy
Lucy
Trayectora en el modelo Lucy
Lucy
38
6.4.
Trayectora en el modelo
(1) . . . . . . . . . . . . . . . .
42
6.5.
Trayectora en el modelo
(2) . . . . . . . . . . . . . . . .
43
(3) . . . . . . . . . . . . . . . .
43
. . . . . . . . . . . . . . . . . . . . . . .
51
6.6.
A.1.
A.2.
Pipeline
Pipeline
de OpenGL
iii
. . . . . . . . . . . .
54
iv
Captulo 1
Introduccin
La visualizacin interactiva de modelos tridimensionales es una rea de
investigacin de gran inters ya que tiene aplicaciones en muchas reas tales
como videojuegos, simuladores de vuelo o de conduccin, realidad virtual,
visualizacin de modelos arquitectnicos y diseo asistido por ordenador.
Durante la exploracin de un modelo 3D, deseamos una animacin uida
con el objetivo de alcanzar una inmersin convincente. El desafo principal de
los sistemas de visualizacin interactivos es proporcionar
framerates (nmero
HORI: Hierarchical
octree.
Implementacin de un algoritmo de navegacin interactivo con recorrido del rbol dependiente de la vista (
Captulo 2
Trabajo previo
Se han propuesto muchos algoritmos para la aceleracin del proceso de
visualizacin, siguiendo una de las siguiente estrategias:
La complejidad del
a menudo permite optimizaciones en el proceso de visualizacin. Eliminando los cuellos de botella es posible incrementar notablemente las
prestaciones.
hardware.
el hecho de que las partes complejas de una escena que estn distantes
al observador, y por lo tanto tienen un tamao pequeo en pantalla,
contribuyen muy poco a la imagen nal. Como consecuencia, las representaciones simplicadas se utilizan para representar objetos distantes,
obtenindose as diferentes niveles de detalle (LODs). Esto reduce la
complejidad de la escena visible, pero desafortunadamente las tcnicas
de simplicacin no pueden ser aplicadas a cualquier parte de la escena.
El concepto fundamental de los LODs, resumido en la gura 2.1, es simple:
durante la visualizacin, utilizar una representacin menos detallada para los
objetos pequeos y/o distantes, y para las regiones con menos importancia
de la escena. Esta representacin menos detallada a menudo consiste en una
seleccin de varias versiones de los objetos de la escena, cada versin menos
detallada y que es posible visualizarla en un tiempo menor que la anterior.
Para una descripcin completa los niveles de detalle en grcos y sus aplica+
ciones consultar [LWC 02].
2. Trabajo previo
pueden ser aplicadas a un rango ms amplio de escenas (ver [JWP05] para
obtener una descripcin sobre el estado del arte).
Existen muchas representaciones basadas en el muestreo, cada una de
ellas se caracteriza por la cantidad y el tipo de informacin que almacenan.
Se denominan representaciones basadas en la imagen o en puntos (
image-
utilizan en muchos videojuegos desde hace muchos aos para visualizar rboles, suelo, fuego, personajes, artculos o imgenes estticas de fondo como
montaas o ciudades.
Para generar una representacin basada en la imagen de un objeto, es
necesario adquirir su apariencia, por ejemplo a travs de su estructura geomtrica. En la mayora de casos esto se hace visualizando el objeto desde un
nico punto de visin (llamado punto de referencia). La informacin adquirida se combina con la geometra con el propsito de posicionar la imagen en la
escena. En el caso ms simple, la parte de la escena se captura en una textura
y esta textura se mapea en un cuadriltero. La generacin puede ocurrir en
una etapa de preproceso (representacin esttica) o en tiempo de ejecucin
(representacin dinmica). Para evitar posibles errores en la visualizacin la
escena, la generacin de la representacin debe tener en cuenta los siguientes
aspectos (ver gura 2.2):
La resolucin del muestreo no debe ser mucho menor que la resolucin
de la imagen nal. De lo contrario, observaremos agujeros o una imagen pixelada destruyendo la ilusin ptica que pretendemos crear. Esto
signica que se debe mantener siempre una distancia mnima a la representacin original, en trminos de apariencia. Adems, la adquisicin
de la apariencia debe proporcionar un resultado similar comparado con
la visualizacin del objeto original.
Si el punto de vista se cambia pueden aparecer errores de orientacin
cracks )
ros (
o efectos
rubber-sheet
objetos, el espacio entre ellos se rellena mezclando el fondo con los objetos). Evitar este tipo de errores no es trivial y la mayora de algoritmos
existentes requieren un coste computacional muy elevado.
Para una integracin correcta en la escena, la frontera entre las representaciones basadas en imgenes y la geometra adyacente no debe
presentar errores. Esto es especialmente importante cuando los objetos
son representados mediante una mezcla de imgenes y geometra original. Adems, la visibilidad entre la escena original y la representacin
en imgenes tiene que poder resolverse.
Las partes dinmicas de una escena tienen que ser reproducidas por la
representaciones basadas en imgenes. Esto incluye modelos dinmicos
como los humanos o efectos de luz dinmicos.
Arriba-izquierda: escena original. Arriba-derecha: imagen pixelada debido al submuestreo. Abajo-izquierda: agujero (la representacin se
ha generado a la derecha del punto de vista actual). Abajo-derecha: errores
debido al parallax (las casas de la derecha deberan ser invisibles)
Figura 2.2:
2. Trabajo previo
2.1.
2.1.1. Impostores
Estas aproximaciones presentan mtodos para reemplazar objetos distantes en una escena (sobretodo, escenas urbanas) por una representacin
basada en imgenes. En [SDB97], se presenta una tcnica que realiza una
segmentacin dinmica de los datos, obtenindose una representacin local
tridimensional y un conjunto de impostores utilizados para representar objetos distantes. El modelo de segmentacin es especco para escenas urbanas
y explota las relaciones inherentes en una escena de este tipo. Introducen
una nueva estructura para representar impostores, derivada de los niveles de
detalle. Los impostores se combinan con geometra real para permitir grandes discontinuidades en las profundidades y efectos de
parallax,
y texturas
layered-
depth-image )
frames
Limitaciones:
transiciones entre las celdas de los modelos segmentados son, a menudo, muy
bruscas. El hecho de aadir informacin tridimensional introduce diferentes
tipos de distorsiones, y no elimina algunos de los efectos producidos por el uso
de impostores como los agujeros. Por ltimo, algunos de estos algoritmos de
segmentacin de la escena requieren un tiempo de preproceso muy elevado.
2. Trabajo previo
2.1.2.
Relief textures
geomtrica se codica mediante una textura con profundidad (relief texture ) y se visualiza rasterizando una geometra arbitraria (por ejemplo la caja
contenedora). Para cada fragmento resultante, el shader calcula la interseccin del rayo correspondiente con la geometra. En algunos casos se puede
utilizar informacin preprocesada para acelerar el clculo de la interseccin.
Algunos autores [BD06], integran el algoritmo con una proyeccin perspectiva inversa para poder representar un conjunto ms amplio de formas. Otros
autores [PO06], almacenan ms de un valor de profundidad para permitir
proyecciones multievaluadas (varios puntos se proyectan en el mismo). Adems, se han desarrollado tcnicas muy ecientes basadas en la GPU para el
clculo de la interseccin entre el rayo de visin y la textura. Por otro lado, el
requerimiento extra en cuanto a memoria de textura es pequeo (dependiendo de los niveles de profundidad que queramos almacenar) y la visualizacin
depende del tamao de la pantalla y no de la complejidad geomtrica, por lo
que esta representacin es aplicable a muchas partes de una escena 3D.
Ventajas:
de relieve en las placas grcas actuales. En algunos casos, permiten incorporar mapas de alturas distorsionados o varios valores de profundidad en las
texturas para capturar formas ms complejas. Esto permite que las texturas
de relieve puedan reemplazar objetos completos, por ejemplo en el contexto
de los niveles de detalle.
Limitaciones: Debido a que el detalle se almacena en texturas, los requerimientos de memoria de la malla simplicada aumentan considerablemente
por la necesidad de almacenar los mapas de textura; el algoritmo slo es
vlido en escenas con pocos objetos debido a estos requerimientos de almacenamiento. Adems presentan errores de
distinta de la direccin de proyeccin.
10
parallax
si la direccin de visin es
2. Trabajo previo
Figura 2.5:
2.2.
2.2.1.
Far voxels
Esta aproximacin [GM05] permite la construccin y la inspeccin interactiva de modelos de supercies muy grandes. El mtodo integra tcnicas de
out-of-core ) y niveles de
voxels ).
Cada
voxel
con-
ray-casting
shaders
del modelo
front-to-back,
explotando los
vertexs programs
para la evaluacin en la
11
Figura 2.6: Esquema del algoritmo Far voxels: El modelo se particiona jerrquicamente con un estructura BSP. Las hojas del rbol se visualizan
utilizando los tringulos originales, mientras que los nodos internos son aproximados utilizando voxels dependientes de la vista.
out-of-core.
aliasing
si no
se trazan sucientes rayos lo que hace aumentar el coste de preproceso signicativamente; las primitivas grcas utilizadas son apropiadas slo para
materiales difusos; y el algoritmo de visualizacin se esfuerza ms en que la
visualizacin sea interactiva que en obtener una buena calidad de imagen.
2.2.2.
En esta aproximacin [GM04], los autores presentan una estructura multiresolucin basada en puntos para la visualizacin interactiva de modelos
muy complejos. La estructura est basada en una jerarqua en espacio ob-
12
2. Trabajo previo
jeto de las nubes de puntos de entrada. Durante la visualizacin, las nubes
de puntos gruesas y nas son combinadas mediante un recorrido de arriba a
abajo de la estructura jerrquica para adaptar localmente las densidades de
muestreo de acuerdo con el tamao de la proyeccin en pantalla de la imagen.
Dado que cada nube est compuesta por varios miles de muestras, el coste
de la extraccin multiresolucin se amortiza evitando el envo de muchas
primitivas grcas al
outbackface,
de algoritmos de recortado (
hardware
splats
Figura 2.7:
13
2.2.3.
Quick VDR
Esta aproximacin fue presentada por [YSGM05], para la visualizacin interactiva basada en algoritmos dependientes de la vista de modelos gigantes.
Este algoritmo combina la simplicacin dependiente de la vista,
occlusion
clusters
frames
calidad de imagen.
Figura 2.8:
frames
14
2. Trabajo previo
Limitaciones:
frame
de
2.3.
Comparativa
Impostors
Relief
textures
Mallas
texturadas
Far
Voxels
Point
Clouds
Quick
VDR
No
No
Uso de
GPU
Artifacts
Observaciones
Muchos
Vlido para
un slo plano
No
No
No
Muchos
Vlido para
un slo objeto
No
No
Posible
Pocos
No
Pocos
Vlido para
pocos objetos
Emplea
mucha memoria
No
No
Posible
Pocos
Menor calidad
que la malla
No
No
Posible
Pocos
Costuras
entre nodos
Las dos primeras aproximaciones presentadas permiten reemplazar objetos distantes por una representacin basada en imgenes acelerando as el
proceso de visualizacin. El principal inconveniente es que estas representaciones slo son vlidas cuando el objeto est lejos del observador y en un cono
de direcciones de visin limitado. Si consideramos visualizar un slo objeto
una buena opcin son las mallas texturadas ya que conservan muy bien el
detalle de la malla original pero, como sucede con los impostores, si visualizamos el objeto desde una direccin diferente a la direccin de proyeccin
(direccin desde la que se obtienen las texturas) observaremos errores debido
15
2.3. Comparativa
parallax.
Las tres ltimas aproximaciones descritas son adecuadas para escenas
16
Captulo 3
ORI: Omni-directional
Relief
Impostors
3.1.
Introduccin
relief textures ).
parallax.
Los impostores
pueden ser una buena opcin para objetos distantes, pero slo son vlidos
para un cono reducido de direcciones de visin. Pueden aparecen errores por
deformacin o agujeros. El cono de direcciones vlidas tambin es aplicable a
las texturas de relieve, aunque en este caso, el cono es mayor. Pero se pueden
producir errores debido a la ausencia de informacin en zonas con una proyeccin multievaluada (varios puntos se proyectan en el mismo). Los impostores
con relieve pueden ser mapeados en una malla simplicada, pero se requiere
un nmero muy grande de impostores. Inversamente, los conjuntos reducidos
de impostores no son vlidos para direcciones de visin arbitrarias. Por otro
lado, los algoritmos basados en la composicin de seis texturas ortogonales
presentan problemas generalmente en objetos cncavos.
Los
3.1. Introduccin
combinando cierto nmero de impostores en una representacin que preserva
los detalles de alta frecuencia, permite efectos de
parallax
e iluminacin por
gen (
Figura 3.1:
Contribuciones: Esta aproximacin proporciona nuevos algoritmos para la construccin, seleccin y visualizacin de una representacin compacta,
dependiente de la vista, para la exploracin interactiva de modelos muy complejos. Las principales contribuciones son:
Un algoritmo eciente para calcular un nmero suciente de planos
relief maps ).
relief maps
(PLT), calculada en
18
relief maps
deben solucionar las siguientes cuestiones: dado un objeto, cules son los
mejores
relief maps
3.2.
Construccin
El primer aspecto del problema que nos ocupa puede ser planteado de
la siguiente forma: dado un modelo geomtrico de un objeto, y un nmero
deseado de impostores
n, encontrar las n
19
3.2. Construccin
Esta aproximacin tiene la ventaja de su simplicidad. Pero probablemente construir impostores con poca relevancia. La mayora de los
objetos tienen zonas que no son muy interesantes comparadas con otras
(por ejemplo la base de una escultura), y estas zonas se muestrean igualmente que cualquier otra. Debido a que se usa
n = 20,
las direcciones
n, pa-
relief map ).
inicial, se busca en las direcciones de visin cercanas, la que proporciona una mayor cantidad de informacin, utilizando la medida de la
entropa de la direccin de visin presentada en [VFSH04]. La bsqueda se realiza para un conjunto de direcciones que tienen una distancia
mxima de cuatro grados con la inicial.
Esta estrategia es un compromiso entre las dos primeras, debido a que
utiliza el contenido de la informacin para ajustar las direcciones de
visin, pero no se aleja demasiado del muestreo regular con el propsito de asegurar la existencia de impostores para cualquier punto de vista.
Se han comparado experimentalmente las estrategias propuestas. La gura 3.2 muestra dos vistas del modelo
20
bunny
fragment shader
relief map real.
debido a que el
intersecta el
3.3.
Seleccin
pipeline
de visualizacin si con
21
3.3. Seleccin
dos comparando la direccin de visin con la normal del plano soporte del
polgono del impostor, pero parece razonable utilizar menos de la mitad de
los impostores en la mayora de los casos. Igual que en la construccin, se
han evaluado diferentes estrategias experimentalmente. Los algoritmos de
seleccin evaluados han sido los siguientes:
1.
m closest:
m < n
calculan en tiempo de preproceso para cada una de 320 direcciones espaciadas de forma uniforme (obtenidas subdividiendo el icosaedro), el
conjunto de los mejores impostores a utilizar, hasta un mximo de
m.
Para cada una de las 320 direcciones, se comparan diferentes combinaciones de impostores con el resultado de visualizar el modelo original
desde la direccin de visin. La combinacin es vlida si la imagen obtenida diere de la original en un
0,2 % (0,2 %
de pxeles erroneos).
ms cercano si con
uno es suciente. Si se supera el error mximo establecido, se comprueba con parejas del conjunto de los
res para cada direccin de visin, la peor vista posible ( ) posee mucha ms
informacin que en el caso anterior.
22
Figura 3.3:
3.4.
Visualizacin
Una vez se han seleccionado los impostores, los polgonos soporte de cada uno de los impostores son enviados al
shader
pipeline
grco, donde el
fragment
pxeles cubiertos por ms de un impostor, y por lo tanto es necesario determinar cual es el correcto. Ntese que el simple ordenamiento en profundidad de
los fragmentos no garantiza el ltrado correcto, debido a que los
relief maps
generan errores de relleno detrs de las caras que han generado la imagen
del impostor (
multinivel estn limitados por el hecho que estas tcnicas slo pueden ser visualizadas en la proyeccin sobre el plano de visin del polgono soporte, por
lo tanto an almacenando mltiples profundidades, el modelo se ver plano
si se gira. El mtodo basado en ORI utiliza en su lugar diferentes direcciones
de proyeccin que nos proporcionan, por un lado, la informacin que falta, y
por otro, la cobertura adicional del plano de visin, por lo tanto, es posible
visualizar el modelo sin deformacin cuando se realizan rotaciones.
Para detectar los
solid artifacts
el
shader
23
shader
3.4. Visualizacin
AyB
en la gu-
shader
fragmento.
Figura 3.4:
La utilizacin de varios
fragment shader
en
glDepthRange(zi , zi ),
pa-
24
obtenida del
relief map, valor entre [0,1] con una resolucin de 1/256, se calcula
bias = 1/32, y se decrementa la z mediante bias cos(impostorNormal,
surfaceNormal ). Este valor de profundidad se convierte a coordenadas
normalizadas y se almacena en el fragmento en el shader. Esta estrateel
3.5.
PLT:
coverage error ).
El error de recubrimiento
di (s)
para un
viewport
de
25
Nv .
Nv = 320
GC(s0 )
para un cierto
tamao inicial
26
GC(s)
decir:
viewport (s
s ), es
GC(s0 )
GC(smax )
=
2
s0
s2
max
Parece lgico admitir que en media slo hay un error de recubrimiento para
cada la de pxeles del
Sustituyendo en la
frmula anterior,
1
s2
GC(s0 )
0
=
P LT = smax =
s2
smax
GC(s0 )
0
smax
smax
pxeles.
Una consecuencia adicional es que la resolucin de las texturas del impostor puede ser calculada en esta etapa del preproceso. Una buena opcin
es considerar el tamao de las texturas del orden de
2 smax .
i<6
= 1 . . . 4)
y los
Minimum
coverage
error
Maximum
coverage
error
Average
coverage
error
PLT
Impostors
0.10 %
0.09 %
0.07 %
0.1 %
6.46 %
2.28 %
1.37 %
0.45 %
0.37 %
1.18 %
0.44 %
0.23 %
0.18 %
0.17 %
15
44
80
222
270
2.9 avg.
27
28
Captulo 4
HORI: Hierarchical ORI
4.1.
Introduccin
Dentro de la pirmide de visin, algunas regiones del modelo permanecen ms cercanas al observador que otras. Las mallas con nivel de
detalle no proporcionan el nivel de detalle apropiado para el modelo
29
4.2. Generacin
completo.
Muchos de estos problemas pueden ser solucionados representando la escena como una jerarqua. Las partes de la escena fuera de la pirmide de
visin pueden ser descartadas ecientemente utilizando un recortado jerrquico, y el nivel de detalle puede ser ajustado independientemente en cada
nodo de la jerarqua.
Exploracin interactiva del modelo del Armadillo. Izquierda: visualizacin con el ORI de la raz; derecha: visualizacin con los ORI de un
nivel de subdivisin. Se puede observar como los artifacts de la mano desaparecen
Figura 4.1:
4.2.
Generacin
En el caso de una subdivisin espacial jerrquica es necesario poder construir el conjunto de impostores para cualquier parte del modelo interior a
una regin cbica del espacio arbitraria. Dado un modelo geomtrico
una regin
podemos dividir
submodelos recortados
M1
en dos subregiones,
M2 .
R1
R2
en
y obtener dos
30
M1
M2 .
Mk
M,
utilizando planos de
clipping
que
glClipPlane.
el modelo de entrada es gigante y no puede ser almacenado directamente en la memoria principal. Estos mtodos que trabajan con los datos
en disco y no directamente en la memoria se conocen como mtodos
out-of-core.
M . Con el propsito
octree
bintree, Kd-tree, . . . ). En
4.2.1.
Top-down
31
4.2. Generacin
incluye el correspondiente valor del PLT. Posteriormente, se realiza una subdivisin de B, se calcula los ORI para cada una de las regiones resultantes,
se almacenan en los nodos hijos, y se procede recursivamente.
Para la construccin de los ORI de las subregiones, simplemente se aplica el algoritmo presentado en el captulo 3, visualizando el modelo con seis
planos de
4.2.2.
Bottom-up
La estructura jerrquica se construye de forma inversa que en el caso anterior. Dado un nmero
n,
B.
En
n.
algoritmo
OpenGL
mite el tratamiento desde disco de los datos lo que hace que esta tcnica sea
ms apropiada para modelos tridimensionales gigantes.
En la construccin de los ORI de los nodos no terminales de la jerarqua
se pueden adoptar dos estrategias diferentes: proceder como en el caso de los
nodos terminales y realizar un recortado del modelo a la regin correspondiente al nodo, o visualizar los ORI de los hijos del nodo a calcular.
32
Captulo 5
Algoritmo de navegacin
dependiente de la vista
El algoritmo de navegacin extrae una representacin dependiente de la
vista procedente de la estructura jerrquica desde el punto de vista actual
del observador. Realiza un renamiento desde los nodos ms grandes a los
ms pequeos. El algoritmo recorre la estructura en pre-orden recursivamente, manteniendo una lista de nodos activos que llamaremos
frente, como se
Figura 5.1:
33
frame, se
= (ox , oy , oz ))
v = (x, y, z)
ms cercano al observador.
dq (squared distance )
entre el vr-
tice y el observador.
dq
n:
en la tabla
n : = 0
mientras dq < D[n] hacer
n : = n + 1
fmientras
f ov 180
L 2n
= tolerancia
d
N vertP ixels
Donde
(5.1)
34
N vertP ixels
es el nmero de
tolerancia
f ov
es el ngulo de aper-
de un cierto
sen() =
L 2n
d
Por otro lado, para mantener la calidad deseada en la visualizacin la proyeccin en pantalla del nodo no debe sobrepasar la tolerancia. La tolerancia
es un valor expresado en pxeles. Sabiendo que la ventana de visualizacin
tiene
N vertP ixels
tura vertical de
fov
pxeles de altura y que la cmara virtual tiene una abergrados, podemos obtener el equivalente en radianes de la
tolerancia:
toleranciaradianes = toleranciapixels
f ov 180
N vertP ixels
Figura 5.2:
36
Captulo 6
Resultados
Se han realizado pruebas con dos modelos diferentes:
Lucy, malla de tringulos que representa un modelo de un ngel cristiano. El modelo ha sido obtenido mediante el escaneo de la estatua
que realiz el laboratorio
boratory
genus )
en formato
ply
que contie-
37
Figura 6.1:
[lmv]. El
(x, y, z),
el color
38
(r, g, b)
6. Resultados
Figura 6.2:
a 2.13GHz
los experimentos se
Las tablas 6.1 y 6.2 muestran los resultados de los experimentos realizados
con el modelo
pipeline
39
fps )
que el rendimiento (
que al ser los HORI una representacin basada en imgenes, el factor que
condiciona el rendimiento de la visualizacin es el tamao del
viewport.
La tabla 6.3 muestra los valores del PLT para los nodos de los distintos
niveles del
octree.
aumenta debido a que la regin que representan los nodos cada vez es ms
pequea. Pero tambin observamos que los valores mnimos son muy pequeos, debido a que hay regiones, por pequeas que sean, que tienen detalles de
alta frecuencia que impiden que el nodo se pueda visualizar en un
viewport
mayor sin perder dichos detalles. El caso ideal sera que el PLT fuese igual
al tamao del
viewport
las texturas.
La gura 6.3 muestra los distintos niveles de subdivisin empleados en
el experimento con el modelo
Lucy.
pipeline
de
Lucy
artifacts
en el punto inicial
viewport
(512x512) es muy superior al PLT del nivel 1 por lo que se producen errores
de
artifacts
que observamos
40
6. Resultados
Tamao
Tolerancia
128
256
128
256
128
256
1000
400
100
FPS
Nodos
Impostores
Memoria (MB)
Max/Min
textura
Max/Min/Avg
Max/Min/Avg
Max/Min/Avg
18
39
60
6-8
60
6-8
34
4-6
32
4-6
16
4-6
14
4-6
4.4
0.5
1.1
23
41
22
95
15
51
41
41
41
95
95
95
2.9
5.3
10.8
1.7
5.8
56
8.8
30
10.8
10.8
10.8
56
56
56
Tamao
Tolerancia
128
256
128
256
128
256
1000
400
100
Nodos
Impostores
Max/Min
textura
FPS
Max/Min/Avg
Max/Min/Avg
70
18
70
16
28
18
26
16
20
18
20
16
Memoria (MB)
15
37
14
29
21
64
17
48
29
29
29
64
64
64
Max/Min/Avg
4.2
0.3
1.6
22.2
1.7
8.2
7.3
1.9
5.5
37.7
10
28.3
7.3
7.3
7.3
37.7
37.7
37.7
Tabla 6.2:
1 nivel
Lucy
Malecn
Tabla 6.3:
2 niveles
3 niveles
Max/Min/Avg
Max/Min/Avg
Max/Min/Avg
35
35
35
72
39
50
292
25
70
36
36
36
50
31
41
362
25
66
Valores del PLT para los distintos niveles de profundidad del octree
41
Figura 6.3:
Capturas de pantalla de la trayectoria en el modelo Lucy utilizando texturas de 128x128 y una tolerancia de 1000 pxeles. De izquierda a
derecha: punto inicial, punto medio y punto nal de la trayectoria
Figura 6.4:
42
6. Resultados
Capturas de pantalla de la trayectoria en el modelo Lucy utilizando texturas de 256x256 y una tolerancia de 400 pxeles
Figura 6.5:
Capturas de pantalla de la trayectoria en el modelo Lucy utilizando texturas de 256x256 y una tolerancia de 100 pxeles
Figura 6.6:
43
44
Captulo 7
Conclusiones
Este proyecto amplia las tcnicas utilizadas hasta ahora para la visualizacin interactiva de escenas muy complejas presentando una nueva representacin para este tipo de escenas junto con un algoritmo que permite visualizar
dicha representacin. Se han presentado una serie de algoritmos para la construccin, seleccin y visualizacin de los
Impostors.
por fragmento preservando los detalles de alta frecuencia para cualquier direccin de visin.
Se ha propuesto el uso de una mtrica en espacio imagen para la seleccin
de un subconjunto suciente de
relief maps
45
46
Apndice A
OpenGL y GPUs
A.1.
Introduccin a OpenGL
47
Repintado completo de cada frame. En OpenGL, cada nueva imagen se redibuja borrando el contenido de la ventana y volviendo a
dibujar todas las primitivas grcas de la escena. Por tanto, en una
animacin con OpenGL todos los fotogramas se regeneran empezando
con la ventana vaca, sin aprovechar nada del fotograma anterior. Este
hecho es habitual en las aplicaciones 3D porque una variacin (incluso
pequea) del punto de vista hace que cambie prcticamente todo el
contenido de la vista. Para facilitar la animacin se utiliza la tcnica
que se describe en el siguiente punto.
Mquina de estados.
estados: un estado es un conjunto de variables que denen el comportamiento de otros comandos OpenGL. Esto permite utilizar comandos
con un nmero reducido de parmetros. El valor de estas variables se
puede cambiar y consultar mediante instrucciones de OpenGL. El color, el grueso de lnea y las propiedades del material son ejemplos de
variables de estado.
A grandes rasgos, este aspecto nos permite clasicar las funciones de
OpenGL en tres grupos. Un primer grupo estara formado por las funciones
de dibujo (que modican de forma directa el
framebuer ).
Dentro de este
glClear )
glBegin/glEnd ).
48
Un segundo
A. OpenGL y GPUs
grupo estara formado por todas las funciones que modican el valor de una
variable de estado (
que controla el color con que se dibujaran las primitivas. Finalmente, un tercer grupo estara formado por las funciones que permiten consultar el valor
de una variable de estado:
glGet*(), glIsEnabled(), . . .
void paintGL(void)
{
// 1. Borrar el contenido de la ventana
borrar_ventana();
// 2. Definir la cmara, los materiales y otras variables de estado
configurar_estado_OpenGL();
// 3. Dibujar las primitivas que forman el modelo
para cada primitiva p del modelo {
definir_propiedades_visualizacin_primitiva();
dibujar(p);
}
}
glBegin-glEnd, dentro del cual se proporcionan los diferentes vrtices que denen la geometra. La funcin glBegin() permite escoger
Tipo de primitiva
GL_POINTS
GL_LINES
GL_LINE_STRIP
GL_LINE_LOOP
GL_TRIANGLES
GL_QUADS
GL_POLYGON
49
Modelview y projection
OpenGL mantiene en todo momento dos matrices que conjuntamente
indican el paso de coordenadas del objeto a coordenadas normalizadas:
GL_MODELVIEW y GL_PROJECTION.
La forma de utilizar estas matrices es muy sencilla e implica dos tipos de
operaciones:
1. Denir el valor de cada una de las dos matrices.
2. Utilizacin de estas matrices para transformar los objetos de la escena.
Para denir el valor de cada matriz es necesario:
Indicar con
(matriz activa).
Matrix )
o se debe multiplicar
matriz activa.
La utilizacin de las matrices para transformar los objetos de la escena es
automtica: cada vez que le pasamos un vrtice a OpenGL, ste se multiplica
primero por la matriz GL_MODELVIEW (obteniendo el vrtice en coordenadas del observador) y despus se multiplica por la matriz GL_PROJECTION
(obteniendo el vrtice en coordenadas normalizadas).
50
A. OpenGL y GPUs
Finalmente, se pasa de coordenadas normalizadas a coordenadas de viewport, mediante la llamada transformacin del viewport. La denicin del
glViewport(x, y,
(x, y) es la esquina superior izquierda del viewport en coordenadas pantalla y (cx, cy) corresponden a la anchura y altura del viewport
cx, cy),
donde
deseado.
Figura A.1:
A.2.
Pipeline
de OpenGL
Programacin de la GPU
En esta seccin se explican las ventajas que aportan las tarjetas grcas
de ltima generacin en la
renderizacin
Generacin
Ao
Nombre
Primera
Fin. 1998
RIVA TNT
se-
50M
polgonos
renderizados
por segundo
6M
Primera
Princ. 1999
RIVA TNT2
75M
9M
Segunda
Fin. 1999
GeForce 256
120M
15M
Segunda
Princ. 2000
GeForce2
200M
25M
Tercera
Princ. 2001
GeForce3
800M
30M
Tercera
Princ. 2002
GeForce4Ti
1200M
60M
Cuarta
Princ. 2003
GeForceFX
2000M
200M
51
escriba directamente los datos que codicaban las imgenes que se queran
mostrar por pantalla despus de haber realizado todos los clculos pertinentes.
Con la aparicin de las GPUs de primera generacin se consigui descargar a la CPU de parte del proceso de visualizacin, que en este punto
se encargaba de las transformaciones geomtricas mientras que la GPU se
encargaba de toda la parte de rasterizacin de polgonos.
Las GPUs de segunda generacin realizaban todos los clculos del proceso de visualizacin. Eran capaces de realizar tanto las transformaciones
geomtricas como todo el proceso de rasterizacin. De este modo la CPU
se encargaba nicamente de gestionar los datos que la GPU necesitaba para
llevar a cabo la visualizacin 3D.
Con la aparicin de las GPUs de tercera generacin surgi el concepto
de
visualizacin que realiza la GPU. En esta generacin de GPUs se podan programar las transformaciones geomtricas. Estos programas reciben el nombre
de
vertex shaders
vertex program.
La ltima generacin de tarjetas grcas que existe hasta el momento permite programar tanto las transformaciones geomtricas como el proceso de
rasterizacin. A los
este proyecto.
A.2.1.
Shaders
hardware compatible con DirectX 8 (GeForce 2 y anteriores, Radeon 7000 y anteriores) el pipeline grco slo poda ser congurado, pero no
Hasta el
52
A. OpenGL y GPUs
delos de iluminacin. Sin la utilizacin de
shaders
otro modelo de iluminacin con OpenGL, pero gracias a ellos se puede escribir
un modelo de iluminacin propio. Esto es slo un ejemplo de lo que permite
environment
mapping, iluminacin por pxel, bump mapping, parallax bump mapping, . . .
el uso de
Un
shaders
shader
shaders :
shading
shader
glVertex
(o
glDrawArrays, . . . ) el vertex
vertex shader se
shader.
Normalizacin y escalado.
Iluminacin.
Fragment shader :
un
fragment shader
vertex shader,
un
fragment shader sustituye todas las operaciones por defecto de fragmento del pipeline de OpenGL. Algunas de las funciones sobre las que
se obtiene control o efectos que se pueden crear son:
Modicacin del
Niebla.
Sombras.
buer
de profundidad.
53
Figura A.2:
frame buer :
GLSL
A continuacin se explicar ms detalladamente el uso de
shaders
en el
fragment shader
rayo de visin y el
relief map.
Float.
Integer.
Boolean.
Sampler
Por otra parte se pueden declarar vectores y matrices de dos, tres y cuatro
componentes de los tres primeros tipos bsicos.
Existen tres tipos de parmetros de entrada o de salida en los
54
shaders :
A. OpenGL y GPUs
Uniform : Son parmetros cuyo valor no cambia durante toda la renderizacin, como por ejemplo la posicin de la luz o su color. Estn
disponibles tanto para vertex shaders como fragment shaders y son
slo de lectura.
Atribute : Son parmetros de entrada slo disponibles en los vertex shaders y su valor cambia para cada vrtice, como por ejemplo las coordenadas del mismo. Son slo de lectura.
Varying : Sirven para pasar valores del vertex shader al fragment shader. En el vertex shader son parmetros de escritura mientras que en
el fragment shader son slo de lectura. Se deben declarar con el mismo
nombre en los dos shaders para que el paso de datos sea correcto.
Alguna de las funciones denidas para acceder a valores absolutos del
renderizado
tura de la textura X.
de 4x4.
transpuesta de la matriz
las normales.
gl_Position : vector 4D que representa la posicin nal del vrtice despus de ser procesado.
55
en el
gl_FragDepth : Float
buer
de profundidad.
GLhandleARB : representan los vertex y fragment shaders y el programa que los contendr y se ejecutar en el pipeline gr-
Declarar objetos
co.
pa-
shader
que se
desee crear.
Pasar el cdigo fuente a los
56
Apndice B
Fragment shader
// Representacin del impostor
//
//
//
//
//
//
V2----------V3
|
|
|
|
|
|
|
|
V0----------V1
struct Impostor
{
sampler2D sampler0; //
sampler2D sampler1; //
vec3 normal;
//
vec3 u;
//
vec3 v;
//
vec3 p0;
//
float lu;
//
float lv;
//
vec2 depthFactor;
//
float range; // zfar // con la
};
ambient += gl_LightSource[i].ambient;
diffuse += gl_LightSource[i].diffuse * nDotVP;
specular += gl_LightSource[i].specular * pf;
58
B. Fragment shader
//
//
//
//
//
60
B. Fragment shader
depth+=size;
void main()
{
// 1. Calcular la direccin de visin del fragmento
vec3 v;
if (!renderORIs)
v = normalize(coord - eye);
else
v = dir;
// 2. Obtener componentes de v respecto a la base del plano
vec3 vp = normalize(vec3(dot(impostor.u, v),
dot(impostor.v, v), -dot(impostor.normal, v)));
// 3. Texel inicial
vec2 startTexel = gl_TexCoord[0].st;
// 4. Direccin de avance en espacio textura
// se divide por vp.z para que,
// dir*lambda est a distancia lambda del plano
vec2 dir = impostor.depthFactor * vp.xy / vp.z;
// 5. Determinar profundidad de la interseccin
float d_in, d_out;
ray_intersect_binary_search(impostor.sampler0,
startTexel, dir, d_in, d_out);
vec2 st_in = startTexel + d_in*dir;
vec2 st_out = startTexel + d_out*dir;
vec4 color_in = texture2D(impostor.sampler0, st_in);
vec4 color_out = texture2D(impostor.sampler0, st_out);
// si el salto es demasiado grande, es una pared 0.05
const float jump = 0.05;
if ((color_out.a - color_in.a) > jump) discard;
// Determinar coords st del texel
// que contiene el color el fragmento
vec2 st;
61
vec4 color;
if (abs(color_in.a - d_in) < abs(color_out.a - d_out))
{
st = st_in;
color = color_in;
}
else
{
st = st_out;
color = color_out;
}
// Si el color es el color de fondo
// de la textura descartamos el fragmento
if (color == vec4(1.0, 1.0, 1.0, 1.0)) discard;
// Calcular normal a la superficie
vec3 surfaceNormal;
if (normalCompressed) // Normal comprimida 3dc
{
vec2 uv = st;
uv.y *= -1.0;
surfaceNormal.xy = (texture2D(impostor.sampler1, uv).xy * 2.0) - 1.0;
surfaceNormal.z = sqrt(1.0 - dot(surfaceNormal.xy, surfaceNormal.xy));
}
else
{
surfaceNormal = texture2D(impostor.sampler1, st).xyz;
surfaceNormal = surfaceNormal*2.0 - vec3(1.0, 1.0, 1.0);
}
// Clculo de la profundidad del fragmento (z)
float z;
// Perturbar la Z segn el ngulo entre la normal
// de la superficie y la normal del impostor
float cos = dot(normalize(surfaceNormal) , normalize(impostor.normal));
float k = 1.0/32.0; //32.0/256.;
float zmod = color.a - k*cos;
// pto es el punto sobre el plano ms prximo
// a la interseccin con la superficie, en SCA
// Q es el pto de interseccin rayo-superficie,
// primero en SCA, luego en clipping space
62
B. Fragment shader
vec3 pto = impostor.p0 + impostor.lu*st.s*impostor.u +
impostor.lv*st.t*impostor.v;
vec4 Q = vec4(pto - (zmod * impostor.range)*impostor.normal, 1.0);
Q = gl_ModelViewProjectionMatrix * Q;
z = ((Q.z/Q.w)+1.0)/2.0;
gl_FragDepth = z;
if (renderNormal)
gl_FragColor = texture2D(impostor.sampler1, st);
else
{
if (!renderORIs)
color = light(color, gl_NormalMatrix*surfaceNormal);
gl_FragColor = color;
}
63
64
Referencias
+
[ABB 07] Carlos Andjar, Javier Boo, Pere Brunet, Marta Fairn, Isabel
Navazo, Pere Pau Vzquez, and Alvar Vinacua. Omni-directional
Computer Graphics Forum (accepted for publication), 26(3): to be presented at Eurographics 2007.
relief impostors.
[AL99]
SIGGRAPH '99:
Proceedings of the 26th annual conference on Computer graphics
and interactive techniques, pages 307316, New York, NY, USA,
ment to provide a guaranteed frame rate.
In
+
[CMR 99] P. Cignoni, C. Montani, C. Rocchini, R. Scopigno, and M. Tarini.
Preserving attribute values on simplied meshes by resampling
detail textures.
[GM04]
[Hop96]
SIGGRAPH '96: Proceedings of the 23rd annual conference on Computer graphics and
interactive techniques, pages 99108, New York, NY, USA, 1996.
Hugues Hoppe. Progressive meshes. In
ACM Press.
65
REFERENCIAS
[JWP05]
Stefan
Jeschke,
Michael
Wimmer,
and
Werner
Purgathofer.
pages 120,
[lmv]
The OpenGL
http://www.upc.edu/cpsv/lmvc/index.htm.
+
[LWC 02] David Luebke, Benjamin Watson, Jonathan D. Cohen, Martin
Reddy, and Amitabh Varshney.
[RL00]
SIGGRAPH '00:
Proceedings of the 27th annual conference on Computer graphics
and interactive techniques, pages 343352, New York, NY, USA,
point rendering system for large meshes.
In
Computer
[TCS03]
66
In
Visibility
VIS '03:
REFERENCIAS
pa-
Quick-
67