Implementación de la técnica de renderizado de
deferred rendering o renderizado diferido. Esta técnica es útil en los casos en los que en una escena se encuentran
muchos objetos los cuales se tapan unos a otros. Además, su utilidad se ve intensificada en el caso de una escena con una
gran cantidad de luces pues, gracias a esta técnica, el número de operaciones de
cálculo de iluminación
se reduce considerablemente. En este proyecto se comparan las dos técnicas de
forward rendering y
deferred rendering ante diferentes situaciones.
¿Cómo funciona?
El renderizado estandar, el llamado
forward rendering, ejecuta un shader de fragmento por cada fragmento resultante de cada objeto de la escena. Esto quiere decir que, si varios objetos se superponen unos encima de otros, los fragmentos que pertenecen a partes de objetos ocultas se calcularán y posteriormente serán descartados pues solo se dibujará el fragmento del objeto más cercano. Si hay muchos objetos y muchas luces se ha de calcular la iluminación de muchos fragmentos que finalmente no se verán conllevando una gran pérdida de cómputo. Para ello se utiliza la metodología de
deferred rendering.
Para mitigar este problema el
renderizado diferido divide el renderizado en dos pasos. Uno el llamado
geometry pass en el que se crean texturas con la información de la posición, color, normal y cualquier información relevante para el sombreado. En estas texturas únicamente está la información del fragmento final. Por lo tanto, en una segunda fase del renderizado, el
lighting pass en el que se calcula la imagen final y la ilumiación, no es necesario calcular la iluminación para cada objeto sino que únicamente una vez por cada fragmento final haciendo uso de la información de las texturas. Para más información sobre esta técnica visitar
Learn OpenGL.