Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FACULTAD DE INGENIERÍA
OCTUBRE 2011
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Resumen
La visualización de terrenos es un tema importante y popular en el área de la
computación gráfica. El problema que se presenta es lograr una visualización en
tiempo real de terrenos extensos aptos para aplicaciones interactivas como
simuladores de vuelo. El interés reside en administrar eficientemente la gran
cantidad de datos utilizados para modelar la superficie de un terreno extenso y
detallado.
Este trabajo presenta una solución que parte de representar el terreno
utilizando distintas resoluciones para diferentes regiones del mismo. La resolución o
nivel de detalle a utilizar en cada región se administra de manera dinámica en
tiempo de ejecución.
Es motivo de interés del trabajo estudiar las propiedades y características de
los hardware gráficos actuales. Se evalúan las novedades introducidas por las
tarjetas de video o GPU que responden al modelo Shader Model 4.0. El análisis de
este hardware gráfico es necesario ya que la implementación de parte de la
solución en las unidades programables de las tarjetas permite obtener mejores
resultados.
La solución presentada consiste en el diseño y la implementación de una
técnica simple, que obtiene como resultado una visualización precisa con un buen
rendimiento. La técnica propuesta está basada en la técnica Geometry Clipmaps
que pertenece al estado del arte del tema. Además, la misma brinda una
visualización donde el error de aproximación, producto de utilizar resoluciones
menores a la máxima disponible, que es percibido por el usuario se encuentra
acotado a un valor umbral que se considera despreciable.
Por último, la implementación aprovecha el poder de procesamiento de las
GPU modernas utilizando la librería gráfica Direct3D 10. Los resultados obtenidos
permiten la navegación en tiempo real de grandes extensiones de terreno,
consumiendo poco procesamiento de CPU.
Abstract
Terrain visualization is an important and popular aspect in the computer
graphics area. The problem involved consists in achieving a real-time visualization
of large terrains in order to develop interactive applications such as flight
simulators. The key point is to efficiently manage the great amount of data that is
used to model large and detailed terrain surfaces.
This work presents a solution where the terrain is represented using several
resolutions in different regions of its surface. The resolution or level of detail used
to represent each region is dynamically managed in runtime.
This thesis is also focused on the study of current graphics hardware
properties and capabilities. The novel characteristics introduced in the GPUs that
support Shader Model 4.0 are analyzed. This analysis is necessary in order to
implement part of the solution using the graphics processing units available in the
GPUs so as to obtain better results.
The solution that is presented consists in the design and implementation of a
simple terrain rendering technique that achieves a precise visualization with a good
performance. The technique introduced is based on Geometry Clipmaps that
belongs to the state-of-the-art. Moreover, our technique achieves an error-bounded
visualization. That means that the perception of the approximation error,
introduced by the use of different levels of detail, is bounded.
Finally, the implementation takes advantage of modern GPU processing power
using Direct3D 10 graphics library. The results obtained allow a real-time
navigation over large terrain extensions, consuming little CPU processing time.
I
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Agradecimientos
Este trabajo marca la culminación de mi carrera de grado,
permitiéndome recibir el título de ingeniero en informática. Deseo agradecer
a muchas personas por el apoyo recibido en este trabajo, durante la carrera
y en la vida misma.
Lucas.
(Octubre 2011)
III
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Índice
Resumen.............................................................................................I
Abstract ..............................................................................................I
Índice ................................................................................................ V
1 Introducción ................................................................................. 1
1.1 Visualización de Terrenos ......................................................... 1
1.2 Objetivo de esta Tesis ............................................................. 3
4 Renderizado de Terrenos.............................................................. 15
V
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
8.1 Nueva Versión del Pipeline Gráfico........................................... 45
8.2 Recursos y su Utilización ........................................................ 46
8.3 Configuración del Pipeline: Efectos .......................................... 48
8.4 Análisis de las Nuevas Características Introducidas.................... 48
13 Conclusiones ........................................................................... 97
13.1 Trabajos Futuros ................................................................ 98
Referencias ...................................................................................... 99
VI
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
1 Introducción
En las últimas dos décadas las aplicaciones gráficas para la plataforma
PC han tenido un crecimiento exponencial, impulsadas principalmente por la
industria de videos juegos. Actualmente se han alcanzado resultados
visuales que son casi indistinguibles de la realidad, como, por ejemplo, se
puede observar en las últimas películas animadas. Sin embargo, los
resultados logrados no implican que el crecimiento del área se haya
detenido, sino que se sigue trabajando en mejorar distintos detalles para
obtener aún más realismo. La rama de las ciencias de la computación que
se centra en el estudio y la evolución de las aplicaciones gráficas es llamada
computación gráfica. Esta área estudia la manera de generar imágenes o
gráficos por computadora, siendo uno de sus principales objetivos la
generación de imágenes o animaciones (sucesiones de imágenes) que se
asemejen a fotos y videos de la vida real.
Dentro del área de la computación gráfica podemos diferenciar dos
grandes ramas que se caracterizan por el tiempo disponible para generar
las imágenes o animaciones. Por un lado, se encuentran aquellas
aplicaciones donde el tiempo no es un limitante y, por ende, se puede
invertir el tiempo necesario de procesamiento para generar las imágenes
con el realismo deseado, como por ejemplo en la confección de películas
animadas. Por otro lado, existen aquellas donde la visualización se debe
realizar en tiempo real, como ocurre en videos juegos, en simuladores de
entrenamiento y en aplicaciones interactivas con representación visual de
escenarios virtuales o sintéticos. Estas aplicaciones requieren que cada
cuadro este listo para mostrarse con la suficiente rapidez como para no
afectar la ilusión de continuidad de movimiento en la animación,
proveyendo así una adecuada experiencia de usuario interactiva.
El crecimiento de la calidad de las aplicaciones, mencionado en el
comienzo, fue viabilizado por el avance de la tecnología. El progreso
permitió un incremento en forma sostenida de las capacidades tanto de
almacenamiento como de procesamiento.
En un principio, los sistemas capaces de generar buenas
visualizaciones implicaban hardware especial y una gran inversión de
dinero. Al igual que las computadoras, con el tiempo, estos sistemas con
gran potencia gráfica se hicieron accesibles y, hoy en día, esas capacidades
fueron introducidas en placas gráficas o tarjetas de video.
En la actualidad, las tarjetas de video permiten programar distintas
partes de su procesamiento. Esta cualidad permite utilizarlas con distintos
fines, implementando algoritmos que serán ejecutados por las unidades de
procesamiento gráficas (GPUs) propias de la tarjeta.
Introducción 1
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Actualmente, para la representación de terrenos reales se dispone de
la información de la altura de distintos puntos de la superficie terrestre con
una granularidad que llega a un espaciamiento de decenas de metros entre
puntos consecutivos. Un terreno puede entonces representarse como una
malla de puntos ubicados en una escena tridimensional. Esto implica un
enorme volumen de datos para un terreno de algunos cientos de kilómetros
de lado, tamaño que es como mínimo necesario para aplicaciones como un
simulador de vuelo. Esta gran cantidad de datos es aún un inconveniente
para las capacidades de procesamiento de las tarjetas gráficas actuales si
se desean resultados interactivos. La manera de modelar un terreno
mediante un conjunto de puntos es abordado en el Capítulo 2.
El desafío en la visualización de terrenos consiste en representar
fielmente los detalles del terreno, manteniendo la fluidez de generación de
imágenes necesaria para brindar animaciones con continuidad visual. Esto
implica encontrar un punto de compromiso entre la granularidad (cantidad
de puntos y polígonos) con la que se va a modelar un terreno y la velocidad
con la que puede procesarse esa cantidad de datos para generar imágenes
con la fluidez deseada. En el Capítulo 3 se introduce el pipeline gráfico, la
secuencia de tareas, comunes en computación gráfica, que se realizan para
la generación de las imágenes a visualizar a partir de modelos
tridimensionales.
Además del desafío mencionado en el párrafo anterior, la visualización
o renderizado de terrenos presenta otros aspectos característicos que son
analizados en el Capítulo 4. Luego, las soluciones que se han propuesto
para resolver el desafío siguen una misma línea de trabajo. Esta consiste
en representar el terreno utilizando distintos niveles de detalle en diferentes
regiones del mismo, con el fin de disminuir la cantidad de datos (o
geometría) a dibujar. Estas soluciones son conocidas como algoritmos o
técnicas de nivel de detalle o, en inglés, level-of-detail (LOD). Las
características comunes a estas soluciones son presentadas en el Capítulo
5.
En los últimos 15 años, se han publicado varios trabajos que proponen
distintas soluciones. Durante la década del ’90, y hacia finales de la misma,
se han publicado trabajos significativos en el tema que sentaron las bases
de los trabajos posteriores y actuales. El Capítulo 6 se concentra en la
descripción de los tres trabajos más importantes que introdujeron
estrategias y técnicas que son utilizadas aún hoy en día.
Luego, con el comienzo de una nueva década, en el 2000, surge una
revolución en el hardware gráfico, es decir, en las tarjetas de video. Sus
capacidades de procesamiento comienzan a aumentar en forma exponencial
y, además, incorporan la posibilidad de ejecutar programas específicos de
una forma muy eficiente. En el Capítulo 7 se resume la evolución de este
hardware que dio lugar a distintas generaciones de GPU, tarjetas gráficas o
tarjetas de video. Luego en el Capítulo 8, se presentan en mayor detalle
las características de la última generación de GPU, ya que en este trabajo
se propone una solución que hace uso de las novedades introducidas para
lograr una técnica de visualización de terrenos eficiente.
Dada la evolución experimentada por las GPU, las soluciones debieron
modernizarse para aprovechar las capacidades que fueron incorporadas, ya
que algunos de los esfuerzos realizados por las soluciones anteriores
dejaron de ser necesarios. En el Capítulo 9 se presentan dos soluciones
modernas que pertenecen al estado del arte en el área de visualización de
2 Introducción
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
terrenos. Las soluciones descriptas son populares dado a su eficiencia y
relativa simpleza de implementación.
Introducción 3
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
2 Modelado de Terrenos
La representación gráfica de ambientes tridimensionales comenzó a ser
utilizada en los videojuegos. El objetivo era mostrar a los usuarios
escenarios que parecieran reales para lograr la inmersión de los mismos en
las situaciones representadas. En los comienzos, los escenarios
representados eran interiores de edificaciones o callejones en ciudades,
común en videojuegos del tipo first person shooter (FPS). Este tipo de
escenarios, conocidos como indoors, no contaba con representaciones de
terrenos. A lo sumo, podía visualizarse el exterior a través de una ventana
del edificio que se recorre, y para ello se utilizaba una fotografía.
Limitaciones del hardware gráfico y de procesamiento, dificultaban el
modelado tridimensional de un terreno. Algunas aplicaciones que utilizaban
la representación de un ambiente en exteriores (ó outdoors), modelaban
una pequeña porción de terreno, limitando el movimiento de los personajes
a esa área y utilizando también fotografías para la representación de zonas
alejadas y el horizonte.
El advenimiento de mayores capacidades en el hardware gráfico y de
procesamiento en las computadoras, dio lugar a la búsqueda de soluciones
para el modelado de grandes extensiones de terreno. Aplicaciones basadas
en la navegación y visualización interactiva de terrenos se pudieron
comenzar a desarrollar. Los simuladores de vuelo de entrenamiento fueron
las primeras aplicaciones que impulsaron la generación de mecanismos para
la visualización de terrenos extensos. Hoy en día, estos mecanismos han
sido incorporados a un amplio espectro de aplicaciones que aprovechan esta
capacidad, como por ejemplo, los sistemas de información geográfica.
Una porción de terreno puede modelarse en un espacio tridimensional
como una malla de puntos. En otras palabras, puntos interconectados por
segmentos de rectas pueden representar la superficie de un terreno natural.
Cada punto posee una posición tridimensional en el espacio y esta
conectado a dos o más puntos, de manera de formar un mallado cerrado.
Modelado de Terrenos 5
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
donde los ejes X e Y representan el plano horizontal del terreno, y la
coordenada Z de cada punto, la altura del mismo respecto a una altura de
referencia, por ejemplo, el nivel del mar. Además, se utilizará una terna de
mano izquierda (Figura 2.1).
Luego, la superficie formada por la malla de puntos es texturada
artificialmente o con imágenes satelitales de la región natural representada.
Figura 2.2 – A la izquierda un ejemplo de una malla irregular o TINs. A la derecha puede
verse una malla regular.
6 Modelado de Terrenos
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
A partir de las diferencias estructurales de estas dos formas de
representación de un terreno pueden inferirse otras comparaciones entre
las mismas. Larsen y Christensen, en [Larsen03], enumeran algunas de las
propiedades del uso de un mallado regular o, como también es conocido,
campo de alturas (del inglés height field). Las tres propiedades que
destacan los autores son consideras como ventajas sobre el uso de TINs y
se enumeran a continuación:
• La estructura regular permite ordenar y disponer de las
elevaciones en una estructura de datos simple como una matriz
de dos dimensiones o, incluso, una imagen.
• La consulta sobre la elevación de un punto cualquiera en la
superficie puede resolverse mediante un acceso directo a la
estructura de datos. Computacionalmente, una consulta de
primer orden u O(1). Dado este tipo de acceso, esta estructura de
datos es conocida también como mapa de alturas (del inglés
height map).
• Pueden discriminarse fácilmente regiones de terrenos contenidas
en un volumen de interés en el espacio.
Por otro lado, el uso de mallas irregulares permite representar una
superficie de un mismo terreno, usando menor cantidad de puntos y
polígonos que un mallado regular. Zonas planas de terreno son
representadas con menor densidad de puntos, mientras que aquellas
regiones con mayores detalles, como montañas, ríos y costas, concentrarán
mayor cantidad de muestras y pueden modelarse con mayor precisión.
Estas diferencias brevemente introducidas, entre otras, motivan la
elección de una alternativa sobre la otra dependiendo de la disponibilidad de
recursos y el enfoque de cada solución. Más adelante en este trabajo, en el
Capítulo 6, se ejemplifican las motivaciones presentes en distintos trabajos,
que los llevaron a adoptar una disposición geométrica y sus consecuentes
características.
Modelado de Terrenos 7
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Los modelos basados en grillas regulares son los más compactos y
usualmente utilizados y distribuidos, ya que sólo se necesita almacenar el
valor de elevación o altura de cada punto. Los términos mayormente
utilizado para nombrar estos archivos son “modelos digitales de elevación”
(DEM, Digital Elevation Model) y “modelos digitales de terrenos” (DTM,
Digital Terrain Model). DTM es un término más genérico ya que DEM es
también utilizado para referirse a un formato particular de archivo.
Una de las maneras más sencilla de disponer los datos de elevación de
un modelo regular, es almacenarlos en un archivo de imagen. Imágenes y
modelos de elevación regulares coinciden en contener datos discretos
organizados en una estructura 2D, como por ejemplo, en filas y columnas
de una tabla o matriz. Las unidades discretas de las imágenes son los
píxeles, y en los modelos de elevación de interés son los valores de altura
de cada punto. Cabe destacar que los formatos de archivos de imágenes
tienen un propósito distinto, permitiendo esquemas de compresión y
resoluciones que pueden resultar insuficientes e inapropiados para los
modelos de elevación. Sin embargo, dada la variedad de formatos de
imágenes disponibles, hay algunos que pueden utilizarse adecuadamente
para almacenar los modelos de elevación, complementados con parámetros
que son distribuidos paralelamente. Los formatos de archivos más utilizados
son PNG, JPEG y TIFF; todos ellos excluyendo el uso de compresión con
pérdida.
Por otro lado, han surgido formatos de archivos específicos para
almacenar modelos de elevación. Los mismos contienen un encabezado
para definir parámetros necesarios en estos modelos, como la resolución del
muestreo, el sistema de coordenadas de los datos o valores de referencia, y
la resolución vertical, entre otros datos georeferenciales.
Los modelos de elevación pueden conseguirse de manera libre o con
cargo en distintos sitios disponibles en la Web. En el sitio del Servicio
Geológico de Estados Unidos (United States Geologic Survey, USGS) pueden
conseguirse archivos en formato DEM o STDS (estándar de transferencia de
datos espaciales, spatial data transfer standard) con resoluciones de hasta
10 o 30 metros entre los puntos muestreados de la superficie terrestre. El
Departamento de Defensa de los Estados Unidos reporta tener archivos
DTED (datos digitales de elevación de terrenos, digital terrain elevation
data) con resoluciones de 30, 10, 3, y 1 metro entre los puntos; pero los
mismos no se encuentran disponibles para usos civiles. Finalmente otros
formatos de archivos que son utilizados para la descripción de modelos de
terrenos son GeoTIFF, imágenes georeferenciales basadas en el formato de
archivo de imágenes etiquetado (TIFF, tagged image file format); y BT
(Binary Terrain), formato de archivo binario para la descripción de terrenos.
8 Modelado de Terrenos
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
3 El Pipeline Gráfico
Para llevar a cabo una representación virtual de un ambiente
tridimensional, se realiza un modelado del escenario. Dicho modelo incluye
la representación geométrica de los objetos presentes, las condiciones de
iluminación de la escena y el lugar dentro de la misma desde dónde es
apreciada. Cada objeto es representado a través de combinaciones, más o
menos complejas, de figuras geométricas, el color o las texturas de sus
superficies, y su posición y orientación en la escena. Luego se configuran las
condiciones de iluminación, es decir posición, color, tipo y demás atributos
de cada fuente de luz presente en la escena. Por último, se determina la
posición y dirección del punto de vista o de la cámara a través de la cual se
visualiza el ambiente.
La visualización del ambiente en un dispositivo, como la pantalla de un
monitor, es posible gracias a software y hardware especializado. Dicha
especialización permite dibujar eficientemente sobre una pantalla
bidimensional la proyección, comúnmente en perspectiva, de una escena
tridimensional (Figura 3.1).
Figura 3.1 – A partir del modelado de una escena tridimensional (a) se obtiene una imagen
o cuadro (b). En (a) se ve el modelado de la escena utilizando objetos y posicionando una
cámara. Además, puede verse el volumen de visualización de la cámara. En (b) se muestra
lo visualizado por la cámara: la escena proyectada (en perspectiva).
1
Renderizar es una castellanización del verbo en ingles “to render”, cuya traducción literal es traducir o
interpretar. Puede considerarse que la acción consiste en traducir un modelo tridimensional a una imagen
bidimensional.
El Pipeline Gráfico 9
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
La navegación interactiva de ambientes virtuales implica la necesidad
de generar en el dispositivo de salida una secuencia de imágenes (también
llamadas cuadros) que brinden una sensación de continuidad en el
desplazamiento o movimiento. El pipeline gráfico debe renderizar cuadros
con una velocidad de al menos 15 cuadros por segundo para que el ojo
humano no note discontinuidades en la animación [Akenine-Möller et al.
2008].
El rendimiento del pipeline gráfico, o de aquellas aplicaciones que lo
utilizan para la visualización de ambientes virtuales, es medido
comúnmente a partir de la velocidad con la que se renderizan los cuadros.
La medida con la que el rendimiento es expresado es la cantidad de cuadros
por segundo o, en inglés, frames per second (fps). Las tarjetas gráficas que
implementan las funcionalidades del pipeline gráfico junto con el software
que las acompaña (los controladores o drivers) son fabricadas de manera
genérica. De esta manera, las distintas etapas son optimizadas por los
fabricantes por igual. Por lo tanto, el rendimiento es determinado por la
manera en que la aplicación utiliza el pipeline gráfico. Finalmente, como el
pipeline gráfico consiste en una secuencia de etapas que trabajan
paralelamente, el rendimiento resultante está limitado por la etapa que
requiere mayor tiempo de procesamiento, la cual es denominada “cuello de
botella”.
En computación gráfica, para introducir los datos al pipeline gráfico se
utilizan librerías gráficas que hacen uso de los distintos hardware gráficos y
brindan una abstracción común del mismo. Las librerías gráficas más
populares son DirectX y OpenGL, en sus diferentes versiones.
El pipeline gráfico puede modelarse de manera genérica en tres etapas
(Figura 3.2). El pipeline recibe datos geométricos de los objetos de una
escena y otros datos de configuración de la aplicación, y genera como salida
una imagen que es mostrada en un dispositivo, como ser, un monitor.
10 El Pipeline Gráfico
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
• La normal: la dirección del vector normal al mallado al que
pertenece el vértice en esa posición. Es usada para calcular la
incidencia de las distintas fuentes de luz y para determinar la cara
frontal de los triángulos que define.
• El color: puede contener la información del color del vértice.
• Las coordenadas de textura: alternativamente al color, si el
mismo debe ser tomado de una textura, las coordenadas para
realizar el muestreo dentro de la textura correspondiente.
Además del conjunto de vértices que representarán un objeto, debe
introducirse la información de cómo deben usarse los mismos para armar
los triángulos u otras primitivas (puntos y líneas). Esta información es
simplemente una secuencia de los índices de los vértices descriptos
anteriormente.
3.2 Transformaciones
El Pipeline Gráfico 11
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
En forma resumida, la Figura 3.3 muestra la secuencia de
transformaciones aplicadas al modelo geométrico de un cubo. En un
principio el cubo es modelado en coordenadas propias del objeto. Luego,
aplicando distintas matrices de mundo, se ubican tres instancias del cubo
dentro de una misma escena. Cada matriz del mundo aplica un conjunto
distinto de operaciones de traslación, rotación y escalado. De esta manera
se ubican los vértices del cubo en coordenadas del mundo. A continuación,
a todos los objetos de la escena se les aplica la transformación de vista,
para que las posiciones de sus vértices queden relativas a la ubicación de la
cámara. El siguiente paso consta de aplicar a los objetos la matriz de
proyección. La matriz de proyección es utilizada para definir el volumen de
visualización o frustum, y como resultado se transforman los vértices a
coordenadas canónicas. Finalmente, se visualizan aquellos objetos que
quedan dentro del cubo canónico.
Coordenadas del Objeto Coordenadas en el mundo
( 0 , 0 , 0 )obj
( -3 , 10 , 5 )mundo y x
instancia 3
del cubo
modelo del cubo
v11 v12 v13 v14
y x v v 22 v23 v24
MatrizVist a =
21
(1,1,1)
( 1 , 10 , -2 )vista
volumen de y z
visualización
x
plano de
proyección
12 El Pipeline Gráfico
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
secuencia de índices. En esta etapa, las primitivas que quedan fuera del
volumen canónico de visualización son descartadas del pipeline. Aquellas
que se encuentran parcialmente dentro, son recortadas reemplazando los
vértices que quedan fuera por vértices en las intersecciones de la primitiva
con el cubo canónico (Figura 3.4).
3.4 Rasterización
Figura 3.5- Etapa de rasterización. Se obtienen los píxeles necesarios para representar las
primitivas que quedan dentro del volumen canónico de visualización.
El Pipeline Gráfico 13
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Dos o más primitivas pueden generar fragmentos en la misma
posición. El fragmento que debe dibujarse es aquel que se encuentra más
cercano al observador, es decir, aquel que no se encuentra tapado por otro.
El valor de la coordenada Z, o valor de profundidad, es utilizado para dirimir
el fragmento que se convertirá en píxel. Para esto se utiliza una estructura
de datos llamada Z-buffer o buffer de profundidad (en inglés, depth buffer)
que almacena el valor de profundidad del último fragmento dibujado en el
frame-buffer. Un fragmento es descartado si su valor de profundidad es
mayor al que se encuentra en el Z-buffer para la misma posición.
El color del fragmento candidato a convertirse en un píxel de la imagen
final es decidido en esta etapa. El color puede obtenerse del atributo que
acompaña a cada vértice o puede muestrearse de una textura en particular,
a partir de las coordenadas de textura para ese fragmento. Más aún,
operaciones de iluminación y transparencia pueden contribuir en el color
final de un píxel.
Finalmente, los fragmentos dibujados en el frame-buffer son
mostrados en la pantalla del dispositivo.
14 El Pipeline Gráfico
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
4 Renderizado de Terrenos
Como fue introducido anteriormente, aplicaciones que requieren la
visualización y navegación de ambientes tridimensionales han ido
evolucionando y demandando cada vez mayor realismo en los resultados
gráficos producidos. La meta por alcanzar es la producción de
visualizaciones de escenarios virtuales que sean difícilmente diferenciables
de filmaciones del mundo real. Particularmente, el foco de interés de esta
tesis reside en visualizaciones de escenarios naturales, donde el terreno es
el objeto principal de los mismos.
Ulrich [Ulrich 2002] explica de manera simple las características de un
renderizado ideal de un escenario virtual en un dispositivo. La aplicación
debe producir resultados visualmente ricos e interesantes. Por ejemplo,
debe permitir posicionar un observador libremente en el escenario y, desde
ese punto de vista, apreciar los alrededores en perfecto detalle, desde
aquellos árboles en las laderas de montañas lejanas en el horizonte, hasta
las pequeñas rocas que se encuentran a los pies del observador. Además,
debe permitir el control interactivo de dicho observador sin limitaciones a su
movimiento en el escenario, manteniendo la percepción de los detalles
tanto de sus alrededores inmediatos como de las vistas lejanas. Por último,
no debe introducir artefactos (distorsiones o ruido localizado, que producen
un efecto visual con un aspecto característico) que degraden la inmersión
del usuario en ese mundo virtualmente representado, el usuario debe
percibir en todo momento como si estuviera en el mundo real.
Como fue explicado en el capítulo anterior, se desarrollan aplicaciones
que utilizan el pipeline gráfico para renderizar una escena. La escena esta
compuesta por objetos que son modelados mediante mallas de vértices y
otros atributos. El terreno también es representado utilizando una malla de
vértices que modelan su superficie. Una primera aproximación al
renderizado de escenas, y particularmente terrenos, es ingresar de manera
completa la representación disponible del terreno en el pipeline, como si
fuera cualquier otro objeto. Esta técnica para renderizar terrenos, al no
realizar ningún procesamiento particular sobre el mismo, es conocida como
fuerza bruta.
Las primeras tarjetas gráficas especializadas o GPUs (ver Capítulo 7)
ofrecían la capacidad de renderizar miles de vértices manteniendo un
rendimiento aceptable para aplicaciones interactivas, pero el modelado
detallado de terrenos excedía esa capacidad. Utilizar una técnica de fuerza
bruta limita el tamaño y los detalles de los modelos de terrenos soportados.
De esta manera, cuando el punto de vista se encuentra próximo al terreno,
la segmentación de las ondulaciones del modelo se hace evidente y, cuando
se encuentra elevado, se perciben los límites del modelo (Figura 4.1).
Las aplicaciones que utilizaban fuerza bruta como técnica para el
renderizado de terrenos, debían encontrar soluciones para mantener el
realismo. Por ejemplo, podían restringir el movimiento de la cámara u
observador en la escena y de esta manera modelar el terreno
estratégicamente de manera tal de aumentar el detalle en las zonas
cercanas. Otra solución utilizada consistía en representar efectos para
ocultar las regiones lejanas del terreno, por ejemplo utilizando niebla. En
consecuencia, este enfoque restringe las aplicaciones que podían
desarrollarse, dejando afuera por ejemplo a simuladores de vuelo.
Renderizado de Terrenos 15
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Figura 4.1 – Un terreno de 16km x 16km modelado con un mallado regular de 1024 x 1024
vértices. (a) Imagen donde el observador se encuentra cercano al terreno; pueden
observarse las aristas de los polígonos. (b) Imagen donde el observador se encuentra
elevado sobre la superficie; pueden verse los límites del modelo del terreno.
1
El testeo no necesariamente implica cálculos rigurosos para decidir si el objeto se encuentra dentro del
volumen visualizado. Contrariamente, suele constituir un cálculo rápido y burdo, significando poco
procesamiento.
2
Frustum en inglés se refiere a la pirámide truncada que refiere a la forma del volumen de lo visualizado
por una cámara utilizando una proyección en perspectiva. Cull en inglés significa seleccionar o sacrificar
de manera selectiva.
16 Renderizado de Terrenos
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Renderizado de Terrenos 17
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Dada la naturaleza de los terrenos, una superficie de gran extensión, la
cámara se encontrará cercana a ciertas regiones y lejana a otras. Por ende,
es necesario encontrar técnicas que permitan modelar distintas regiones de
terreno con distinto detalle. De esta manera, se podrá mejorar el
rendimiento de las aplicaciones, sin perder calidad visual y aumentando la
superficie de terreno que puede modelarse y visualizarse. Estas técnicas son
conocidas en la bibliografía como técnicas de nivel de detalle. La utilización
de las técnicas de nivel de detalle aplicadas a la visualización de terrenos es
motivo de análisis del siguiente capítulo.
18 Renderizado de Terrenos
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Figura 5.1 – Un mismo terreno representado con mallas con diferente nivel de detalle. El
nivel de detalle de distintas regiones varía según la posición del observador.
Error de modelado:
Un criterio más preciso considera la rugosidad del terreno. El criterio
anterior, utilizando sólo la distancia al observador, concibe representaciones
de los terrenos ignorando las características particulares del mismo. Ese
criterio no considera si cada región representa una superficie llana, con
pocos detalles o de baja frecuencia, o si, por el contrario, modela una
porción de terreno con accidentes geográficos más pronunciados, con
mayores detalles o detalles de alta frecuencia. Por lo tanto, este criterio
más preciso tiene en cuenta, no sólo la distancia al observador, sino
también, las características de la superficie de cada región.
Si un mismo terreno, o región del mismo, es modelado con distinta
cantidad de puntos, existe una diferencia entre las superficies resultantes.
Si una de las superficies es tomada de referencia, se dice que las
diferencias encontradas por una representación alternativa constituyen un
error geométrico o de modelado. Este error geométrico o de modelado
puede encontrarse en coordenadas del objeto, o tras su correspondiente
transformación del mundo, en coordenadas del mundo.
Particularmente, analizamos el caso donde una porción de terreno es
representada con menor resolución a partir de un sub-muestreo de los
vértices utilizados en una representación de mayor resolución o mayor
densidad de vértices. La altura de un punto de la superficie coincidente con
un vértice omitido en una representación de menor detalle, cambiará y será
resultado de una combinación o interpolación de las alturas de los vértices
presentes. La diferencia de alturas (valor de la coordenada z) para el mismo
punto en los modelados de distinto detalle constituye el error de modelado
para ese punto (Figura 5.3).
Figura 5.3 – Error geométrico o de modelado. Vista desde el costado del error en la altura
producido al omitir el vértice blanco en un bloque de menor detalle, su posición imaginaria
quedará en el segmento que une los vértices negros. El cambio en la altura y error de
modelado es h.
w
f
x s
Simplificación o bottom-up
Figura 5.6 – Simplificación vs. Refinamiento. Una misma región de terreno es representada
con mayor o menor detalle.
Figura 5.8 – Grietas que aparecen en el terreno al utilizar distintos niveles de detalle.
Figura 5.9 - Conexión en T sobre el vértice en negro (marcada en rojo), que está en el
borde de dos bloques vecinos con niveles de de detalle diferentes. A la izquierda se observa
una vista superior 2D del mallado. A la derecha se observa el agujero que se produce en la
superficie por la falta de conexión del vértice T en el bloque de menor resolución.
Por otro lado, otro artefacto, que produce un efecto similar a cracks en
el terreno, es también originado por los vértices-T. En el caso en el que la
altura interpolada coincida con la altura original del vértice, también pueden
observarse pequeños agujeros o cracks en la superficie del terreno. Estos
agujeros son originados por diferencias de redondeo de punto flotante
producidos entre las operaciones del pipeline gráfico. En la bibliografía, el
efecto es llamado bleeding tears (lágrimas de sangre) [Luebke et al. 2003].
Temporalmente, también pueden apreciarse discontinuidades. El
artefacto es llamado “popping” (del verbo inglés to pop, saltar). El mismo se
refiere a la percepción de saltos ó pops en la superficie del terreno, es decir,
un cambio brusco y repentino en la geometría del terreno. Esto ocurre
D
ε
A C
Figura 6.1 – Triángulos ABD y BCD se combinan formando ABC. El error de modelado ε
surge de la omisión del vértice D.
Figura 6.2 – Árbol binario de triángulos. Los niveles son formados a partir de una bisección
de triángulos recursiva.
Figura 6.3 – Operaciones de split y merge sobre ambos triángulos de un diamante. Cuando
el triángulo AED es refinado surgiendo el vértice H, también se refina el triángulo AFD. De
manera equivalente, cuando los triángulos AHE y EHD se combinan, también deben
combinarse los triángulos AHF y FHD.
Por otro lado, los efectos de salto son totalmente eliminados si se toma
la tolerancia t igual a 1, pero lo mismo puede llevar a tener muchos
polígonos renderizados afectando el frame-rate. En contraposición, Hoppe
introduce el concepto geomorphs. El uso de geomorphs significa que el
cambio de geometría, tras una operación de vsplit o ecol, sea realizado de
manera progresiva a través del avance de algunos cuadros. Por ende, el uso
de geomorphs en tiempo de ejecución, permite un valor más alto en la
tolerancia, logrando que el cambio en la malla sea progresivo, en lugar de
instantáneo. Puntualmente consiste en ir interpolando la posición del vértice
a lo largo de x cuadros (parámetro dado por el usuario). Cabe destacar que
estos geomorphs son utilizados sólo cuando los vértices involucrados son
Pre – GPUs
David Evans e Ivan Sutherland fueron los pioneros de la computación
gráfica tras fundar su compañía Evans & Sutherland en 1968. Proveyeron
soluciones para proyectos militares de simulación y entrenamiento, entre
otros. Luego, en 1981, Sillicon Graphics (SGI) fue fundada por alumnos de
Ivan Sutherland. Estas compañías fueron las que diseñaron y desarrollaron
costosos sistemas de hardware específicos, que sentaron las bases de
varios conceptos de la computación gráfica actual, como las
transformaciones de vértices y el uso de texturas. Hoy en día, las GPU
accesibles han sobrepasado largamente las capacidades de aquellos
sistemas exclusivos.
Ensamblado de Ensamblado de
Rasterización Rasterización
Primitivas Primitivas
Operaciones de Operaciones de
Rasterización Rasterización
Rasterizado Rasterizado
Operaciones de
Frame Buffer Frame Buffer Fragment Shader
Rasterizado
Operaciones de
Frame Buffer
Rasterizado
Frame Buffer
Figura 7.1 – Implementación del pipeline gráfico en las primeras cuatro generaciones de
GPUs. (a) Primer Generación: Sólo se implementa en GPU las etapas de pasterización. (b)
Segunda Generación: Se incorpora la transformación y ensamblado de vértices dentro de las
GPUs. (c) Tercer Generación: surge la primera etapa programable, el vertex shader. (d)
Cuarta Generación: se aumenta la posibilidad de programación dentro de las GPU, en etapas
de vertex shader y fragment shader.
Input Assembler
Vertex Shader
Geometry Shader
Stream Output
Rasterizer
Pixel Shader
Output Merger
Figura 8.1- Etapas del nuevo pipeline gráfico introducido en el Shader Model 4.0. Las etapas
programables se encuentran sombreadas en amarillo.
Geometry Shader
Geometry Shader
Rasterizer Rasterizer
Rasterizer Rasterizer
Figura 8.2 – Cuatro maneras diferentes de utilizar el pipeline gráfico del SM4.0.
Figura 9.1- Distintos niveles de GeoMipMaps a partir de un bloque original de 5x5 vértices.
Figura 9.2- Reconexión de los vértices (en rojo) en el bloque de mayor detalle ante un
vecino de menor detalle, omitiendo la conexión del vértice que no esta presente en el último.
A la izquierda un GeoMipMap de nivel 1 y a la derecha de nivel 0.
Por otro lado, la técnica propuesta produce grietas entre dos bloques
vecinos cuando son representados con distintos niveles de detalle. Para
resolver este artefacto, propone realizar una reconexión de los vértices del
bloque de mayor detalle que lindan con el bloque de menor detalle,
omitiendo la conexión de aquellos vértices ausentes en el segundo (Figura
9.2). Sin embargo es importante recalcar que esta reconexión no es
Figura 9.3- Distinta conexión inicial para cada bloque propuesta en [Larsen and Christensen
2003] y reconexión consistente ante vecinos de distintos niveles.
Figura 9.4 – (a) Las superficies cubiertas por las grillas de diferente resolución pueden
verse como una pirámide. (b) Anidamiento de las grillas que representan el terreno en
distintos niveles de detalle.
1
Al decir, “un desplazamiento […] coherente” se refiere a que el desplazamiento es progresivo, siendo
las posiciones del observador en cuadros sucesivos cercanas entre si, donde la diferencia es pequeña.
Figura 9.6- Triángulos utilizados para evitar las grietas en los bordes de grillas vecinas de
distinto nivel de detalle. El triángulo ABC termina siendo de área nula, mientras que el
triángulo CDE tiene una superficie que cubre la grieta.
Figura 10.1 – Tamaños utilizados para los parches, bloques y márgenes. Pueden apreciarse
además la relación entre esas estructuras. Se usa para la figura n = 17 y m = 3.
Figura 10.2 – Los 9 casos de posiciones relativas entre parches de sucesivos niveles de
detalle. Se usa para la figura n = 9.
ε ε
Figura 10.3 – Los errores de modelado 1 y 2 , originados por representaciones utilizando
dos niveles de detalle diferentes, son proyectados en el plano de visualización Π .
(a) Nivel 2 (L=2): la proyección ρ 1 del máximo error de modelado excede el valor umbral τ .
Vector tiles_to_refine;
Vector unrefined_tiles;
UpdatePatches(patches);
render( unrefined_tiles );
refineAndRender( tiles_to_refine );
(a)
(b)
Figura 10.4 – Dos cuadros distintos renderizados por la técnica propuesta (usando n = 129,
m = 17). (a) Parches anidados alrededor del usuario y diferentes posiciones relativas entre
niveles sucesivos. (b) Los parches que necesitaron refinamiento son marcados en rojo y
dibujados en verde.
Figura 10.5 – (a) Las grietas que pueden aparecer entre bloques de distinto nivel de
detalle. (b) Polleras o skirts usadas alrededor de los bloques para ocultar la aparición de
grietas.
10.6 Conclusiones
11 Implementación de la Solución
Parte del trabajo de la presente tesis consiste en una implementación
de una técnica de renderizado de terrenos que verifique ser eficiente. Para
ello, se decide realizar la implementación usando software y hardware
actuales que permitan maximizar el rendimiento. El presente estado del
arte encuentra establecidas las GPUs que responden al Shader Model 4.0 y
la biblioteca gráfica Direct3D en su décima versión (ver Capítulo 7).
Además, la elección de las herramientas debe considerarse para el diseño
de la solución. En el capítulo anterior, se mencionan cómo algunas
decisiones de diseño fueron tomadas teniendo en cuenta las capacidades de
las herramientas, particularmente las GPUs.
En una primera sección de este capítulo, se realizará un breve análisis
de las capacidades y propiedades del Shader Model 4.0 y, utilizando
Direct3D 10, las funcionalidades provistas que son aplicables y
aprovechables en técnicas de renderizado de terrenos. Luego, más adelante
en este capítulo, se exponen las estructuras de datos utilizadas y los
detalles de la implementación de un módulo de software o framework que
resuelve el problema de renderizado de terrenos. Dicha implementación
sigue el diseño descripto en el capítulo anterior y, con la misma, se
obtienen los resultados que serán mostrados en el capítulo siguiente.
Implementación de la Solución 73
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
bloques completamente en la GPU, sin intervención de la CPU y
minimizando la comunicación entre las unidades de procesamiento. De esta
manera, podría almacenarse en la GPU una versión burda del terreno que
sea refinada en tiempo de ejecución completamente utilizando
procesamiento dentro de la GPU. Además, el Geometry Shader, con la
habilidad de eliminar primitivas, podría ser utilizado para realizar el
mecanismo de frustum culling enteramente en la GPU con mayor precisión a
nivel de triángulos. Sin embargo, como fue mencionado en la sección 8.3,
los resultados obtenidos al utilizar esta etapa muestran que su utilización
degrada el rendimiento de las soluciones. Tras buscar algunas alternativas y
distintas estrategias, se decide descartar su utilización por los resultados
obtenidos.
Otra característica que incorpora las nuevas GPUs es la unificación de
unidades de procesamiento de shaders. De esta manera, es esperable que
el costo de realizar una operación en un vertex shader sea el mismo que
realizarla en un pixel shader. Dentro de las técnicas de renderizado de
terrenos, esta característica favorece al uso de mapa de alturas, es decir,
almacenar la información de elevaciones de mallados regulares en texturas
a ser muestreadas en los programas de vértices. Tras realizar las pruebas,
la performance de los programas de vértices disminuye con el número de
muestreo de texturas que se realicen. Esta realidad no hace prohibitivo el
muestreo de texturas en los programas de vértices, pero sugiere
mantenerlas acotadas en cantidad. Típicamente, con una lectura es
suficiente para obtener la elevación del vértice. Por ejemplo, lo que no se
recomienda es realizar más muestreos de texturas por vértice para
promediar elevaciones e implementar de esta manera las técnicas de
geomorphing.
Claramente, la principal limitación de las técnicas de renderizado de
terrenos es la cantidad de vértices que describen las superficies
comúnmente extensas. Aún utilizando técnicas de nivel de detalle, el cuello
de botella reside en la cantidad de vértices que se desean renderizar. La
opción de realizar el frustum culling en el Geometry Shader no es útil ya
que esta etapa se encuentra luego de haber realizado el procesamiento de
cada uno de los vértices ingresados al pipeline gráfico. Por ende, es
indispensable realizar al menos algún procesamiento burdo de frustum
culling en la CPU, para descartar aquellas porciones de terreno que se
encuentren fuera del volumen de visualización. Esta operación es
fundamental para obtener un rendimiento alto en las técnicas
implementadas, permitiendo mayores extensiones de terreno con mayor
calidad.
Por otro lado, como ya fue mencionado anteriormente, la clave actual
para optimizar el rendimiento al implementar una técnica es minimizar el
procesamiento de la CPU y las comunicaciones entre la CPU y la GPU. Los
puntos de sincronismo entre las unidades de procesamiento deben evitarse,
de manera de explotar al máximo el trabajo en paralelo. En esta dirección
es que la implementación debe utilizar la funcionalidad de instancing junto
con el uso de arreglos de texturas. Con esta funcionalidad, se minimiza el
overhead producto del uso de las bibliotecas, que se traducen en
comunicación entre CPU y GPU informando cambio de estados y
configuraciones del pipeline. Utilizando vertex buffers para describir la
organización regular de bloques en el plano XY y la posibilidad de tomar la
elevación Z en los programas de vértices de alguna de las capas de un
74 Implementación de la Solución
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
arreglo de texturas, el terreno visualizado puede renderizarse por completo
utilizando unas pocas llamadas al método Draw, método de Direct3D 10
utilizado para renderizar.
Por último, las decisiones de diseño que involucran tanto utilizar un
margen alrededor de la información de elevación de cada parche, como
administrar las elevaciones necesarias para los bloques refinados con una
política LRU, buscan minimizar las comunicaciones entre CPU y GPU para la
actualización de los datos de las texturas. De esta manera, los puntos de
sincronismo son menos frecuentes, permitiendo explotar el paralelismo del
hardware disponible.
Figura 11.1 – Vertex e Index Buffers utilizados para la descripción de un bloque genérico. El
vértice V0 es el usado como referencia.
Implementación de la Solución 75
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
inferior, les corresponde el mismo valor de XY. Para diferenciarlos, todos los
vértices son descriptos por un valor de punto flotante más, de valor 0.0f o
1.0f que indica si pertenece o no al borde inferior de la pollera. Luego, para
describir la conexión de los vértices se utiliza un index buffer para describir
una lista de triángulos1 que definen la superficie del bloque (Figura 11.1).
El uso de recursos que definen un bloque genérico es posible gracias a
la técnica de instanciación. Para la creación de instancias concretas de
bloques que cubran las superficies de los parches de distintos niveles de
detalle, se utiliza un vertex buffer dinámico que es completado en la
generación de cada cuadro con datos que definen cada instancia. Cada
instancia es definida a través de 3 valores enteros no signados junto con 2
valores de punto flotante. Los primeros 2 valores enteros no signados
definen las coordenadas de muestreo del vértice de referencia del bloque
concreto para obtener la coordenada Z de una textura. Los 2 valores de
punto flotante definen la coordenada XY del vértice de referencia en el
mundo. Por último, el valor entero no signado restante define el parche al
que pertenece el bloque. Este valor es utilizado para muestrear la capa
adecuada dentro del arreglo de texturas de los parches y, además, para
definir la posición final en el mundo de cada vértice tras calcular el intervalo
entre vértices propio del nivel de detalle del parche.
Las alturas o coordenada z de cada vértice será muestreada de una
textura en los programas de vértices. Para ello, los datos de elevación serán
cargados en un arreglo de texturas de tantas capas como parches de
distinto nivel de detalle se utilicen. El tipo de dato de cada valor de la
textura se elegirá de acuerdo a la resolución disponible de los datos de
elevación del terreno a representar. Generalmente, se utilizan valores
enteros no signados que luego en los programas de vértices son escalados y
trasladados según un valor de escala y offset definidos, cargados en un
buffer de datos constantes.
Luego, se procede de la misma manera para cargar la información
necesaria para el renderizado de los bloques refinados. Para cada nivel de
refinamiento, se utiliza un vertex buffer y un index buffer inmutables para
la descripción 2D genérica del bloque. Asimismo, se dispone de un arreglo
de texturas, de una cantidad de capas parametrizable, donde se disponen
las alturas especialmente cargadas para los bloques de un nivel de
refinamiento dado. Como fue dicho, las capas se administran utilizando una
política LRU. Por último, de manera idéntica, se utiliza un vertex buffer
dinámico para almacenar los datos necesarios para instanciar, cuadro a
cuadro, los bloques refinados. Cabe aclarar, finalmente, que este esquema
se repite para cada nivel de refinamiento posible.
1
En implementaciones anteriores del pipeline gráfico en hardware o software era recomendado utilizar
strips de triángulos en lugar de lista de triángulos. Sin embargo, la implementación actual de GPUs
pertenecientes al SM4.0, aseguran tener un caché para los vértices resultados de la etapa de vertex shader,
tal que si se encuentra el resultado en caché, el vertex shader no se ejecuta dos veces para el mismo
vértice de entrada. Esto indica que actualmente no hay diferencias de performance por utilizar strips de
triángulos, por lo que en la implementación de este trabajo se utilizan listas de triángulos. Finalmente,
experimentalmente esto fue comprobado y no se han notado diferencias de performance.
76 Implementación de la Solución
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
11.3 Implementación del Framework
Implementación de la Solución 77
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
78 Implementación de la Solución
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Por último, cabe destacar que la clase abstracta
TerrainRenderingTechnique pretende abstraer y modelizar las actividades,
asociaciones y responsabilidades comunes de cualquier técnica de
renderizado de terreno. La misma debe ser especializada para la
implementación de una técnica concreta. A modo de ejemplo y estudio
durante el período de trabajo que concluye con la presentación de esta
tesis, se han implementado diferentes técnicas de renderizado: fuerza bruta
en la clase BruteForceTRT, Geometrical MipMaps en la clase
GeoMipMapsTRT, Geometrical Clipmaps en la clase GeometryClipmapsTRT.
Finalmente, la técnica propuesta como resultado de este trabajo fue
implementada en la clase TiledClipmapsTRT y es motivo de detalle de la
siguiente subsección.
A continuación se describirán las responsabilidades de cada clase
implementada junto con una descripción de los atributos y métodos
destacables de cada una. Como en cualquier diseño en el paradigma de
orientación a objetos, los atributos representan los datos que almacenan los
objetos de la clase que son necesarios para brindar las funcionalidades
ofrecidas a través de su interfaz de métodos.
Clase TerrainFramework
Responsabilidades - Mantiene la relación con el resto de las clases del
framework, las crea, inicializa y asocia.
- Ejecuta el hilo principal y la función que itera ciclo a
ciclo para realizar tanto la actualización del estado del
observador como el renderizado de la escena cuadro a
cuadro.
Atributos Instancias de objetos de las clases que contiene.
destacables
Métodos - Init: Inicializa el framework. Crea e inicializa las
principales instancias que corresponden y las asocia. Recibe la
ventana donde se mostrará el renderizado de la escena.
- Release: Finaliza la ejecución y libera los recursos
inicializados por el framework.
- Run: Comienza la ejecución de la tarea principal del
framework, ejecutando iterativamente la función
cycle_func.
- cycle_func: Esta función iterativa mide el tiempo
transcurrido entre llamadas sucesivas. En primer lugar
actualiza el estado del joystick que incide en el
movimiento del observador. Luego hace evolucionar el
movimiento del observador dando el intervalo de
tiempo transcurrido, lo que actualiza la posición y
actitud del observador. Por último, pide a la instancia
del Renderer que renderize la escena.
Clase Terrain
Responsabilidades Representa el conjunto de datos que componen el
modelo del terreno a representar. Está compuesto por
un mapa de alturas y una textura para su superficie.
Implementación de la Solución 79
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Atributos - extention_x: Longitud en el eje x de la superficie del
destacables terreno modelado (en metros)
- extention_y: Longitud en el eje y de la superficie del
terreno modelado (en metros)
- Con estos valores y la cantidad de muestras del mapa
de altura se obtiene la resolución máxima que define la
distancia entre los puntos de la malla a utilizar.
Métodos Los métodos permiten consultar tanto los atributos
principales como obtener referencias a los objetos que lo
componen.
Clase HeightMap
Responsabilidades Administra las consultas al mapa de alturas utilizado
para modelar el terreno.
Atributos - height_resolution: Resolución vertical para escalar los
destacables valores discretos contenidos en el mapa de alturas.
- height_offset: Valor para desplazar todos los valores
de alturas presentes en el mapa de alturas.
Métodos - getHeightsAtRegion: Permite obtener los valores de
principales altura o elevación para una región del terreno dada.
- getMapWidth, getMapWidth: Permite obtener la
cantidad de muestras de cada lado del mapa de alturas.
Clase SurfaceTexture
Responsabilidades Contiene la información respecto a la textura utilizada
para colorear la superficie del terreno.
Atributos -
destacables
Métodos -
principales
Clase TerrainViewer
Responsabilidades Representa el conjunto de datos respecto de las
características del observador que interesan para
realizar el renderizado del terreno y de la escena.
Atributos - position: Posición del observador en el espacio del
destacables mundo.
- at: Punto en el espacio que define la dirección de
observación del observador.
- up: Dirección que termina definiendo unívocamente la
actitud del observador.
- fov, aspect, near, far: valores que definen la
proyección perspectiva que define el volumen de
visualización percibido por el observador.
80 Implementación de la Solución
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Métodos - getViewMatrix: Método para consultar la matriz de
principales vista.
- getProjectionMatrix: Método para consultar la matriz
de proyección.
- getViewFrustum: Método para obtener los planos que
definen el volumen de vista.
Clase ViewerMotion
Responsabilidades Modela la trayectoria de movimiento del observador. A
partir de los valores de velocidad que permite 4 grados
de libertad, modifica la ubicación del observador
representado por la clase TerrainViewer.
Atributos - foward_vel: Velocidad de avance. Utilizado para
destacables avanzar la posición del observador según la dirección de
observación.
- yaw_vel, pitch_vel, roll_vel: Velocidades de rotación
en los 3 grados de libertad de la actitud del observador.
Métodos - move: Método que a partir del valor de las
principales velocidades y el intervalo de tiempo recibido calcula los
valores diferenciales para evolucionar la ubicación del
observador.
- setFowardVel, setYawVel, setPitchVel, setRollVel:
Modifican los valores de los atributos. Utilizados por el
controlador que toma las entradas del usuario, en este
caso, una instancia del JoystickListener.
Clase Renderer
Responsabilidades Se encarga del renderizado de la escena. Configura los
valores iniciales del pipeline gráfico para la generación
de cada cuadro.
Atributos Instancias necesarias para realizar el renderizado de
destacables cada cuadro.
Métodos - Render: Esta función inicializa el pipeline gráfico y
principales renderiza la escena utilizando el renderizador del
skybox y del terreno.
- setSkyboxRenderer: Indica el renderizador del skybox
o cielo a utilizar.
- setTerrainRenderingTechnique: Indica la técnica a
utilizar para renderizar el terreno.
Clase SkyboxRenderer
Responsabilidades Renderiza el skybox o cielo de la escena.
Atributos -
destacables
Métodos -
principales
Implementación de la Solución 81
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Clase TerrainRenderingTechnique
Responsabilidades Clase abstracta que modela las tareas y datos comunes
para renderizar un terreno.
Atributos - fx_file: Path del archivo de texto que define el efecto
destacables a utilizar para el renderizado.
- effect: Instancia del efecto de Direct3D 10 cargado
que define los datos y funciones que serán utilizados
para configurar el pipeline gráfico para el renderizado
del terreno.
- technique: Instancia de la técnica de Direct3D 10 que
define la configuración del pipeline a utilizar para el
renderizado.
Métodos - TerrainRenderingTechnique: Constructor. Recibe el
principales terreno, el observador y el archivo de efectos a utilizar.
- Init: Realiza la inicialización de la técnica. Inicializa los
parámetros comunes y genéricos, como la carga del
archivo de efectos, y llama al método protegido _Init
que es definido por las clases hijas para realizar la
inicialización particular.
- _Init: Método virtual puro que debe ser definido para
realizar la inicialización particular de cada técnica
concreta.
- Release: Libera los recursos utilizados.
- RenderTerrain: Realiza el renderizado del terreno. En
esta clase, se implementan las configuraciones
generales del pipeline como la técnica a utilizar y las
matrices de transformación obtenidas de la instancia de
TerrainViewer. Luego se llama al método protegido
_RenderTerrain para las configuraciones particulares y
ejecutar el renderizado concreto del terreno según la
técnica adecuada.
- _RenderTerrain: Método virtual puro que debe ser
definido para realizar el renderizado del terreno.
Clase JoystickListener
Responsabilidades Controlador que administra la interacción del usuario
con el joystick para interactuar con el sistema.
Atributos -
destacables
Métodos - Init: Inicializa la administración del joystick.
principales - Release: Libera los recursos inicializados.
- Update: Toma los eventos realizados por el usuario en
el joystick y el estado de los controles analógicos para
interactuar con las clases del sistema. Principalmente
modifica las propiedades del movimiento del observador
modeladas en la clase ViewerMotion.
Clase IWinWindow
Responsabilidades Modela una ventana de la interfaz gráfica del sistema
operativo Windows.
82 Implementación de la Solución
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Atributos -
destacables
Métodos - getWidth, getHeight: Métodos para obtener el alto y
principales ancho en píxeles de la ventana utilizada para mostrar el
renderizado del terreno.
- close: Método utilizado para cerrar la ventana y
terminar la aplicación.
Clase DXDevice
Responsabilidades Contiene el dispositivo y demás datos utilizados en
Direct3D 10 para la interacción con el pipeline gráfico.
Atributos -
destacables
Métodos -
principales
Implementación de la Solución 83
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Además, en la creación, dada la superficie 2D del bloque, se consulta el
valor máximo y mínimo de altura en ese bloque para definir el AABB del
bloque para ser luego contrastado con el volumen de visualización al aplicar
frustum culling. De manera idéntica a los errores de modelado, un
preproceso calcula las alturas máximas y mínimas de cada bloque y los
almacena en un archivo. Luego, en tiempo de carga del sistema, la clase
MinMaxZQueryManager dispone los datos en memoria principal para
resolver las consultas pertinentes. Por otro lado, cada instancia, dada la
posición del observador, los parámetros de la visualización y el valor umbral
definido, decide si el nivel de detalle es suficiente o es necesario refinar la
malla del bloque. Para esto calcula la mínima distancia del observador al
AABB, y realiza los cálculos descriptos en la Sección 5.1. Entonces, si es
necesario representar el bloque con mayor detalle, pide a la instancia de
RefinedTilesElevationDataManager la carga de los datos de elevación
pertinentes a memoria de video (quien los carga si no se encuentran ya
cargados), para que se encuentren disponibles para cuando, a continuación,
se renderice este bloque refinado.
84 Implementación de la Solución
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Recapitulando, tras tomar los bloques que corresponden al área de
renderizado de cada parche, se verifica si se encuentran dentro del volumen
visualizado. Luego, se le pasa a la instancia de cada bloque que pasa el
testeo anterior la información necesaria para que decida si debe ser
refinado o no. A continuación se disponen los bloques según si deben ser
refinados o no, y si son refinados separados por nivel de refinamiento
necesario. Finalmente, se completan los vertex buffer dinámicos con la
información de cada instancia a renderizar, y se renderiza (mediante la
técnica de instancing) el terreno utilizando una llamada a Draw para todos
aquellos bloques que no necesitan refinamiento, y luego una llamada a
Draw para cada nivel de refinamiento que agrupa los bloques refinados
necesarios. Experimentalmente, en general no se utilizan más de dos
niveles de refinamiento, por ende se renderiza el terreno completamente
utilizando 3 llamadas al método Draw.
Implementación de la Solución 85
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
//-------------------------------------------------------------------
// Texturas cargadas
//-------------------------------------------------------------------
/// HeightMapTexture: Array de texturas utilizado para almacenar
/// en cada capa la información de elevación para cada parche
Texture2DArray <float> HeightMapTexture;
//-------------------------------------------------------------------
// Estructuras de datos utilizadas en los shaders
//-------------------------------------------------------------------
///------------------------------------------------------------------
/// VS_INPUT: Estructura de datos que define los atributos de entrada
/// a los Vertex Shaders
/// > u_offset: offset respecto al vértice de referencia del parche.
/// > v_offset: offset respecto al vértice de referencia del parche.
/// > is_skirt: indica si el vértice corresponde a la parte inferior
/// de la pollera de un bloque
/// > patch_texture_reference_position_u: coordenada del vértice de
/// referencia para el muestreo
/// de la altura.
/// > patch_texture_reference_position_v: coordenada del vértice de
/// referencia para el muestreo
/// de la altura.
/// > world_reference_position_x: posicion en el mundo del vértice
/// de referencia.
/// > world_reference_position_y: posicion en el mundo del vértice
/// de referencia.
/// > patch_level: nivel de detalle del parche al que pertenece el
/// vértice.
struct VS_INPUT
{
int u_offset : OFFSET_U;
int v_offset : OFFSET_V;
float is_skirt : IS_SKIRT_VERTEX;
uint patch_texture_reference_position_u:PATCH_TEXT_REFERENCE_POS_U;
uint patch_texture_reference_position_v:PATCH_TEXT_REFERENCE_POS_V;
float world_reference_position_x : WORLD_REFERENCE_POS_X;
float world_reference_position_y : WORLD_REFERENCE_POS_Y;
uint patch_level : PATCH_LEVEL;
};
86 Implementación de la Solución
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
///------------------------------------------------------------------
/// VS_INPUT_REFINED_VERTEX: Estructura de datos que define los
/// atributos de entrada a los Vertex Shaders
/// > u_sample: coordenada para obtener el valor de elevacion del
/// vértice de la textura correspondiente.
/// > v_sample: coordenada para obtener el valor de elevacion del
/// vértice de la textura correspondiente.
/// > is_skirt: indica si el vértice corresponde a la parte inferior
/// de la pollera de un bloque
/// > world_reference_position_x: posicion en el mundo del vértice
/// de referencia.
/// > world_reference_position_y: posicion en el mundo del vértice
/// de referencia.
/// > patch_level: nivel de detalle del bloque al que pertenece el
/// vértice.
/// > texture_layer: layer para muestrear en el array de texturas
/// con datos de los bloques refinados.
struct VS_INPUT_REFINED_VERTEX
{
int u_sample : SAMPLE_U,
int v_sample : SAMPLE_V,
float is_skirt : IS_SKIRT_VERTEX,
float world_reference_position_x : WORLD_REFERENCE_POS_X,
float world_reference_position_y : WORLD_REFERENCE_POS_Y,
uint patch_level : PATCH_LEVEL,
uint texture_layer : TEXTURE_ARRAY_LAYER
};
///------------------------------------------------------------------
/// VS_OUTPUT: Estructura de datos que define los atributos de salida
/// de los Vertex Shaders.
/// > Pos: posicion transformada del vértice en coordenadas
/// homogéneas.
/// > TextCoord: coordenadas de textura para obtener el color de
/// sombreado de la superficie para ese vértice.
struct VS_OUTPUT
{
float4 Pos : SV_POSITION;
float2 TextCoord : TEXCOORD0;
};
Tabla 11.3- Archivo de efecto: Estructuras de datos utilizadas por los shaders.
Implementación de la Solución 87
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
técnica, a través de las pasadas, describe la configuración del pipeline que
debe aplicarse en el momento de dibujar la geometría que se ingrese. Se
describen dos pasadas, que se diferencian en el programa de vértices
utilizado.
//-------------------------------------------------------------------
// Vertex Shader
//-------------------------------------------------------------------
VS_OUTPUT VS( VS_INPUT input )
{
VS_OUTPUT output = (VS_OUTPUT)0;
return output;
}
Tabla 11.4- Archivo de efecto: programa para los vértices de bloques no refinados.
88 Implementación de la Solución
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
//-------------------------------------------------------------------
// Vertex Shader para Refined Tiles
//-------------------------------------------------------------------
VS_OUTPUT RefinedTileVS( VS_INPUT_REFINED_VERTEX input )
{
VS_OUTPUT output = (VS_OUTPUT)0;
return output;
}
Tabla 11.5- Archivo de efecto: programa para los vértices de bloques refinados.
//-------------------------------------------------------------------
// Pixel Shader
//-------------------------------------------------------------------
float4 PS( VS_OUTPUT input ) : SV_Target
{
// se obtiene el color del fragmento muestreando la textura de la
// superficie del terreno.
return SurfaceTexture.Sample(TextureSampler,input.TextCoord);
}
Tabla 11.6- Archivo de efecto: programa para los colorear los fragmentos.
Implementación de la Solución 89
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
//-------------------------------------------------------------------
// Directivas de compilación de los programas de vértices y
// fragmentos utilizados
//-------------------------------------------------------------------
//-------------------------------------------------------------------
// Técnica utilizada para el renderizado de terrenos. Configuración
// del pipeline gráfico
//-------------------------------------------------------------------
technique10 RenderTerrain
{
/// P0: Pasada utilizada para renderizar los Bloques NO
Refinados
pass P0
{
SetRasterizerState( rsSolidframe );
SetDepthStencilState( depthState, 0 );
SetVertexShader( vs );
SetGeometryShader( NULL );
SetPixelShader( ps );
}
90 Implementación de la Solución
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
De los dos algoritmos, es de interés describir el que calcula el error de
modelado para cada bloque en cada nivel de detalle. El error de modelado
se calcula de manera absoluta y exacta utilizando los valores discretos que
contiene el mapa de alturas, como es propuesto en [Hoppe 1998].
Recapitulando lo presentado en la Sección 10.3, el cálculo del error de un
nivel de detalle debe hacerse sobre todos aquellos vértices presentes en la
máxima resolución que son omitidos en el nivel de detalle en cuestión.
El algoritmo que calcula el error de modelado, recorre el mapa de
alturas tomando bloques de m x m, para cada nivel de detalle a utilizar.
Luego, para cada bloque, toma cada uno de los triángulos que definen su
superficie y se calcula la diferencia de altura en los vértices omitidos.
Siguiendo el ejemplo mostrado en la Figura 11.4, se toma el triángulo de
nivel 2, con intervalo de muestreo de 4 vértices, definido por los vértices
V(0,0), V(4,0) y V(0,4). Dado el triángulo, se calcula la ecuación del plano a
partir de los vértices mencionados. Luego, para cada vértice omitido, V(i,j),
se ingresan los valores (i, j) en la ecuación del plano y se obtiene el valor
de altura con el que se aproxima. Finalmente, se calcula la diferencia con su
altura original y se almacena la mayor diferencia para cada bloque.
(V( 4, 0 ) − V( 0, 0) ) × (V( 0, 4) − V( 0, 0) ) = N
r
N • V( i , j ) + N • V( 0, 0 ) = 0
r r
Figura 11.4 – Cálculo del error de modelado. Utilizando los vértices presentes en un
determinado niveles de detalle (en blanco), se calcula el error de aproximación sobre los
vértices omitidos (en gris). En primer lugar se obtiene la ecuación del plano que define la
superficie del triángulo, calculando la normal al plano (Ecuación a). Luego, dada las
coordenadas 2D (relativas al triángulo en cuestión), (i,j), de los vértices omitidos, se obtiene
la altura con la que son aproximados (Ecuación b).
Implementación de la Solución 91
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
12 Resultados Obtenidos
Figura 12.1 – Resultado del renderizado del terreno en un vuelo sobre el terreno “Puget
Sound”.
Resultados Obtenidos 93
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
La Tabla 12.1 y Figura 12.2 resumen los resultados obtenidos tras
ejecutar cinco corridas en las condiciones especificadas. Los cinco
experimentos consistieron en un vuelo sobre el terreno a una velocidad de
340 metros por segundo, típicamente desde el centro del terreno hacia la
zona de la montaña bien detallada. Se midió el tiempo insumido en la
generación de cada cuadro durante un vuelo de entre dos y tres minutos.
Como puede verse en la Figura 12.2 el 70% de los tiempos medidos se
encuentran en el intervalo entre 5 y 15 milisegundos (44,35% en el
intervalo 5–10 ms., y 25.44% en el intervalo 10–15 ms.). Por último, el
tiempo máximo registrado fue de 49,5 ms.
Figura 12.2- Distribución de las mediciones de los tiempos de generación de cada cuadro en
las cinco corridas ejecutadas.
94 Resultados Obtenidos
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
objetivos, el tiempo insumido en la generación del renderizado del terreno,
da lugar a las demás actividades que debe realizar el motor gráfico y la
aplicación que lo utilice. La tarea de renderizado del terreno deja tiempo
libre para ser utilizado por otras tareas de renderizado y procesamiento
necesarias para la generación de cada cuadro. Por último, el consumo de
procesamiento de CPU permite que las aplicaciones que utilicen la técnica
propuesta mantengan rendimientos adecuados a sus requerimientos
interactivos.
Resultados Obtenidos 95
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
13 Conclusiones
Como resultado de este trabajo se ha propuesto una solución que
resuelve el problema de visualización de grandes extensiones de terrenos,
un tema importante y popular en el área de la computación gráfica. En la
primera parte de este trabajo se han expuesto los conceptos generales del
tema de interés. A continuación, fueron citados y explicados los trabajos
más relevantes en el área que, en primer lugar, sentaron las bases de las
soluciones relacionadas y, luego, corresponden al estado del arte.
El trabajo desarrollado no deja de lado las características actuales del
hardware donde se ejecuta la implementación resultante. Es por eso que se
realiza una breve exposición de la evolución del hardware gráfico, y luego
se hace hincapié en las características de las tarjetas gráficas o GPUs
programables de la actualidad.
Las GPUs actuales responden al modelo llamado Shader Model 4.0.
Dentro de las nuevas características introducidas se destaca una nueva
etapa llamada Geometry Shader. Tras estudiar la funcionalidad brindada por
esta etapa, y analizar el rendimiento obtenido al utilizarla, se concluye que
la misma no es útil para el renderizado de terrenos. El uso de esta etapa
degrada el rendimiento general de una técnica. Sin embargo, sí se
encontraron útiles otras características, como la unificación de las unidades
de procesamiento y la posibilidad de utilizar arreglos de texturas en
combinación con la técnica de instanciación.
Por otro lado, la solución desarrollada brinda una técnica de
renderizado de terrenos apta para aplicaciones interactivas o tiempo real,
como ser videojuegos o simuladores de vuelo. Con mayor precisión, la
técnica apunta a ser utilizada en simuladores de vuelo, donde los
requerimientos son más estrictos. La visualización producida debe
representar fielmente terrenos del mundo real logrando una inmersión total
del usuario dentro del simulador. Por ende, la técnica propuesta no muestra
distorsiones ni artefactos, brindando una representación visualmente exacta
del terreno.
La principal contribución de esta tesis es la presentación de una
técnica que combina aspectos de las técnicas que pertenecen al estado del
arte para brindar una solución sencilla y con un buen rendimiento. La
técnica presentada está basada en Geometry Clipmaps, que expone ideas y
algoritmos que optimizan el procesamiento requerido obteniendo una alta
performance. Más aún, la técnica presentada resuelve la limitación que
presenta Geometry Clipmaps para representar superficies con detalles de
alta frecuencia sin introducir cambios en la superficie que sean notorios al
usuario. Para esto, se opta por incorporar el análisis de la proyección del
error de aproximación propio de las representaciones que utilizan nivel de
detalle. La estrategia consiste en mantener acotado el error percibido por
debajo de un valor que pueda considerarse despreciable. Para lograrlo, el
análisis del error es realizado tras dividir las regiones del terreno en
bloques, lo que es propuesto en las técnicas basadas en bloques, como
Geometrical MipMaps.
Finalmente, la técnica es implementada utilizando software y hardware
actuales, aprovechando las novedades útiles para optimizar la performance.
Los resultados de los experimentos muestran un buen rendimiento de la
técnica presentada. El poco tiempo de procesamiento de CPU y GPU que
Conclusiones 97
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
consume, permite que la técnica sea incorporada en un motor gráfico a ser
utilizado para el desarrollo de aplicaciones interactivas.
98 Conclusiones
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Referencias
[Akenine-Möller et al. 2008] Akenine-Möller, T., Haines, E., and Hoffman,
N.: “Real-time rendering”. 3rd edition, A.K.Peters Ltd., 1045p, 2008.
[Asirvatham and Hoppe 2005] Asirvatham, A., and Hoppe, H.: “Terrain
Rendering Using GPU-based Geometry Clipmaps”, GPU Gems 2, pp. 27–46,
2005.
[Blythe 2006] Blythe, D.: “The Direct3D 10 system”. ACM SIGGRAPH 2006,
Papers on SIGGRAPH ’06, ACM Press, 2006.
[Clasen and Hege 2006] Clasen, M., and Hege, H.: “Terrain Rendering Using
Spherical Clipmaps”. Eurographics - EuroVis, 2006.
[de Boer 2000] De Boer, W.H.: “Fast Terrain Rendering Using Geometrical
Mipmapping”. Unpublished Paper, Available at http://www.flipcode.com/
articles/article_geomipmaps.pdf, 2000.
[Duchaineau et al. 1997] Duchaineau, M., Wolinsky, M., Sigeti, D.E., Miller,
M.C., Aldrich, C., and Mineev-Weinstein, M.B.: “ROAMing terrain: Real- time
optimally adapting meshes”. Proceedings IEEE Visualization, pp. 81–88,
1997.
[Engel et al. 2008] Engel, W., Hoxley, J., Kornmann, R., Suni, N., and Zink,
J.: “Programing Vertex, Geometry, and Pixel Shaders”. Charles River Media,
2nd edition, 2008.
[Gerasimov et al. 2004] Gerasimov, P., Fernando, R., and Green, S.:
“Shader Model 3.0: Using Vertex Textures”. NVIDIA Corporation –
Whitepaper, 2004.
[Fernando and Kilgard 2003] Fernando, R., and Kilgard, M.: “The Cg
Tutorial: The Definitive Guide To Programmable Real-Time Graphics”.
Addison-Wesley, 2003.
[Hoppe 1996] Hoppe, H.: “Progressive Meshes”. Computer Graphics,
SIGGRAPH ’96 proceedings, pp. 99-108, 1996.
[Hoppe 1997] Hoppe, H.: “View-dependent refinement of progressive
meshes”. Computer Graphics, SIGGRAPH ’97 proceedings, pp. 189-198,
1997.
[Hoppe 1998] Hoppe, H.: “Smooth view-dependent level-of-detail control
and its application to terrain rendering”. Proceedings IEEE Visualization,
Computer Society Press, pp. 35–42, 1998.
[Kilgariff and Fernando 2005] Kilgariff, E., and Fernando, R.: “The GeForce
6 series GPU architecture”. ACM SIGGRAPH 2005 Courses on - SIGGRAPH
’05, 2005.
[Kobbelt 1996] Kobbelt, L.: “Interpolatory subdivision on open quadrilateral
nets with arbitrary topology”. Eurographics 1996, 409-420, 1996.
[Larsen and Christensen 2003] Larsen, BD, and Christensen, NJ: “Real-time
terrain rendering using smooth hardware optimized level of detail”. Journal
of WSCG. 2003;11(2):282–9.
Referencias 99
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
[Luebke et al. 2003] Luebke, D., Reddy, M., Cohen, J.D., Varshney, A.,
Watson, B., and Huebner, R.: “Level of Detail for 3D Graphics”. Morgan
Kaufmann Publishers, 2003.
[Luebke and Humphreys 2007] Luebke, D., and Humphreys, G.: “How GPUs
Work”. Computer. 2007;40(2):96-100.
[Lindholm et al. 2001] Lindholm, E., Kligard, M., and Moreton, H.: “A user-
programmable vertex engine.” Proceedings of the 28th annual conference
on Computer graphics and interactive techniques - SIGGRAPH ’01 (2001):
149-158.
[Lindstrom et al. 1996] Lindstrom, P., Koller, D., Ribarsky, W., Hodges,
L.F., Faust, N., and Turner, G.A.: “Real-time, continuous level of detail
rendering of height fields”. Proceedings ACM SIGGRAPH, ACM SIGGRAPH
1996, pp. 109–118, 1996.
[Lindstrom and Pascucci 2001] Lindstrom, P., and Pascucci, V.:
“Visualization of Large Terrains Made Easy”. IEEE Visualization 2001
Proceedings, 363-370, 2001.
[Lindstrom and Pascucci 2002] Lindstrom, P., and Pascucci, V.: “Terrain
Simplification Simplified : A General Framework for Out-of-Core
Visualization”. IEEE Transactions on Visualization and Computer Graphics,
8, 239-254, 2002.
[Lossaso and Hoppe 2004] Losasso, F., and Hoppe, H.: “Geometry
Clipmaps: Terrain Rendering Using Nested Regular Grids”. ACM SIGGRAPH
2004 Papers, pp. 769–776, 2004.
[Malvar 2000] Malvar, H.: “Fast Progressive Image Coding without
Wavelets”. Data Compression Conference (DCC '00), 243-252, 2000.
[NVidia 2008] NVidia: “GPU Programming Guide GeForce 8 and 9 Series”.
2008.
[OpenGL 1997] OpenGL Architecture Review Board, Woo, M., Neider, J.,
and Davis, T.: “OpenGL Programming Guide: The Official Guide to Learning
Opengl, Version 1.1”, 2nd Edition, Addison-Wesley Pub, 650p, 1997.
[Patidar et al. 2006] Patidar, S., Bhattacharjee, S., Singh, J.M., and
Narayanan, P.: “Exploiting the shader model 4.0 architecture”. Technical
Report, Center for Visual Information Technology, IIIT Hyderabad, 2006.
[Pajarola and Gobbetti 2007] Pajarola, R., and Gobbetti, E.: “Survey of
Semi-regular Multiresolution Models for Interactive Terrain Rendering”. The
Visual Computer nº23, 583-605, 2007.
[Snook 2001] Snook, G: “Simplified Terrain using Interlocking Tiles”. Game
Programming Gems 2, Charles River Media, Inc., 377-383, 2001.
[Ulrich 2002] Ulrich, T.: “Rendering Massive Terrains Using Chunked Level
of Detail Control”, SIGGRAPH ‘02 Course Notes, 2002.
[Wagner 2004] Wagner, D.: “Terrain Geomorphing in the Vertex Shader”,
ShaderX2, Shader Programming Tips and Tricks with DirectX 9, Wordware
Publishing, 2004.
[Williams 1983] Williams, L.: “Pyramidal Parametrics”, SIGGRAPH 83, pp. 1-
11, 1983.
100 Referencias
UNIVERSIDAD DE BUENOS AIRES Visualización de Terrenos
FACULTAD DE INGENIERÍA Tesis de Grado con Tarjetas de Video
INGENIERÍA EN INFORMÁTICA Programables GPU
Publicaciones
Guaycochea, L., and Abbate, H.: “Error-Bounded Terrain Rendering
Approach based on Geometry Clipmaps”, CACIC 2011, XVII Congreso
Argentino de Ciencias de la Computación, 2011.
Publicaciones 101