Aplicación de las unidades de procesamiento gráfico en el diseño e implementación de sistemas de ray tracing
- Torres de Alba, Roberto
- Pedro Jesús Martín de la Calle Director/a
- Antonio Javier Gavilanes Franco Director/a
Universidad de defensa: Universidad Complutense de Madrid
Fecha de defensa: 31 de marzo de 2014
- Ricardo Peña Marí Presidente/a
- José Alberto Verdejo López Secretario/a
- Antonio Sanz Montemayor Vocal
- Gustavo Patow Vocal
- Francisco Feito Higueruela Vocal
Tipo: Tesis
Resumen
La obtención de imágenes que sean indistinguibles de una fotografía es uno de los objetivos de la informática gráfica, y los algoritmos de ray tracing son los que obtienen las imágenes con mayor calidad. Estos algoritmos son altamente paralelos debido a que los rayos trazados son independientes entre sí. Ésta es la principal razón para usar las Unidades de Procesamiento Gráfico (GPUs), que son un hardware paralelo completamente programable, para ejecutar los algoritmos de ray tracing. Desafortunadamente, una implementación directa no saca el máximo partido de las GPUs, y en esta tesis se proponen tres modificaciones. En primer lugar, hemos implementado un algoritmo de recorrido sin pila de una BVH hilvanada usando paquetes de rayos. En segundo lugar, hemos desarrollado el recorrido de una BVH mediante un Corte, que consiste en recorrer secuencialmente ciertos subárboles de esta estructura. Este recorrido mejora el rendimiento de rayos que son geométricamente muy diferentes. En tercer lugar, hemos modificado la forma en que se generan los rayos para que las lecturas de memoria sean más eficientes, lo que permite trazar más rayos en el mismo intervalo de tiempo y mejorar la calidad de las imágenes resultantes. La forma en que se construye la estructura de aceleración influye en el rendimiento. Su construcción está basada en la heurística del área de la superficie. Nosotros proponemos varias modificaciones de esta heurística que se especializan en un conjunto de rayos, lo que mejora la eficiencia de los rayos cuando exploran la escena. Por otro lado, hemos implementado versiones paralelas del algoritmo de Dijkstra en GPU que superan a una implementación en CPU que usa Fibonacci Heaps. Además, hemos añadido dos mejoras a la primitiva paralela de reducción, que aplica una operación binaria a todos los elementos de un array.