El renderizado hacia adelante es el proceso de calcular un valor de radiancia para un fragmento de superficie directamente desde la geometría de entrada y la información de iluminación. La representación diferida divide ese proceso en dos pasos: primero, producir un búfer en el espacio de la pantalla que contiene las propiedades del material (un búfer de geometría o búfer G) creado al rasterizar la geometría de entrada, y segundo, producir un valor de resplandor para cada píxel combinando el G- tampón con información de iluminación.
El renderizado diferido a menudo se presenta como una optimización del renderizado hacia adelante. Una explicación es que la iluminación es bastante costosa y si tiene algún sobregiro, está iluminando píxeles que nunca se verán en la pantalla, mientras que si almacena las propiedades del material en un G-buffer y la luz después, solo está iluminando un píxel que En realidad aparece en la pantalla. ¿Es esto realmente una ventaja de diferido, dado que también puede hacer un pase previo de profundidad y luego hacer un pase de renderizado directo con una prueba de profundidad establecida en D3D11_COMPARISON_EQUAL
o GL_EQUAL
equivalente?
El renderizado diferido también tiene el potencial de programar mejor en la GPU. La división de un frente de onda / urdimbre grande en un frente de onda de geometría más pequeña y luego frentes de onda de iluminación más pequeños luego mejora la ocupación (más frentes de onda en vuelo simultáneamente). Pero también terminas con mucho más uso de ancho de banda (escribiendo una gran cantidad de canales en el G-buffer, luego volviéndolos a leer durante la iluminación). Obviamente, los detalles aquí dependen mucho de su GPU, pero ¿cuáles son los principios generales?
¿Hay otras consideraciones prácticas de rendimiento al decidir entre renderizado directo y diferido? (Suponga que podemos usar variaciones de cada técnica si es necesario: es decir, también podemos comparar mosaico adelante con mosaico diferido).