En la primera pasada de un sombreador diferido, solo se recopilan los datos necesarios para el cálculo del sombreado. Las posiciones, las normales y los materiales de cada superficie se renderizan en el búfer de geometría ( búfer G ) mediante " renderizar a textura ". Después de esto, un sombreador de píxeles calcula la iluminación directa e indirecta en cada píxel utilizando la información de los búferes de textura en el espacio de la pantalla .
La principal ventaja del sombreado diferido es la disociación de la geometría de la escena de la iluminación. Solo se requiere un paso de geometría y cada luz se calcula solo para aquellos píxeles a los que realmente afecta. Esto brinda la capacidad de renderizar muchas luces en una escena sin una pérdida significativa del rendimiento. [5] Existen otras ventajas que se atribuyen a este enfoque. Estas ventajas pueden incluir una gestión más sencilla de recursos de iluminación complejos, facilidad de gestión de otros recursos de sombreado complejos y la simplificación del proceso de renderizado del software.
Desventajas
Una desventaja clave de la renderización diferida es la incapacidad de manejar la transparencia dentro del algoritmo, aunque este problema es genérico en las escenas con búfer Z y tiende a ser manejado retrasando y ordenando la renderización de las partes transparentes de la escena. [6] El peeling de profundidad se puede utilizar para lograr una transparencia independiente del orden en la renderización diferida, pero a costa de lotes adicionales y tamaño de búfer g. El hardware moderno, compatible con DirectX 10 y posteriores, a menudo es capaz de realizar lotes lo suficientemente rápido como para mantener velocidades de cuadros interactivas. Cuando se desea una transparencia independiente del orden (comúnmente para aplicaciones de consumo), el sombreado diferido no es menos efectivo que el sombreado hacia adelante utilizando la misma técnica.
Otra desventaja seria es la dificultad de utilizar múltiples materiales. Es posible utilizar muchos materiales diferentes, pero requiere almacenar más datos en el búfer G, que ya es bastante grande y ocupa una gran cantidad del ancho de banda de la memoria. [7]
Otra desventaja es que, debido a la separación de la etapa de iluminación de la etapa geométrica, el anti-aliasing de hardware ya no produce resultados correctos ya que las submuestras interpoladas darían como resultado atributos de posición, normal y tangente sin sentido. Una de las técnicas habituales para superar esta limitación es utilizar la detección de bordes en la imagen final y luego aplicar desenfoque sobre los bordes, [8] sin embargo, recientemente se han desarrollado técnicas de suavizado de bordes de post-proceso más avanzadas, como MLAA [9] [10] (usado en Killzone 3 y Dragon Age II , entre otros), FXAA [11] (usado en Crysis 2 , FEAR 3 , Duke Nukem Forever ), SRAA, [12] DLAA [13] (usado en Star Wars: The Force Unleashed II ), y post MSAA (usado en Crysis 2 como solución de anti-aliasing predeterminada). Aunque no es una técnica de suavizado de bordes, el anti-aliasing temporal (usado en Halo: Reach y Unreal Engine ) también puede ayudar a dar a los bordes una apariencia más suave. [14] DirectX 10 introdujo características que permiten a los sombreadores acceder a muestras individuales en objetivos de renderizado multimuestreados (y buffers de profundidad en la versión 10.1), brindando a los usuarios de esta API acceso al anti-aliasing de hardware en sombreado diferido. Estas características también les permiten aplicar correctamente el mapeo de luminancia HDR a los bordes anti-aliasados, donde en versiones anteriores de la API cualquier beneficio del anti-aliasing puede haberse perdido.
La iluminación diferida (también conocida como Light Pre-Pass) es una modificación del sombreado diferido. [15] Esta técnica utiliza tres pasadas, en lugar de dos en el sombreado diferido. En la primera pasada sobre la geometría de la escena, solo las normales y el factor de dispersión especular se escriben en el búfer de color. La pasada "diferida" en el espacio de la pantalla acumula luego datos de iluminación difusa y especular por separado, por lo que se debe realizar una última pasada sobre la geometría de la escena para generar la imagen final con sombreado por píxel. La aparente ventaja de la iluminación diferida es una reducción drástica del tamaño del G-Buffer. El costo obvio es la necesidad de renderizar la geometría de la escena dos veces en lugar de una. Un costo adicional es que la pasada diferida en la iluminación diferida debe generar la irradiancia difusa y especular por separado, mientras que la pasada diferida en el sombreado diferido solo necesita generar un único valor de radiancia combinado.
Gracias a la reducción del tamaño del búfer G, esta técnica puede superar parcialmente una desventaja importante del sombreado diferido: los materiales múltiples. Otro problema que se puede solucionar es el MSAA . La iluminación diferida se puede utilizar con MSAA en hardware DirectX 9. [ cita requerida ]
Iluminación diferida en juegos comerciales
El uso de esta técnica ha aumentado en los videojuegos debido al control que permite en términos de utilizar una gran cantidad de luces dinámicas y reducir la complejidad de las instrucciones de sombreado requeridas. Algunos ejemplos de juegos que utilizan iluminación diferida son:
En comparación con la iluminación diferida, esta técnica no es muy popular [ cita requerida ] debido a los altos requisitos de tamaño de memoria y ancho de banda, especialmente en las consolas de séptima generación, donde el tamaño de la memoria gráfica y el ancho de banda son limitados y a menudo constituyen cuellos de botella.
La idea del sombreado diferido fue introducida originalmente por Michael Deering y sus colegas en un artículo [3] publicado en 1988 titulado El procesador triangular y el sombreador vectorial normal: un sistema VLSI para gráficos de alto rendimiento . Aunque el artículo nunca utiliza la palabra "diferido", se introduce un concepto clave; cada píxel se sombrea solo una vez después de la resolución de profundidad. El sombreado diferido tal como lo conocemos hoy, utilizando búferes G, fue introducido en un artículo de Saito y Takahashi en 1990, [56] aunque ellos tampoco utilizan la palabra "diferido". El primer videojuego con sombreado diferido fue Shrek , un título de lanzamiento de Xbox enviado en 2001. [57] Alrededor de 2004, comenzaron a aparecer implementaciones en hardware gráfico comercial. [58] La técnica luego ganó popularidad para aplicaciones como los videojuegos , y finalmente se convirtió en la corriente principal alrededor de 2008 a 2010. [59]
Referencias
^ Hargreaves, Shawn; Harris, Mark (2004). «6800 leguas de viaje submarino: sombreado diferido» (PDF) . Nvidia . Archivado (PDF) del original el 22 de noviembre de 2009. Consultado el 6 de enero de 2021 .
^ "Representación avanzada frente a representación diferida". 28 de octubre de 2013.
^ ab Deering, Michael; Stephanie Winner; Bic Schediwy; Chris Duffy; Neil Hunt (1988). "El procesador triangular y el sombreador vectorial normal: un sistema VLSI para gráficos de alto rendimiento". ACM SIGGRAPH Computer Graphics . 22 (4): 21–30. doi :10.1145/378456.378468.
^ O'Donnell, Yuriy (18 de julio de 2011). "Oclusión direccional diferida del espacio de pantalla". kayru.org . Archivado desde el original el 22 de octubre de 2012.
^ Kayi, Celal Cansin. "Renderizado diferido en XNA 4" (PDF) . Universidad Linnaeus . Archivado (PDF) del original el 13 de agosto de 2013. Consultado el 6 de enero de 2021 .
^ "SDK 9.51 – Ejemplos de código destacados". Nvidia . 17 de enero de 2007. Archivado desde el original el 8 de marzo de 2005 . Consultado el 28 de marzo de 2007 .
^ Engel, Wolfgang (16 de marzo de 2008). «Light Pre-Pass Renderer». Diario de un programador gráfico . Archivado desde el original el 7 de abril de 2008. Consultado el 6 de enero de 2021 .
^ "Tutorial de sombreado diferido" (PDF) . Pontificia Universidad Católica de Río de Janeiro. Archivado desde el original (PDF) el 6 de marzo de 2009. Consultado el 14 de febrero de 2008 .
^ "MLAA: Cómo trasladar eficazmente el suavizado de bordes de la GPU a la CPU" (PDF) . Intel . Consultado el 2 de diciembre de 2018 .
^ "Antialiasing morfológico y reconstrucción topológica" (PDF) . Universidad Gustave Eiffel . Archivado (PDF) del original el 3 de abril de 2012. Consultado el 6 de enero de 2021 .
^ "Copia archivada" (PDF) . Archivado desde el original (PDF) el 25 de noviembre de 2011. Consultado el 7 de noviembre de 2011 .{{cite web}}: CS1 maint: archived copy as title (link)
^ Chajdas, Matthäus G.; McGuire, Morgan; Luebke, David (1 de febrero de 2011). «Subpixel Reconstruction Antialiasing». Nvidia . Archivado desde el original el 27 de enero de 2011. Consultado el 6 de enero de 2021 .
^ Andreev, Dmitry (2011). "Anti-Aliasing desde una perspectiva diferente". and.intercon.ru . Archivado desde el original el 4 de abril de 2011 . Consultado el 6 de enero de 2021 .
^ Andreev, Dmitry (4 de marzo de 2011). "Anti-Aliasing desde una perspectiva diferente (diapositivas ampliadas de la GDC 2011)". and.intercon.ru . Archivado desde el original el 5 de abril de 2011 . Consultado el 6 de enero de 2021 .
^ "Renderizado en tiempo real · Enfoques de iluminación diferida". realtimerendering.com . 2 de junio de 2009.
^ "Assassin's Creed III: El motor Anvil rediseñado". www.GameInformer.com . Archivado desde el original el 30 de marzo de 2012.
^ "El desarrollo de BioShock Infinite está enfocado en PS3 y utiliza tecnología de Uncharted 2". blorge.com . Archivado desde el original el 3 de octubre de 2011.
^ Chetan Jags (18 de julio de 2023). «BlackMesa XenEngine: Parte 4 – Iluminación y sombras». chetanjags.wordpress.com . Consultado el 18 de septiembre de 2023 .
^ "Entrevista técnica: Crackdown 2". Eurogamer.net . 26 de junio de 2010.
^ guest11b095 (14 de mayo de 2009). "Un poco más de llanto diferido Engine3". slideshare.net .{{cite web}}: CS1 maint: numeric names: authors list (link)
^ "Dead Space de Electronic Arts". NVIDIA . Consultado el 14 de febrero de 2008 .
^ "Face-Off: Dead Space 2". Eurogamer . Consultado el 1 de febrero de 2010 .
^ "Face-Off: Dead Space 3". Eurogamer . 18 de febrero de 2013 . Consultado el 18 de febrero de 2013 .
^ "Entrevista técnica: Halo: Reach". Eurogamer.net . 11 de diciembre de 2010.
^ ab "Análisis técnico: el motor FOX de Metal Gear Solid 5". Eurogamer.net . 5 de abril de 2013.
^ "Copia archivada" (PDF) . Archivado desde el original (PDF) el 15 de septiembre de 2011. Consultado el 12 de julio de 2011 .{{cite web}}: CS1 maint: archived copy as title (link)
^ "Artículo sobre la creación de Shift 2 Unleashed • Página 2 • Eurogamer.net". Eurogamer.net . 14 de mayo de 2011.
^ "Efectos y técnicas de StarCraft II" (PDF) . AMD . Consultado el 9 de julio de 2012 .
^ "Mantenimiento de CGSociety". cgsociety.org . Archivado desde el original el 2 de abril de 2015. Consultado el 12 de julio de 2011 .
^ "Renderizado diferido « PlatinumGames Inc. " platinumgames.com . Archivado desde el original el 27 de noviembre de 2010.
^ "Análisis de Ghost of Tsushima: una potencia gráfica para PS4". gamingbolt.com .
^ Silard Šimon. "Entrevista de Frictional Games". playsomnia.com .
^ DICE (8 de marzo de 2011). "Sombreado diferido basado en SPU en BATTLEFIELD 3 para Playstation 3". slideshare.net .
^ "Valve Developer Wiki - Dota 2" . Consultado el 10 de abril de 2012 .
^ "Copia archivada" (PDF) . Archivado desde el original (PDF) el 11 de julio de 2011. Consultado el 12 de julio de 2011 .{{cite web}}: CS1 maint: archived copy as title (link)
^ "Entrevista técnica: Entrevista de Metro 2033 • Página 2 • Eurogamer.net". Eurogamer.net . 25 de febrero de 2010.
^ "Historia - Juegos de ovejas eléctricas" . Consultado el 14 de abril de 2011 .
^ Shishkovtsov, Oles (7 de marzo de 2005). «GPU Gems 2: Capítulo 9. Sombreado diferido en STALKER». Nvidia . Consultado el 2 de febrero de 2011 .
^ "Sombreado diferido en Tabula Rasa". NVIDIA. Archivado desde el original el 3 de febrero de 2009. Consultado el 14 de febrero de 2008 .
^ "Foros de usuarios de Steam - Ver publicación individual - Cómo quitarle la carga de Physx a la CPU..." steampowered.com .
^ "Foros de usuarios de Steam - Ver publicación individual - Información de renderizado de Trine 2: anti-aliasing, sobrecalentamiento, estéreo, retraso de entrada, etc." steampowered.com .
^ "Especificaciones de CryENGINE 3". Crytek GmbH. Archivado desde el original el 27 de marzo de 2009. Consultado el 27 de marzo de 2009 .
^ "Te iluminamos en Battlefield 3". DICE . 3 de marzo de 2011. Archivado desde el original (PDF) el 25 de agosto de 2011 . Consultado el 15 de septiembre de 2011 .
^ "GameStart – Lista de funciones". Archivado desde el original el 2 de diciembre de 2011.
^ "Infinity Development Journal – Deferred Lighting". I-Novae Studios. 3 de abril de 2009. Archivado desde el original el 26 de enero de 2013. Consultado el 26 de enero de 2011 .
^ "BUILD: Renderizado diferido". MCV . 26 de febrero de 2009 . Consultado el 8 de abril de 2015 .
^ "Torque 3D Development - Advanced Lighting (deferred illumination hybrid)" (Desarrollo de Torque 3D: iluminación avanzada (iluminación diferida híbrida)). 3 de marzo de 2009. Consultado el 2 de julio de 2015 .
^ Vosburgh, Ethan (9 de septiembre de 2010). "Vista previa de la función Unity 3: renderizado diferido". Unity Technologies . Consultado el 26 de enero de 2011 .
^ "Unreal Engine 4 - Descripción general del renderizado". Epic Games . Consultado el 6 de junio de 2015 .
^ "Vision Engine 8.2 incorpora tecnologías 3D en múltiples plataformas". 10 de octubre de 2011. Archivado desde el original el 16 de noviembre de 2012. Consultado el 8 de abril de 2015 .
^ "La tecnología gráfica de Fallout 4". Bethesda Softworks . 4 de noviembre de 2015 . Consultado el 24 de abril de 2020 .
^ Saito, Takafumi; Tokiichiro Takahashi (1990). "Representación comprensible de formas tridimensionales". Gráficos por computadora ACM SIGGRAPH . 24 (4): 197–206. doi :10.1145/97880.97901.
^ Geldreich, Rich. «Presentación de la GDC 2004 sobre iluminación diferida y sombreado». Archivado desde el original el 11 de marzo de 2014. Consultado el 24 de agosto de 2013 .
^ "Sombreado diferido" (PDF) . NVIDIA . Consultado el 28 de marzo de 2007 .
^ Klint, Josh. "Renderizado diferido en Leadwerks Engine" (PDF) . Leadwerks. Archivado desde el original (PDF) el 9 de diciembre de 2008.