La renderización paralela (o renderización distribuida ) es la aplicación de la programación paralela al dominio computacional de los gráficos por computadora . La renderización de gráficos puede requerir enormes recursos computacionales para escenas complejas que surgen en la visualización científica , la visualización médica , las aplicaciones CAD y la realidad virtual . Investigaciones recientes también han sugerido que la renderización paralela se puede aplicar a los juegos móviles para disminuir el consumo de energía y aumentar la fidelidad gráfica. [ 1 ] La renderización es una carga de trabajo fácilmente paralelizable en múltiples dominios (por ejemplo, píxeles, objetos, fotogramas) y, por lo tanto, ha sido objeto de mucha investigación.
Distribución de la carga de trabajo
Existen dos razones, a menudo contrapuestas, para utilizar la renderización paralela. El escalado de rendimiento permite renderizar fotogramas más rápidamente, mientras que el escalado de datos permite visualizar conjuntos de datos más grandes. Los distintos métodos de distribución de la carga de trabajo tienden a favorecer un tipo de escalado sobre el otro. También pueden existir otras ventajas y desventajas, como problemas de latencia y equilibrio de carga . Las tres opciones principales para la distribución de primitivas son fotogramas completos, píxeles u objetos (por ejemplo, mallas triangulares ).
Distribución de fotogramas
Cada unidad de procesamiento puede renderizar un fotograma completo desde un punto de vista o momento diferente. Los fotogramas renderizados desde distintos puntos de vista permiten mejorar la calidad de la imagen mediante el suavizado de bordes o añadir efectos como profundidad de campo y visualización tridimensional . Este enfoque permite un buen escalado del rendimiento, pero no de los datos.
Al renderizar fotogramas secuenciales en paralelo, se producirá un retardo en las sesiones interactivas. El retardo entre la entrada del usuario y la acción que se muestra es proporcional al número de fotogramas secuenciales que se renderizan en paralelo.
Distribución de píxeles
Los conjuntos de píxeles en el espacio de la pantalla se pueden distribuir entre las unidades de procesamiento en lo que a menudo se denomina renderizado de ordenación primero. [ 2 ]
La distribución de líneas entrelazadas de píxeles proporciona un buen equilibrio de carga, pero imposibilita el escalado de datos. La distribución de mosaicos bidimensionales contiguos de píxeles permite el escalado de datos mediante el filtrado de datos dentro del cono de visión . Sin embargo, existe una sobrecarga de datos debido a la replicación de objetos en los límites del cono de visión, y los datos deben cargarse dinámicamente a medida que cambia el punto de vista. El equilibrio de carga dinámico también es necesario para mantener el escalado del rendimiento.
Distribución de objetos
La distribución de objetos entre unidades de procesamiento se conoce comúnmente como renderizado de ordenación final. [ 3 ] Proporciona una buena escalabilidad de datos y puede ofrecer una buena escalabilidad de rendimiento, pero requiere que las imágenes intermedias de los nodos de procesamiento se compongan alfa para crear la imagen final. A medida que aumenta la resolución de la imagen, también aumenta la sobrecarga de la composición alfa.
También se necesita un esquema de equilibrio de carga para mantener el rendimiento independientemente de las condiciones de visualización. Esto se puede lograr dividiendo el espacio de objetos y asignando múltiples piezas a cada unidad de procesamiento de forma aleatoria; sin embargo, esto aumenta la cantidad de etapas de composición alfa necesarias para crear la imagen final. Otra opción es asignar un bloque contiguo a cada unidad de procesamiento y actualizarlo dinámicamente, pero esto requiere la carga dinámica de datos.
Distribución híbrida
Los distintos tipos de distribuciones se pueden combinar de diversas maneras. Se pueden renderizar en paralelo varios fotogramas consecutivos, utilizando una distribución de píxeles o de objetos. Las distribuciones de objetos pueden intentar minimizar su superposición en el espacio de la pantalla para reducir los costes de composición alfa, o incluso utilizar una distribución de píxeles para renderizar partes del espacio del objeto.
Aplicaciones de código abierto
El paquete de software de código abierto Chromium proporciona un mecanismo de renderizado paralelo para las aplicaciones existentes. Intercepta las llamadas de OpenGL y las procesa, normalmente para enviarlas a múltiples unidades de renderizado que controlan un videowall .
Equalizer es un marco de renderizado de código abierto y un sistema de gestión de recursos para aplicaciones multipipe. Equalizer proporciona una API para escribir aplicaciones de visualización paralelas y escalables que se configuran en tiempo de ejecución mediante un servidor de recursos. [ 4 ]
OpenSG es un sistema de grafos de escena de código abierto que proporciona capacidades de renderizado paralelo, especialmente en clústeres. Oculta la complejidad de las aplicaciones paralelas multihilo y en clúster, y admite el renderizado tanto de ordenación primero como de ordenación último. [ 5 ]
Golem es una aplicación descentralizada de código abierto utilizada para computación paralela que actualmente funciona con renderizado en Blender y tiene planes de incorporar más usos. [ 6 ]
Véase también
- Conceptos
- Implementaciones
Referencias
- ↑ Wu, C.; Yang, B.; Zhu, W.; Zhang, Y. (2017). "Hacia un alto rendimiento de GPU móvil mediante la descarga colaborativa de carga de trabajo" . IEEE Transactions on Parallel and Distributed Systems . PP (99): 435–449 . doi : 10.1109/tpds.2017.2754482 . ISSN 1045-9219 .
- ↑ Molnar, S., M. Cox, D. Ellsworth y H. Fuchs. “ Una clasificación por ordenamiento de la renderización paralela ”. IEEE Computer Graphics and Algorithms, páginas 23-32, julio de 1994.
- ↑ Molnar, S., M. Cox, D. Ellsworth y H. Fuchs. “ Una clasificación por ordenamiento de la renderización paralela ”. IEEE Computer Graphics and Algorithms, páginas 23-32, julio de 1994.
- ↑ "Equalizer: Parallel Rendering" . Archivado del original el 11 de mayo de 2008. Consultado el 30 de abril de 2020 .
- ↑ "OpenSG" . Archivado del original el 6 de agosto de 2017. Consultado el 30 de abril de 2020 .
- ↑ "Red Golem" . golem.network . Consultado el 16 de mayo de 2021 .
Enlaces externos
- Renderizado en clúster en la Universidad de Princeton
- Gráficos por computadora en 3D
- Aplicaciones de la computación distribuida