Desarrollo de un motor de renderizado utilizando GPU-Driven Rendering para la generación procedural de terrenos con elementos por encima
Professor Advisor
dc.contributor.advisor
Hitschfeld Kahler, Nancy
Professor Advisor
dc.contributor.advisor
Salinas Fernández, Sergio
Author
dc.contributor.author
Flores Gutiérrez, Juan Andrés
Associate professor
dc.contributor.other
Rivara Zuñiga, María Cecilia
Associate professor
dc.contributor.other
Inostroza Fajardin, Patricio
Admission date
dc.date.accessioned
2025-05-07T14:45:02Z
Available date
dc.date.available
2025-05-07T14:45:02Z
Publication date
dc.date.issued
2024
Identifier
dc.identifier.uri
https://repositorio.uchile.cl/handle/2250/204740
Abstract
dc.description.abstract
La optimización en sistemas de renderizado es esencial para el desarrollo de aplicaciones gráficas que generan imágenes en tiempo real. Algunas escenas en estos medios llegan a contener decenas de miles de objetos, lo que puede provocar un impacto negativo en el rendimiento debido al aumento de instancias de comunicación entre CPU y GPU. Si bien en la actualidad existen funciones denominadas llamados de dibujo indirecto, que permiten a los programadores solucionar esta problemática haciendo mayor uso del dispositivo, aplicaciones de código abierto que ocupen estos métodos siguen siendo escasas y difíciles de estudiar.
Ante esta situación, en el presente trabajo se busca desarrollar un motor de renderizado que utilice técnicas modernas para la reducción de llamados a GPU, y dé la opción de usar métodos tradicionales con el fin de comparar ambas alternativas. Para evidenciar el caso de una aplicación real que se puede beneficiar de funciones indirectas, se implementaron sistemas asociados al renderizado procedural de terrenos y de elementos generados por encima de este, los cuales hacen uso de los módulos base de renderizado de objetos.
El motor implementado es de código abierto, fue escrito en el lenguaje de programación C++ y hace uso de OpenGL para la comunicación con GPU. Se programaron diferentes clases para abstraer los llamados que son usados por ambas técnicas. En particular, para la arquitectura que ocupa funciones de dibujo indirecto, se utilizó una lógica de batches que
permite mantener un orden en los datos de los objetos con respecto a las mallas geométricas y shaders que se aplican sobre estos, el cual es necesario para este tipo de renderizado.
La generación procedural de alturas utiliza un algoritmo de Perlin Noise para asegurar datos continuos en el espacio. Estos datos son rescatados por el sistema de renderizado de
terrenos, el cual ocupa un algoritmo de geoclipmaps adaptado con un listado texturas que contienen las alturas separadas en distintas regiones. Por otro lado, la generación procedural
de objetos sobre el terreno hace uso de un algoritmo de distribución espacial conocido como poisson disk sampling.
Para las mediciones de rendimiento, se realizaron experimentos del renderizado de objetos bajo distintos casos, que incluyen objetos que cambian su transformación, su geometría o su material en tiempo de ejecución. En todos los casos en donde existe un cambio constante en el estado de los objetos, el uso de técnicas modernas es más eficiente, pero decae en rendimiento debido a la lógica necesaria para su correcto funcionamiento. Finalmente, se experimentó con una escena procedural, más acercada a aplicaciones reales, en donde el uso de llamados de dibujo indirecto permite una mejora de hasta más de 39 veces en el tiempo de ejecución.
es_ES
Lenguage
dc.language.iso
es
es_ES
Publisher
dc.publisher
Universidad de Chile
es_ES
Type of license
dc.rights
Attribution-NonCommercial-NoDerivs 3.0 United States