La transparencia independiente del orden (OIT) es una clase de técnicas en gráficos por computadora rasterizados para representar transparencias en una escena 3D, que no requieren la representación de la geometría en orden ordenado para la composición alfa .
Descripción
Por lo general, la geometría 3D con transparencia se renderiza combinando (usando composición alfa ) todas las superficies en un solo búfer (piense en esto como un lienzo). Cada superficie ocluye el color existente y agrega algo de su propio color dependiendo de su valor alfa , una proporción de transmitancia de luz . El orden en el que se mezclan las superficies afecta la oclusión total o la visibilidad de cada superficie. Para obtener un resultado correcto, las superficies deben combinarse desde el más lejano al más cercano o del más cercano al más lejano, según la operación de composición alfa , por encima o por debajo . El orden se puede lograr renderizando la geometría en orden ordenado, por ejemplo, clasificando triángulos por profundidad, pero puede llevar una cantidad significativa de tiempo, no siempre produce una solución (en el caso de geometría que se cruza o se superpone circularmente) y la implementación es compleja. En cambio, la transparencia independiente del orden ordena la geometría por píxel, después de la rasterización. Para obtener resultados exactos, es necesario almacenar todos los fragmentos antes de clasificarlos y componerlos.
Historia
El búfer A es una técnica de gráficos por computadora introducida en 1984 que almacena listas por píxel de datos de fragmentos (incluida la información de micropolígono ) en un rasterizador de software, REYES , originalmente diseñado para suavizado pero también compatible con la transparencia.
Más recientemente, el peeling en profundidad [1] en 2001 describió una técnica de OIT acelerada por hardware. Con limitaciones en el hardware de gráficos, la geometría de la escena tuvo que ser renderizada muchas veces. Se han seguido varias técnicas para mejorar el rendimiento del pelado en profundidad, aún con la limitación de reproducción de muchas pasadas. Por ejemplo, Peeling de profundidad dual (2008). [2]
En 2009, se introdujeron dos características importantes en el hardware / controladores / API de gráficos de GPU que permitieron capturar y almacenar datos de fragmentos en una sola pasada de renderizado de la escena, algo que antes no era posible. Estos son, la capacidad de escribir en la memoria de la GPU arbitraria desde sombreadores y operaciones atómicas. Con estas características, se hizo posible una nueva clase de técnicas de OIT que no requieren muchas pasadas de renderizado de la geometría de la escena.
- El primero fue almacenar los datos de los fragmentos en una matriz 3D, [3] donde los fragmentos se almacenan a lo largo de la dimensión z para cada píxel x / y . En la práctica, la mayor parte de la matriz 3D no se utiliza o se desborda, ya que la complejidad de la profundidad de una escena suele ser desigual. Para evitar el desbordamiento, la matriz 3D requiere una gran cantidad de memoria, lo que en muchos casos no es práctico.
- Existen dos enfoques para reducir esta sobrecarga de memoria.
- El empaquetado de la matriz 3D con un escaneo de suma de prefijo, o linealización , [4] eliminó el problema de la memoria no utilizada, pero requiere una pasada de procesamiento de cálculo de complejidad de profundidad adicional de la geometría. El búfer S "consciente de la dispersión" , búfer de fragmentos dinámicos, [5] búfer D "deque" [ cita requerida ] , búfer de fragmentos en capas linealizado [6] todos los datos de los fragmentos de paquetes con un escaneo de suma de prefijo y se demuestran con OIT.
- El almacenamiento de fragmentos en listas enlazadas por píxel [7] proporciona un empaquetado ajustado de estos datos y, a finales de 2011, las mejoras del controlador redujeron la sobrecarga de la contención de operaciones atómicas, lo que hizo que la técnica fuera muy competitiva. [6]
OIT exacta
Exacto, a diferencia de aproximado , OIT calcula con precisión el color final, para el cual se deben clasificar todos los fragmentos. Para escenas de gran complejidad y profundidad, la clasificación se convierte en el cuello de botella.
Un problema con la etapa de clasificación es la ocupación limitada de la memoria local , en este caso un atributo SIMT relacionado con el rendimiento y la ocultación de la latencia de operación de las GPU. La asignación de memoria hacia atrás [8] (BMA) agrupa los píxeles por su complejidad de profundidad y los clasifica en lotes para mejorar la ocupación y, por lo tanto, el rendimiento de los píxeles de complejidad de baja profundidad en el contexto de una escena de complejidad de profundidad potencialmente alta. Se informa de un aumento general de rendimiento de la OIT de hasta 3 veces.
La clasificación se realiza típicamente en una matriz local, sin embargo, el rendimiento se puede mejorar aún más haciendo uso de la jerarquía de memoria de la GPU y clasificando en registros, [9] de manera similar a una clasificación de fusión externa , especialmente en conjunto con BMA.
OIT aproximada
Las técnicas de OIT aproximadas relajan la restricción del renderizado exacto para proporcionar resultados más rápidos. Se puede obtener un mayor rendimiento al no tener que almacenar todos los fragmentos o al ordenar solo parcialmente la geometría. Varias técnicas también comprimen o reducen los datos del fragmento. Éstas incluyen:
- Transparencia estocástica: dibuje en una resolución más alta con total opacidad pero descarte algunos fragmentos. Entonces, la reducción de resolución producirá transparencia. [10]
- Transparencia adaptativa, [11] una técnica de dos pasadas donde la primera construye una función de visibilidad que comprime sobre la marcha (esta compresión evita tener que clasificar completamente los fragmentos) y la segunda usa estos datos para componer fragmentos desordenados. La sincronización de píxeles de Intel [12] evita la necesidad de almacenar todos los fragmentos, eliminando el requisito de memoria ilimitada de muchas otras técnicas de OIT.
OIT en hardware
Ver también
Referencias
- ↑ Everitt, Cass (15 de mayo de 2001). "Transparencia interactiva independiente del orden" . Nvidia . Archivado desde el original el 27 de septiembre de 2011 . Consultado el 12 de octubre de 2008 .
- ^ Bavoil, Louis (febrero de 2008). "Solicitar transparencia independiente con peeling de profundidad dual" (PDF) . Nvidia . Consultado el 12 de marzo de 2013 .
- ^ Fang Liu, Meng-Cheng Huang, Xue-Hui Liu y En-Hua Wu. "Pelado en profundidad de una sola pasada mediante rasterizador CUDA" , en SIGGRAPH 2009: Charlas (SIGGRAPH '09), 2009
- ^ Craig Peeper. "Pase de suma de prefijo para linealizar el almacenamiento en búfer A" , solicitud de patente, diciembre de 2008
- ^ Marilena Maule y João LD Comba y Rafael Torchelsen y Rui Bastos. "Transparencia independiente del orden optimizada para la memoria con Dynamic Fragment Buffer" , In Computers & Graphics, 2014.
- ↑ a b Pyarelal Knowles, Geoff Leach y Fabio Zambetta. "Capítulo 20: Técnicas eficientes de búfer de fragmentos en capas" , OpenGL Insights, páginas 279-292, Editores Cozzi y Riccio, CRC Press, 2012
- ^ Jason C. Yang, Justin Hensley, Holger Grün y Nicolas Thibieroz. "Construcción de listas enlazadas simultáneas en tiempo real en la GPU" , en las actas de la 21ª conferencia de Eurographics sobre renderizado (EGSR'10), 2010
- ^ Knowles; et al. (Octubre de 2013). "Asignación de memoria hacia atrás y OIT mejorada" (PDF) . Biblioteca Digital Eurographics . Archivado desde el original (PDF) el 2 de marzo de 2014 . Consultado el 21 de enero de 2014 .
- ^ Knowles; et al. (Junio de 2014). "Clasificación rápida para la OIT exacta de escenas complejas" (PDF) . Springer Berlín Heidelberg . Archivado desde el original (PDF) el 9 de agosto de 2014 . Consultado el 5 de agosto de 2014 .
- ^ Enderton, Eric (sin fecha). "Transparencia estocástica" (PDF) . Nvidia . Consultado el 12 de marzo de 2013 .
- ^ Salvi; et al. (18 de julio de 2013). "Transparencia adaptativa" . Consultado el 21 de enero de 2014 .
- ^ Davies, Leigh (18 de julio de 2013). "Aproximación de transparencia independiente del orden con sincronización de píxeles" . Intel . Consultado el 21 de enero de 2014 .
- ^ "Optimización del rendimiento de Dreamcast Microsoft Direct3D" . Microsoft . 1999-03-01.