stringtranslate.com

Renderizado (gráficos por computadora)

Una variedad de técnicas de renderizado aplicadas a una sola escena 3D
Una imagen creada con POV-Ray 3.6

La representación o síntesis de imágenes es el proceso de generar una imagen fotorrealista o no fotorrealista a partir de un modelo 2D o 3D por medio de un programa informático . [ cita requerida ] La imagen resultante se conoce como representación . Se pueden definir múltiples modelos en un archivo de escena que contiene objetos en un lenguaje o estructura de datos estrictamente definidos . El archivo de escena contiene información de geometría, punto de vista, texturas , iluminación y sombreado que describe la escena virtual. Los datos contenidos en el archivo de escena se pasan luego a un programa de representación para ser procesados ​​y exportados a una imagen digital o un archivo de imagen de gráficos rasterizados . El término "renderizado" es análogo al concepto de impresión de una escena por parte de un artista . El término "renderizado" también se utiliza para describir el proceso de cálculo de efectos en un programa de edición de vídeo para producir la salida de vídeo final.

Una aplicación o componente de software que realiza la renderización se denomina motor de renderización , [1] motor de renderización , sistema de renderización , motor gráfico o simplemente renderizador .

La renderización es uno de los principales subtemas de los gráficos por computadora en 3D y, en la práctica, siempre está conectada con los demás. Es el último paso importante en el proceso de creación de gráficos , que otorga a los modelos y a la animación su apariencia final. Con la creciente sofisticación de los gráficos por computadora desde la década de 1970, se ha convertido en un tema más diferenciado.

El renderizado tiene aplicaciones en arquitectura , videojuegos , simuladores , efectos visuales de películas y televisión y visualización de diseños, cada uno de los cuales emplea un equilibrio diferente de características y técnicas. Hay una amplia variedad de renderizadores disponibles para su uso. Algunos están integrados en paquetes de modelado y animación más grandes, algunos son independientes y algunos son proyectos gratuitos de código abierto. En el interior, un renderizador es un programa cuidadosamente diseñado basado en múltiples disciplinas, incluida la física de la luz , la percepción visual , las matemáticas y el desarrollo de software .

Aunque los detalles técnicos de los métodos de renderizado varían, los desafíos generales que se deben superar al producir una imagen 2D en una pantalla a partir de una representación 3D almacenada en un archivo de escena son manejados por el flujo de gráficos en un dispositivo de renderizado como una GPU . Una GPU es un dispositivo diseñado específicamente para ayudar a una CPU a realizar cálculos de renderizado complejos. Si se desea que una escena se vea relativamente realista y predecible bajo una iluminación virtual, el software de renderizado debe resolver la ecuación de renderizado . La ecuación de renderizado no tiene en cuenta todos los fenómenos de iluminación, sino que actúa como un modelo de iluminación general para imágenes generadas por computadora.

En el caso de los gráficos 3D, las escenas se pueden pre-renderizar o generar en tiempo real. La pre-renderización es un proceso lento y de alto consumo de recursos que se utiliza normalmente para la creación de películas, donde las escenas se pueden generar con antelación, mientras que la renderización en tiempo real se suele realizar para los videojuegos 3D y otras aplicaciones que deben crear escenas de forma dinámica. Los aceleradores de hardware 3D pueden mejorar el rendimiento de la renderización en tiempo real.

Características

Una imagen renderizada puede entenderse en términos de una serie de características visibles. La investigación y el desarrollo de la renderización se han basado principalmente en la búsqueda de formas de simularlas de manera eficiente. Algunas se relacionan directamente con algoritmos y técnicas particulares, mientras que otras se producen en conjunto.

Entradas

Antes de poder renderizar una escena 3D o una imagen 2D, se debe describir de una manera que el software de renderizado pueda entender. Históricamente, las entradas para el renderizado 2D y 3D eran generalmente archivos de texto , que son más fáciles de editar y entender para los humanos que los archivos binarios. Para los gráficos 3D, los formatos de texto han sido reemplazados en gran medida por formatos binarios más eficientes y por API que permiten que las aplicaciones interactivas se comuniquen directamente con un componente de renderizado sin generar un archivo en el disco (aunque generalmente se sigue creando una descripción de la escena en la memoria antes del renderizado). [2] : 1.2, 3.2.6, 3.3.1, 3.3.7 

Los algoritmos de renderizado tradicionales utilizan descripciones geométricas de escenas 3D o imágenes 2D. Las aplicaciones y algoritmos que renderizan visualizaciones de datos escaneados del mundo real o simulaciones científicas pueden requerir distintos tipos de datos de entrada.

El formato PostScript (al que a menudo se le atribuye el auge de la autoedición ) proporciona una forma estandarizada e interoperable de describir gráficos 2D y diseño de página . El formato Scalable Vector Graphics (SVG) también está basado en texto, y el formato PDF utiliza el lenguaje PostScript internamente. Por el contrario, aunque muchos formatos de archivos de gráficos 3D se han estandarizado (incluidos los formatos basados ​​en texto como VRML y X3D ), las diferentes aplicaciones de renderizado suelen utilizar formatos adaptados a sus necesidades, y esto ha llevado a una proliferación de formatos propietarios y abiertos, siendo los archivos binarios más comunes. [2] : 3.2.3, 3.2.5, 3.3.7  [3] : vii  [4] [5] : 16.5.2.  [6]

Gráficos vectoriales 2D

Una descripción de imagen de gráficos vectoriales puede incluir: [3] [4]

Geometría 3D

Una descripción de una escena geométrica puede incluir: [2] : Cap. 4-7, 8.7  [7]

Existen muchos formatos de archivo para almacenar objetos 3D individuales o " modelos ". Estos se pueden importar a una escena más grande o se pueden cargar a pedido mediante software de renderizado o juegos. Una escena realista puede requerir cientos de elementos como objetos domésticos, vehículos y árboles, y los artistas 3D a menudo utilizan grandes bibliotecas de modelos. En la producción de juegos, estos modelos (junto con otros datos como texturas, archivos de audio y animaciones) se conocen como " recursos ". [6] [8] : Cap. 4 

Datos volumétricos

La visualización científica y de ingeniería a menudo requiere la representación de datos volumétricos generados por escaneos o simulaciones 3D . Quizás la fuente más común de dichos datos sean las tomografías computarizadas y las resonancias magnéticas médicas , que deben representarse para el diagnóstico. Los datos volumétricos pueden ser extremadamente grandes y requieren formatos de datos especializados para almacenarlos de manera eficiente, en particular si el volumen es escaso (con regiones vacías que no contienen datos). [9] : 14.3.1  [10] [11]

Antes de la renderización, se pueden extraer conjuntos de niveles para datos volumétricos y convertirlos en una malla de triángulos, por ejemplo, utilizando el algoritmo de cubos en marcha . También se han desarrollado algoritmos que trabajan directamente con datos volumétricos, por ejemplo, para renderizar representaciones realistas de la forma en que la luz se dispersa y absorbe por las nubes y el humo, y este tipo de renderización volumétrica se utiliza ampliamente en efectos visuales para películas. Al renderizar datos volumétricos de menor resolución sin interpolación, los cubos individuales o " vóxeles " pueden ser visibles, un efecto que a veces se utiliza deliberadamente para gráficos de juegos. [12] : 4.6  [9] : 13.10, Cap. 14, 16.1 

Fotogrametría y escaneo

Las fotografías de objetos del mundo real se pueden incorporar a una escena renderizada utilizándolas como texturas para objetos 3D. Las fotografías de una escena también se pueden unir para crear imágenes panorámicas o mapas del entorno , que permiten renderizar la escena de forma muy eficiente pero solo desde un único punto de vista. El escaneo de objetos y escenas reales utilizando luz estructurada o lidar produce nubes de puntos que consisten en las coordenadas de millones de puntos individuales en el espacio, a veces junto con información de color. Estas nubes de puntos se pueden renderizar directamente o convertir en mallas antes de renderizar. (Nota: "nube de puntos" a veces también se refiere a un estilo de renderizado minimalista que se puede utilizar para cualquier geometría 3D, similar al renderizado de estructura alámbrica). [9] : 13.3, 13.9  [2] : 1.3 

Aproximaciones neuronales y campos de luz

Un enfoque experimental más reciente es la descripción de escenas utilizando campos de radiancia que definen el color, la intensidad y la dirección de la luz entrante en cada punto del espacio. (Esto es conceptualmente similar, pero no idéntico, al campo de luz registrado por un holograma ). Para cualquier resolución útil, la cantidad de datos en un campo de radiancia es tan grande que no es práctico representarlo directamente como datos volumétricos, y se debe encontrar una función de aproximación . Las redes neuronales se utilizan típicamente para generar y evaluar estas aproximaciones, a veces utilizando fotogramas de vídeo o una colección de fotografías de una escena tomadas desde diferentes ángulos, como " datos de entrenamiento ". [13] [14]

Recientemente se han utilizado algoritmos relacionados con redes neuronales para encontrar aproximaciones de una escena como Gaussianas 3D . La representación resultante es similar a una nube de puntos , excepto que utiliza manchas difusas, parcialmente transparentes de dimensiones y orientaciones variables en lugar de puntos. Al igual que con los campos de radiancia neuronal , estas aproximaciones se generan a menudo a partir de fotografías o fotogramas de vídeo. [15]

Salidas

El resultado de la renderización se puede mostrar inmediatamente en la pantalla (muchas veces por segundo, en el caso de la renderización en tiempo real, como los juegos) o guardarse en un formato de archivo de gráficos rasterizados , como JPEG o PNG . Las aplicaciones de renderización de alta gama suelen utilizar el formato de archivo OpenEXR , que puede representar gradaciones más finas de colores e iluminación de alto rango dinámico , lo que permite aplicar posteriormente el mapeo de tonos u otros ajustes sin pérdida de calidad. [16] [17] : Cap. 14, Ap. B 

Las animaciones renderizadas rápidamente se pueden guardar directamente como archivos de video, pero para una renderización de alta calidad, los cuadros individuales (que pueden ser renderizados por diferentes computadoras en un clúster o granja de renderización y pueden tardar horas o incluso días en renderizarse) se generan como archivos separados y se combinan más tarde en un videoclip. [18] [8] : 1.5, 3.11, 8.11 

La salida de un renderizador a veces incluye más que solo valores de color RGB . Por ejemplo, el espectro se puede muestrear usando múltiples longitudes de onda de luz, o se puede incluir información adicional como la profundidad (distancia desde la cámara) o el material de cada punto en la imagen (estos datos se pueden usar durante la composición o al generar mapas de textura para renderizado en tiempo real, o se pueden usar para ayudar a eliminar el ruido de una imagen trazada por trayectoria). Se puede incluir información de transparencia, lo que permite componer objetos de primer plano renderizados con fotografías o videos. A veces también es útil almacenar las contribuciones de diferentes luces, o de iluminación especular y difusa, como canales separados, de modo que la iluminación se pueda ajustar después del renderizado. El formato OpenEXR permite almacenar muchos canales de datos en un solo archivo. [16] [17] : Cap. 14, Ap. B 

Técnicas

La elección de cómo renderizar una escena 3D generalmente implica hacer concesiones entre velocidad, uso de memoria y realismo (aunque el realismo no siempre es lo deseado).Los algoritmos desarrollados a lo largo de los años siguen una progresión flexible, y los métodos más avanzados se vuelven prácticos a medida que aumenta la capacidad de procesamiento y de memoria. Se pueden utilizar múltiples técnicas para una única imagen final.

Una distinción importante es entre los algoritmos de orden de imágenes , que iteran sobre los píxeles del plano de la imagen, y los algoritmos de orden de objetos , que iteran sobre los objetos de la escena. En el caso de escenas simples, el orden de objetos suele ser más eficiente, ya que hay menos objetos que píxeles. [19] : Cap. 4 

Gráficos vectoriales 2D
Las pantallas vectoriales de los años 1960 y 1970 utilizaban la desviación de un haz de electrones para dibujar segmentos de línea directamente en la pantalla. Hoy en día, los gráficos vectoriales se renderizan mediante algoritmos de rasterización que también admiten formas rellenas. En principio, cualquier renderizador de gráficos vectoriales 2D se puede utilizar para renderizar objetos 3D proyectándolos primero sobre un plano de imagen 2D. [20] : 93, 431, 505, 553 
Rasterización 3D
Adapta algoritmos de rasterización 2D para que puedan usarse de manera más eficiente para renderización 3D, manejando la eliminación de superficies ocultas mediante técnicas de línea de escaneo o búfer z . Se pueden obtener diferentes efectos realistas o estilizados coloreando los píxeles cubiertos por los objetos de diferentes maneras. Las superficies generalmente se dividen en mallas de triángulos antes de ser rasterizadas. La rasterización suele ser sinónimo de renderización de "orden de objetos" (como se describió anteriormente). [20] : 560-561, 575-590  [2] : 8.5  [19] : Cap. 9 
Lanzamiento de rayos
Utiliza fórmulas geométricas para calcular el primer objeto que un rayo interseca. [21] : 8  Se puede utilizar para implementar la representación de "orden de imagen" al proyectar un rayo para cada píxel y encontrar un punto correspondiente en la escena. La proyección de rayos es una operación fundamental que se utiliza tanto para fines gráficos como no gráficos, [22] : 6  por ejemplo, para determinar si un punto está en la sombra o para verificar lo que puede ver un enemigo en un juego .
Trazado de rayos
Simula las trayectorias de rebote de la luz causadas por la reflexión y refracción especulares , lo que requiere un número variable de operaciones de proyección de rayos para cada trayectoria. Las formas avanzadas utilizan técnicas de Monte Carlo para representar efectos como luces de área, profundidad de campo , reflejos borrosos y sombras suaves , pero el cálculo de la iluminación global suele estar en el dominio del trazado de trayectorias. [21] : 9-13  [23]
Radiosidad
Un método de análisis de elementos finitos que divide las superficies de la escena en partes y calcula la cantidad de luz que cada parte recibe de fuentes de luz o indirectamente de otras superficies. Una vez que se conoce la irradiancia de cada superficie, la escena se puede renderizar mediante rasterización o trazado de rayos. [24] : 888-890, 1044-1045 
Rastreo de ruta
Utiliza la integración de Monte Carlo con una forma simplificada de trazado de rayos, calculando el brillo promedio de una muestra de los posibles caminos que un fotón podría tomar al viajar desde una fuente de luz a la cámara (para algunas imágenes, se deben muestrear miles de caminos por píxel [22] : 8  ). Se introdujo como una forma estadísticamente imparcial de resolver la ecuación de renderizado , lo que le da al trazado de rayos una base matemática rigurosa. [25] [21] : 11-13 

Cada uno de los enfoques anteriores tiene muchas variaciones y existen algunas superposiciones. El trazado de trayectorias puede considerarse una técnica distinta o un tipo particular de trazado de rayos. [24] : 846, 1021  Nótese que el uso de la terminología relacionada con el trazado de rayos y el trazado de trayectorias ha cambiado significativamente con el tiempo. [21] : 7 

Representación de un terreno fractal mediante marcha de rayos

El trazado de rayos es una familia de algoritmos, utilizados por el método de proyección de rayos, para encontrar intersecciones entre un rayo y un objeto complejo, como un conjunto de datos volumétricos o una superficie definida por una función de distancia con signo . No es, en sí mismo, un método de renderizado, pero se puede incorporar al trazado de rayos y al trazado de trayectorias, y se utiliza en la rasterización para implementar la reflexión en el espacio de la pantalla y otros efectos. [21] : 13 

Una técnica llamada mapeo de fotones o trazado de fotones utiliza el trazado de rayos hacia adelante (también llamado trazado de partículas ), que traza las trayectorias de los fotones desde una fuente de luz hasta un objeto, en lugar de hacia atrás desde la cámara. Los datos adicionales recopilados por este proceso se utilizan junto con el trazado de rayos hacia atrás o el trazado de trayectorias convencionales. [24] : 1037-1039  Renderizar una escena utilizando solo el trazado de rayos hacia adelante es poco práctico, aunque se corresponde más con la realidad, porque se necesitaría simular una gran cantidad de fotones, de los cuales solo una pequeña fracción realmente llega a la cámara. [26] : 7-9  [20] : 587 

La renderización en tiempo real, incluidos los gráficos de los videojuegos, normalmente utiliza rasterización, pero cada vez más la combina con el trazado de rayos y el trazado de trayectorias. [22] : 2  Para permitir una iluminación global realista , la renderización en tiempo real a menudo se basa en iluminación pre-renderizada ("horneada") para objetos estacionarios. Para objetos en movimiento, puede utilizar una técnica llamada sondas de luz , en la que la iluminación se registra mediante la representación de vistas omnidireccionales de la escena en puntos elegidos en el espacio (a menudo puntos en una cuadrícula para permitir una interpolación más fácil ). Estos son similares a los mapas de entorno , pero normalmente utilizan una resolución muy baja o una aproximación como los armónicos esféricos . [27] (Nota: Blender utiliza el término 'sondas de luz' para una clase más general de datos de iluminación pregrabados, incluidos los mapas de reflexión. [28] )

Rasterización

Representación del Telescopio Extremadamente Grande

El término rasterización (en un sentido amplio) abarca muchas técnicas utilizadas para la renderización 2D y la renderización 3D en tiempo real . Las películas animadas en 3D se renderizaban mediante rasterización antes de que el trazado de rayos y el trazado de trayectorias se volvieran prácticos.

Un renderizador combina la rasterización con el procesamiento de geometría (que no es específico de la rasterización) y el procesamiento de píxeles que calcula los valores de color RGB que se colocarán en el búfer de cuadros para su visualización. [9] : 2.1  [19] : 9 

Las principales tareas de rasterización (incluido el procesamiento de píxeles) son: [9] : 2, 3.8, 23.1.1 

La rasterización 3D es típicamente parte de un proceso de gráficos en el que una aplicación proporciona listas de triángulos que se van a renderizar, y el sistema de renderizado transforma y proyecta sus coordenadas, determina qué triángulos son potencialmente visibles en la ventana gráfica y realiza las tareas de rasterización y procesamiento de píxeles antes mencionadas antes de mostrar el resultado final en la pantalla. [9] : 2.1  [19] : 9 

Históricamente, la rasterización 3D utilizaba algoritmos como el algoritmo Warnock y el renderizado de líneas de escaneo (también llamado "conversión de escaneo"), que pueden manejar polígonos arbitrarios y pueden rasterizar muchas formas simultáneamente. Aunque estos algoritmos siguen siendo importantes para el renderizado 2D, el renderizado 3D ahora suele dividir las formas en triángulos y rasterizarlas individualmente utilizando métodos más simples. [29] [30] [20] : 456, 561–569 

Existen algoritmos de alto rendimiento para rasterizar líneas 2D , incluidas líneas suavizadas , así como elipses y triángulos rellenos. Un caso especial importante de rasterización 2D es la representación de texto , que requiere un suavizado cuidadoso y redondeo de coordenadas para evitar distorsionar las formas de las letras y preservar el espaciado, la densidad y la nitidez. [19] : 9.1.1  [31]

Una vez que se han proyectado las coordenadas 3D sobre el plano de la imagen , la rasterización es principalmente un problema 2D, pero la tercera dimensión requiere la eliminación de superficies ocultas . Los primeros gráficos por computadora usaban algoritmos geométricos o proyección de rayos para eliminar las partes ocultas de las formas, o usaban el algoritmo del pintor , que ordena las formas por profundidad (distancia desde la cámara) y las renderiza de atrás hacia adelante. La ordenación por profundidad se evitó más tarde incorporando la comparación de profundidad en el algoritmo de renderizado de líneas de escaneo . El algoritmo de búfer z realiza las comparaciones indirectamente al incluir un valor de profundidad o "z" en el búfer de cuadros . Un píxel solo está cubierto por una forma si el valor z de esa forma es menor (lo que indica que está más cerca de la cámara) que el valor z que se encuentra actualmente en el búfer. El búfer z requiere memoria adicional (un recurso costoso en el momento en que se inventó), pero simplifica el código de rasterización y permite múltiples pasadas. Ahora la memoria es más rápida y abundante, y casi siempre se usa un búfer z para la renderización en tiempo real. [32] [33] [20] : 553–570  [9] : 2.5.2 

Una desventaja del algoritmo básico del búfer z es que cada píxel termina completamente cubierto por un solo objeto o lleno del color de fondo, lo que provoca bordes irregulares en la imagen final. Los primeros métodos de anti-aliasing abordaron esto detectando cuándo un píxel está parcialmente cubierto por una forma y calculando el área cubierta. El búfer A (y otras técnicas de subpíxeles y muestreo múltiple ) resuelven el problema con menos precisión pero con un mayor rendimiento. Para gráficos 3D en tiempo real, se ha vuelto común usar heurísticas complicadas (e incluso redes neuronales ) para realizar el anti-aliasing. [33] [34] [19] : 9.3  [9] : 5.4.2 

En la rasterización 3D, el color suele estar determinado por un sombreador de píxeles o un sombreador de fragmentos , un pequeño programa que se ejecuta para cada píxel. El sombreador no accede (o no puede hacerlo) directamente a los datos 3D de toda la escena (esto sería muy lento y daría como resultado un algoritmo similar al trazado de rayos) y se han desarrollado diversas técnicas para renderizar efectos como sombras y reflejos utilizando solo el mapeo de texturas y múltiples pasadas. [19] : 17.8 

Las implementaciones de rasterización 3D más antiguas y básicas no admitían sombreadores y utilizaban técnicas de sombreado simples como el sombreado plano (la iluminación se calcula una vez para cada triángulo, que luego se representa completamente en un color), el sombreado Gouraud (la iluminación se calcula utilizando vectores normales definidos en los vértices y luego los colores se interpolan en cada triángulo) o el sombreado Phong (los vectores normales se interpolan en cada triángulo y la iluminación se calcula para cada píxel). [19] : 9.2 

Hasta hace relativamente poco, Pixar utilizaba la rasterización para renderizar sus películas animadas . A diferencia de los renderizadores que se utilizan habitualmente para gráficos en tiempo real, el sistema de renderizado Reyes del software RenderMan de Pixar estaba optimizado para renderizar polígonos muy pequeños (del tamaño de un píxel) e incorporaba técnicas de muestreo estocástico más típicamente asociadas con el trazado de rayos . [2] : 2, 6.3  [35]

Lanzamiento de rayos

Una de las formas más sencillas de renderizar una escena 3D es probar si un rayo que comienza en el punto de vista (el "ojo" o la "cámara") intersecta alguna de las formas geométricas de la escena, repitiendo esta prueba utilizando una dirección de rayo diferente para cada píxel. Este método, llamado ray casting , fue importante en los primeros gráficos por computadora y es un componente fundamental para algoritmos más avanzados. El ray casting se puede utilizar para renderizar formas definidas por operaciones de geometría sólida constructiva (CSG). [21] : 8-9  [36] : 246–249 

Los primeros experimentos de proyección de rayos incluyen el trabajo de Arthur Appel en la década de 1960. Appel representó sombras proyectando un rayo adicional desde cada punto de la superficie visible hacia una fuente de luz. También intentó representar la densidad de la iluminación proyectando rayos aleatorios desde la fuente de luz hacia el objeto y trazando los puntos de intersección (similar a la técnica posterior llamada mapeo de fotones ). [37]

La marcha de rayos se puede utilizar para encontrar la primera intersección de un rayo con una forma intrincada como este fractal de Mandelbulb .

Al renderizar escenas que contienen muchos objetos, probar la intersección de un rayo con cada objeto se vuelve muy costoso. Se utilizan estructuras de datos especiales para acelerar este proceso al permitir excluir rápidamente una gran cantidad de objetos (como los objetos detrás de la cámara). Estas estructuras son análogas a los índices de bases de datos para encontrar los objetos relevantes. Las más comunes son la jerarquía de volumen delimitador (BVH), que almacena un cuadro delimitador o esfera precalculada para cada rama de un árbol de objetos, y el árbol kd que divide recursivamente el espacio en dos partes. Las GPU recientes incluyen aceleración de hardware para pruebas de intersección BVH. Los árboles kd son un caso especial de partición binaria del espacio , que se utilizó con frecuencia en los primeros gráficos de computadora (también puede generar un orden de rasterización para el algoritmo del pintor ). Los octrees , otra técnica históricamente popular, todavía se utilizan a menudo para datos volumétricos. [22] : 16–17  [38] [36] [5] : 36.2 

Las fórmulas geométricas son suficientes para encontrar la intersección de un rayo con formas como esferas , polígonos y poliedros , pero para la mayoría de las superficies curvas no existe una solución analítica o la intersección es difícil de calcular con precisión utilizando números de punto flotante de precisión limitada . A veces se pueden utilizar algoritmos de búsqueda de raíces , como el método de Newton . Para evitar estas complicaciones, las superficies curvas a menudo se aproximan como mallas de triángulos . La representación de volumen (por ejemplo, la representación de nubes y humo) y algunas superficies como los fractales pueden requerir la marcha de rayos en lugar de la proyección de rayos básica. [39] [21] : 13  [9] : 14, 17.3 

Trazado de rayos

Esfera espiral y Julia, detalle , una imagen generada por computadora creada por el artista visual Robert W. McGregor utilizando solo POV-Ray 3.6 y su lenguaje de descripción de escena incorporado

El trazado de rayos tiene como objetivo simular el flujo natural de la luz, interpretada como partículas. A menudo, los métodos de trazado de rayos se utilizan para aproximar la solución a la ecuación de renderizado mediante la aplicación de métodos de Monte Carlo . Algunos de los métodos más utilizados son el trazado de trayectorias , el trazado de trayectorias bidireccional o el transporte de luz Metropolis , pero también se utilizan métodos semirrealistas, como el trazado de rayos de estilo Whitted o híbridos. Si bien la mayoría de las implementaciones permiten que la luz se propague en líneas rectas, existen aplicaciones para simular efectos espaciotemporales relativistas. [40]

En una representación final de calidad de producción de un trabajo trazado de rayos, generalmente se disparan múltiples rayos para cada píxel y se trazan no solo hasta el primer objeto de intersección, sino más bien, a través de una serie de "rebotes" secuenciales, utilizando las leyes conocidas de la óptica, como "el ángulo de incidencia es igual al ángulo de reflexión" y leyes más avanzadas que tratan la refracción y la rugosidad de la superficie.

Una vez que el rayo encuentra una fuente de luz, o más probablemente una vez que se ha evaluado un número límite de rebotes, se evalúa la iluminación de la superficie en ese punto final utilizando las técnicas descritas anteriormente y se evalúan los cambios a lo largo del camino a través de los diversos rebotes para estimar un valor observado en el punto de vista. Todo esto se repite para cada muestra, para cada píxel.

En el trazado de rayos de distribución , en cada punto de intersección, se pueden generar múltiples rayos. Sin embargo, en el trazado de trayectorias , solo se genera un único rayo o ninguno en cada intersección, lo que aprovecha la naturaleza estadística de los experimentos de Monte Carlo .

Los avances en la tecnología de GPU han hecho posible el trazado de rayos en tiempo real en los juegos, aunque actualmente casi siempre se usa en combinación con la rasterización. [22] : 2  Esto permite efectos visuales que son difíciles con solo rasterización, incluido el reflejo de superficies curvas y objetos interreflectivos, [41] : 305  y sombras que son precisas en un amplio rango de distancias y orientaciones de superficie. [42] : 159-160  El soporte de trazado de rayos está incluido en versiones recientes de las API de gráficos utilizadas por los juegos, como DirectX , Metal y Vulkan . [43]

Radiosidad

La radiosidad es un método que intenta simular la forma en que las superficies iluminadas directamente actúan como fuentes de luz indirecta que iluminan otras superficies. Esto produce un sombreado más realista y parece capturar mejor el " ambiente " de una escena interior. Un ejemplo clásico es la forma en que las sombras "abrazan" las esquinas de las habitaciones.

La base óptica de la simulación es que cierta luz difusa procedente de un punto determinado de una superficie determinada se refleja en un amplio espectro de direcciones e ilumina el área que la rodea.

La técnica de simulación puede variar en complejidad. Muchas representaciones tienen una estimación muy aproximada de la radiosidad, simplemente iluminando una escena completa muy levemente con un factor conocido como ambiente. Sin embargo, cuando la estimación avanzada de la radiosidad se combina con un algoritmo de trazado de rayos de alta calidad, las imágenes pueden mostrar un realismo convincente, en particular para escenas en interiores.

En la simulación avanzada de radiosidad, los algoritmos recursivos de elementos finitos "hacen rebotar" la luz de un lado a otro entre las superficies del modelo, hasta que se alcanza un límite de recursión. De esta manera, la coloración de una superficie influye en la coloración de una superficie vecina, y viceversa. Los valores resultantes de iluminación en todo el modelo (a veces incluso para espacios vacíos) se almacenan y se utilizan como entradas adicionales al realizar cálculos en un modelo de proyección de rayos o de trazado de rayos.

Debido a la naturaleza iterativa/recursiva de la técnica, los objetos complejos son particularmente lentos de emular. Antes de la estandarización del cálculo rápido de radiosidad, algunos artistas digitales utilizaban una técnica a la que se denominaba vagamente radiosidad falsa , que consistía en oscurecer áreas de mapas de textura correspondientes a esquinas, juntas y huecos, y aplicarlas mediante autoiluminación o mapeo difuso para la representación de líneas de escaneo. Incluso ahora, los cálculos avanzados de radiosidad pueden reservarse para calcular el ambiente de la habitación, a partir de la luz que se refleja en las paredes, el piso y el techo, sin examinar la contribución que los objetos complejos hacen a la radiosidad, o los objetos complejos pueden reemplazarse en el cálculo de radiosidad con objetos más simples de tamaño y textura similares.

Los cálculos de radiosidad son independientes del punto de vista, lo que aumenta los cálculos involucrados, pero los hace útiles para todos los puntos de vista. Si hay poca reorganización de los objetos de radiosidad en la escena, los mismos datos de radiosidad se pueden reutilizar para varios fotogramas, lo que hace que la radiosidad sea una forma eficaz de mejorar la uniformidad de la proyección de rayos, sin afectar gravemente el tiempo de renderizado general por fotograma.

Por este motivo, la radiosidad es un componente fundamental de los principales métodos de renderizado en tiempo real, y se ha utilizado de principio a fin para crear una gran cantidad de conocidos largometrajes animados en 3D.

Rastreo de ruta

Como parte del enfoque conocido como renderizado basado en la física , el trazado de trayectorias se ha convertido en la técnica dominante para renderizar escenas realistas, incluidos los efectos para películas. [44] Por ejemplo, el popular software 3D de código abierto Blender utiliza el trazado de trayectorias en su renderizador Cycles. [45] Las imágenes producidas utilizando el trazado de trayectorias para la iluminación global son generalmente más ruidosas que cuando se utiliza la radiosidad (el principal algoritmo competidor), pero la radiosidad puede ser difícil de aplicar a escenas complejas y es propensa a los artefactos que surgen del uso de una representación teselada de la irradiancia . [44] [24] : 975-976, 1045 

Al igual que el trazado de rayos distribuido , el trazado de trayectorias es un tipo de trazado de rayos aleatorio o estocástico que utiliza la integración de Monte Carlo o cuasi-Monte Carlo . Fue propuesto y nombrado en 1986 por Jim Kajiya en el mismo artículo que la ecuación de renderizado . Kajiya observó que gran parte de la complejidad del trazado de rayos distribuido podría evitarse trazando solo una única trayectoria desde la cámara a la vez (en la implementación de Kajiya, esta regla de "sin ramificación" se rompió al rastrear rayos adicionales desde cada punto de intersección de la superficie hasta puntos elegidos aleatoriamente en cada fuente de luz). Kajiya sugirió reducir el ruido presente en las imágenes de salida mediante el uso de muestreo estratificado y muestreo de importancia para tomar decisiones aleatorias, como elegir qué rayo seguir en cada paso de una trayectoria. Incluso con estas técnicas, el trazado de trayectorias no habría sido práctico para la renderización de películas, utilizando las computadoras disponibles en ese momento, porque el costo computacional de generar suficientes muestras para reducir la varianza a un nivel aceptable era demasiado alto. Monster House , el primer largometraje renderizado íntegramente mediante trazado de trayectorias, no se estrenó hasta 20 años después. [25] [44] [46]

En su forma básica, el rastreo de trayectorias es ineficiente (requiere demasiadas muestras) para renderizar cáusticos y escenas donde la luz entra indirectamente a través de espacios estrechos. Se hicieron intentos para abordar estas debilidades en la década de 1990. El rastreo de trayectorias bidireccional incorpora el mapeo de fotones , rastreando rayos tanto de la fuente de luz como de la cámara y emparejando aleatoriamente estas trayectorias. El transporte de luz Metropolis muestrea trayectorias modificando trayectorias que se rastrearon previamente, dedicando más tiempo a explorar trayectorias que son similares a otras trayectorias "brillantes", lo que aumenta la posibilidad de descubrir trayectorias aún más brillantes. El muestreo de importancia múltiple proporciona una forma de reducir la varianza al combinar muestras de más de un método de muestreo, particularmente cuando algunas muestras son mucho más ruidosas que otras. [44] [47]

Este trabajo posterior fue resumido y ampliado en la tesis doctoral de Eric Veach de 1997, que ayudó a aumentar el interés en el trazado de rutas en la comunidad de gráficos por computadora. El renderizador Arnold , lanzado por primera vez en 1998, demostró que el trazado de rutas era práctico para renderizar fotogramas para películas y que existía una demanda de renderización imparcial y basada en la física en la industria cinematográfica; comenzaron a aparecer otros renderizadores de trazado de rutas comerciales y de código abierto. El costo computacional se abordó con rápidos avances en el rendimiento de la CPU y el clúster . [44]

La relativa simplicidad del trazado de rutas y su naturaleza como un método de Monte Carlo (muestreo de cientos o miles de rutas por píxel) lo han hecho atractivo para implementar en una GPU , especialmente en GPU recientes que admiten la tecnología de aceleración de trazado de rayos como RTX y OptiX de Nvidia . [48] Sin embargo, el trazado de rutas bidireccional y el transporte de luz Metropolis son más difíciles de implementar de manera eficiente en una GPU. [49] [50]

La investigación para mejorar el rastreo de trayectorias continúa. Los enfoques recientes de guía de trayectorias construyen aproximaciones de la distribución de probabilidad del campo de luz en cada volumen del espacio, de modo que las trayectorias se puedan muestrear de manera más efectiva. [51] Se han desarrollado muchas técnicas para eliminar el ruido de la salida del rastreo de trayectorias, reduciendo el número de trayectorias necesarias para lograr una calidad aceptable, con el riesgo de perder algún detalle o introducir artefactos de pequeña escala que son más objetables que el ruido; [52] [53] las redes neuronales se utilizan ahora ampliamente para este propósito. [54] [55] [56]

Representación neuronal

La representación neuronal es un método de representación que utiliza redes neuronales artificiales . [57] [58] La representación neuronal incluye métodos de representación basados ​​en imágenes que se utilizan para reconstruir modelos 3D a partir de imágenes bidimensionales. [57] Uno de estos métodos es la fotogrametría , que es un método en el que una colección de imágenes desde múltiples ángulos de un objeto se convierten en un modelo 3D. También ha habido desarrollos recientes en la generación y representación de modelos 3D a partir de texto y pinturas gruesas por parte de Nvidia , Google y varias otras empresas.

Base científica y matemática

La implementación de un renderizador realista siempre tiene algún elemento básico de simulación o emulación física: algún cálculo que se asemeja o abstrae un proceso físico real.

El término " basado físicamente " indica el uso de modelos físicos y aproximaciones que son más generales y ampliamente aceptados fuera del ámbito de la renderización. Un conjunto particular de técnicas relacionadas se han ido estableciendo gradualmente en la comunidad de renderización.

Los conceptos básicos son relativamente sencillos, pero difíciles de calcular; y no se ha logrado encontrar un único algoritmo o enfoque elegante para los renderizadores de uso más general. Para satisfacer las demandas de solidez, precisión y practicidad, una implementación será una combinación compleja de diferentes técnicas.

La investigación sobre renderizado se ocupa tanto de la adaptación de modelos científicos como de su aplicación eficiente.

Las matemáticas utilizadas en la representación incluyen: álgebra lineal , cálculo , matemáticas numéricas , procesamiento de señales y métodos de Monte Carlo .

La ecuación de renderizado

Este es el concepto académico/teórico clave en el campo de la representación. Sirve como la expresión formal más abstracta del aspecto no perceptual de la representación. Todos los algoritmos más completos pueden considerarse soluciones a formulaciones particulares de esta ecuación.

Significado: en una posición y dirección determinadas, la luz saliente (L o ) es la suma de la luz emitida (L e ) y la luz reflejada. La luz reflejada es la suma de la luz entrante (L i ) de todas las direcciones, multiplicada por la reflexión de la superficie y el ángulo de entrada. Al conectar la luz saliente con la luz entrante, a través de un punto de interacción, esta ecuación representa todo el "transporte de luz" (todo el movimiento de la luz) en una escena.

La función de distribución de reflectancia bidireccional

La función de distribución de reflectancia bidireccional (BRDF) expresa un modelo simple de interacción de la luz con una superficie de la siguiente manera:

La interacción de la luz a menudo se aproxima mediante modelos aún más simples: reflexión difusa y reflexión especular, aunque ambos TAMBIÉN pueden ser BRDF.

Óptica geométrica

La renderización se ocupa prácticamente de manera exclusiva del aspecto de partículas de la física de la luz, conocido como óptica geométrica . Tratar la luz, en su nivel básico, como partículas que rebotan es una simplificación, pero apropiada: los aspectos ondulatorios de la luz son insignificantes en la mayoría de las escenas y son significativamente más difíciles de simular. Los fenómenos notables del aspecto ondulatorio incluyen la difracción (como se ve en los colores de los CD y DVD ) y la polarización (como se ve en las pantallas LCD ). Ambos tipos de efectos, si son necesarios, se realizan mediante un ajuste orientado a la apariencia del modelo de reflexión.

Percepción visual

Aunque recibe menos atención, la comprensión de la percepción visual humana es valiosa para la representación. Esto se debe principalmente a que las pantallas de imágenes y la percepción humana tienen rangos restringidos. Un renderizador puede simular una amplia gama de brillo y color de luz, pero las pantallas actuales (pantalla de cine, monitor de computadora, etc.) no pueden manejar tanto, y algo debe descartarse o comprimirse. La percepción humana también tiene límites, por lo que no es necesario que se le proporcionen imágenes de gran alcance para crear realismo. Esto puede ayudar a resolver el problema de encajar imágenes en las pantallas y, además, sugerir qué atajos se podrían utilizar en la simulación de renderizado, ya que ciertas sutilezas no se notarán. Este tema relacionado es el mapeo de tonos .

Muestreo y filtrado

Un problema que cualquier sistema de renderizado debe afrontar, sin importar el enfoque que adopte, es el problema del muestreo . Básicamente, el proceso de renderizado intenta representar una función continua desde el espacio de la imagen hasta los colores utilizando un número finito de píxeles. Como consecuencia del teorema de muestreo de Nyquist-Shannon (o teorema de Kotelnikov), cualquier forma de onda espacial que se pueda mostrar debe constar de al menos dos píxeles, lo que es proporcional a la resolución de la imagen . En términos más simples, esto expresa la idea de que una imagen no puede mostrar detalles, picos o valles en color o intensidad, que sean más pequeños que un píxel.

Si se utiliza un algoritmo de renderizado ingenuo sin ningún tipo de filtrado, las frecuencias altas en la función de imagen provocarán un efecto de aliasing desagradable en la imagen final. El efecto de aliasing normalmente se manifiesta como bordes irregulares en los objetos donde la cuadrícula de píxeles es visible. Para eliminar el efecto de aliasing, todos los algoritmos de renderizado (si quieren producir imágenes atractivas) deben utilizar algún tipo de filtro de paso bajo en la función de imagen para eliminar las frecuencias altas, un proceso denominado antialiasing .

Hardware

La renderización suele estar limitada por la potencia de procesamiento disponible y el ancho de banda de la memoria , por lo que se ha desarrollado hardware especializado para acelerarla, en particular para la renderización en tiempo real . Se requieren características de hardware como un búfer de cuadros para gráficos rasterizados para mostrar el resultado de la renderización de manera fluida en tiempo real.

Historia

En la era de los monitores vectoriales (también llamados pantallas caligráficas ), una unidad de procesamiento de pantalla (DPU) era una CPU o coprocesador dedicado que mantenía una lista de elementos visuales y los redibujaba continuamente en la pantalla controlando un haz de electrones . Las DPU avanzadas como el Line Drawing System-1 de Evans & Sutherland (y modelos posteriores producidos en la década de 1980) incorporaron funciones de transformación de coordenadas 3D para acelerar la representación de imágenes de estructura alámbrica . [20] : 93–94, 404–421  [59] Evans & Sutherland también fabricó el sistema de proyección de planetario Digistar , que era una pantalla vectorial que podía representar tanto estrellas como gráficos de estructura alámbrica (el Digistar y el Digistar II basados ​​en vectores se usaron en muchos planetarios, y algunos aún pueden estar en funcionamiento). [60] [61] [62] Se utilizó un prototipo de Digistar para renderizar campos de estrellas en 3D para la película Star Trek II: La ira de Khan , algunas de las primeras secuencias de gráficos de computadora en 3D jamás vistas en un largometraje. [63]

En los años 1970 y principios de los 1980, la representación de gráficos 3D sombreados se implementaba generalmente en computadoras de propósito general, como la PDP-10 utilizada por investigadores de la Universidad de Utah [64] [33] . Era difícil acelerar el proceso utilizando hardware especializado porque implica una serie de pasos complejos, que requieren direccionamiento de datos, toma de decisiones y capacidades de cálculo que normalmente solo proporcionan las CPU (aunque se propusieron circuitos dedicados para acelerar operaciones particulares [64] ). A veces se utilizaban supercomputadoras o computadoras o clústeres multi-CPU especialmente diseñados para el trazado de rayos. [36] En 1981, James H. Clark y Marc Hannah diseñaron el Geometry Engine, un chip VLSI para realizar algunos de los pasos del proceso de rasterización 3D, y fundaron la empresa Silicon Graphics (SGI) para comercializar esta tecnología. [65] [66]

Los ordenadores domésticos y las consolas de juegos de la década de 1980 contenían coprocesadores gráficos capaces de desplazarse y rellenar áreas de la pantalla, y dibujar sprites y líneas, aunque no eran útiles para renderizar imágenes realistas. [67] [68] Hacia finales de la década de 1980, empezaron a aparecer tarjetas gráficas para PC y juegos arcade con aceleración de renderizado 3D, y en la década de 1990 dicha tecnología se volvió común. Hoy en día, incluso los procesadores móviles de bajo consumo suelen incorporar funciones de aceleración de gráficos 3D. [65] [69]

GPU

Los aceleradores de gráficos 3D de la década de 1990 evolucionaron hasta convertirse en las GPU modernas. Las GPU son procesadores de propósito general, como las CPU , pero están diseñadas para tareas que se pueden dividir en muchas subtareas pequeñas, similares y en su mayoría independientes (como la representación de píxeles individuales) y realizar en paralelo . Esto significa que una GPU puede acelerar cualquier algoritmo de representación que se pueda dividir en subtareas de esta manera, en contraste con los aceleradores 3D de la década de 1990 que solo se diseñaron para acelerar algoritmos de rasterización específicos y efectos de sombreado e iluminación simples (aunque se podían usar trucos para realizar cálculos más generales). [9] : ch3  [70]

Debido a sus orígenes, las GPU generalmente aún brindan aceleración de hardware especializada para algunos pasos de una tubería de rasterización 3D tradicional , incluida la eliminación de superficies ocultas usando un z-buffer y el mapeo de texturas con mipmaps , pero estas características ya no siempre se usan. [9] : ch3  Las GPU recientes tienen características para acelerar la búsqueda de intersecciones de rayos con una jerarquía de volumen delimitador , para ayudar a acelerar todas las variantes de trazado de rayos y trazado de rutas , [38] así como características de aceleración de redes neuronales a veces útiles para la renderización. [71]

Las GPU suelen estar integradas con sistemas de memoria de gran ancho de banda para soportar los requisitos de ancho de banda de lectura y escritura de la renderización en tiempo real de alta resolución, en particular cuando se requieren múltiples pasadas para renderizar un fotograma; sin embargo, la latencia de la memoria puede ser mayor que en una CPU, lo que puede ser un problema si la ruta crítica en un algoritmo implica muchos accesos a la memoria. El diseño de la GPU acepta la alta latencia como inevitable (en parte porque una gran cantidad de subprocesos comparten el bus de memoria ) e intenta "ocultarla" cambiando de manera eficiente entre subprocesos, de modo que un subproceso diferente pueda realizar cálculos mientras el primer subproceso espera que se complete una lectura o escritura. [9] : ch3  [72] [73]

Los algoritmos de renderizado se ejecutarán de manera eficiente en una GPU solo si se pueden implementar utilizando pequeños grupos de subprocesos que realizan principalmente las mismas operaciones. Como ejemplo de código que cumple con este requisito: al renderizar un pequeño cuadrado de píxeles en una imagen simple con trazado de rayos , es probable que todos los subprocesos intersequen rayos con el mismo objeto y realicen los mismos cálculos de iluminación. Por razones de rendimiento y arquitectura, las GPU ejecutan grupos de alrededor de 16 a 64 subprocesos llamados warps o wavefronts en sincronía (todos los subprocesos del grupo ejecutan las mismas instrucciones al mismo tiempo). Si no todos los subprocesos del grupo necesitan ejecutar bloques de código particulares (debido a las condiciones), algunos subprocesos estarán inactivos o se descartarán los resultados de sus cálculos, lo que provocará una degradación del rendimiento. [9] : ch3  [73]

Cronología de algoritmos y técnicas

A continuación se presenta una cronología aproximada de las técnicas de renderización mencionadas con frecuencia, incluidas las áreas de investigación actuales. Cabe señalar que incluso en los casos en que se mencionó una idea en un artículo específico, casi siempre hubo varios investigadores trabajando en la misma área (incluidos trabajos relacionados anteriores). Cuando se propone un método por primera vez, suele ser muy ineficiente y se necesitan investigaciones adicionales y esfuerzos prácticos para convertirlo en una técnica útil. [24] : 887 

La lista se centra en la investigación académica y no incluye el hardware. (Para obtener más información sobre la historia, consulte #Enlaces externos, así como Gráficos por computadora#Historia y Edad de oro de los videojuegos arcade#Tecnología ).

Véase también

Referencias

  1. ^ "¿Qué es un motor de renderizado? | Diccionario". Archivado desde el original el 21 de febrero de 2024. Consultado el 21 de febrero de 2024 .
  2. ^ abcdef Raghavachary, Saty (2005). Rendering para principiantes . Focal Press. ISBN 0-240-51935-3.
  3. ^ de Adobe Systems Incorporated (1990). Manual de referencia del lenguaje PostScript (2.ª edición). Addison-Wesley Publishing Company. ISBN 0-201-18127-4.
  4. ^ ab «SVG: Scalable Vector Graphics». Mozilla Corporation. 7 de agosto de 2024. Archivado desde el original el 24 de agosto de 2024. Consultado el 31 de agosto de 2024 .
  5. ^ ab Hughes, John F.; Van Dam, Andries ; McGuire, Morgan; Sklar, David F.; Foley, James D. ; Feiner, Steven K.; Akeley, Kurt (2014). Gráficos por computadora: principios y práctica (3.ª ed.). Addison-Wesley. ISBN 978-0-321-39952-6.
  6. ^ ab "Manual de Blender 4.2: Importación y exportación de archivos". docs.blender.org . The Blender Foundation. Archivado desde el original el 31 de agosto de 2024 . Consultado el 31 de agosto de 2024 .
  7. ^ Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (2023). «Formato de archivo de entrada pbrt-v4» . Consultado el 31 de agosto de 2024 .
  8. ^ de Dunlop, Renee (2014). Fundamentos del proceso de producción para películas y videojuegos . Focal Press. ISBN 978-1-315-85827-2.
  9. ^ abcdefghijklmn Akenine-Möller, Tomas; Haines, Eric; Hoffman, Naty; Pesce, Angelo; Iwanicki, Michał; Hillaire, Sébastien (2018). Real-Time Rendering (4.ª ed.). Boca Raton, FL: AK Peters/CRC Press. ISBN 978-1138627000.
  10. ^ "Acerca de OpenVDB". www.openvdb.org . Academy Software Foundation. Archivado desde el original el 3 de septiembre de 2024 . Consultado el 31 de agosto de 2024 .
  11. ^ Museth, Ken (junio de 2013). "VDB: volúmenes dispersos de alta resolución con topología dinámica" (PDF) . ACM Transactions on Graphics . 32 (3). doi :10.1145/2487228.2487235. Archivado (PDF) del original el 15 de abril de 2024. Consultado el 31 de agosto de 2024 .
  12. ^ Bridson, Robert (2015). Simulación de fluidos para gráficos por computadora (2.ª edición). AK Peters/CRC Press. ISBN 978-1-482-23283-7.
  13. ^ Schmid, Katrin (2 de marzo de 2023). "Una breve historia de 170 años de campos de radiación neuronal (NeRF), hologramas y campos de luz". radiancefields.com . Archivado desde el original el 31 de agosto de 2024 . Consultado el 31 de agosto de 2024 .
  14. ^ a b Mildenhall, Ben; Srinivasan, Pratul P.; Tancik, Matthew; Barron, Jonathan T.; Ramamoorthi, Ravi; Ng, Ren (2020). "NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis". Retrieved 31 August 2024.
  15. ^ a b Kerbl, Bernhard; Kopanas, Georgios; Leimkühler, Thomas; Drettakis, George (July 2023). "3D Gaussian Splatting for Real-Time Radiance Field Rendering". ACM Transactions on Graphics. 42 (4): 1–14. arXiv:2308.04079. doi:10.1145/3592433. Archived from the original on 22 August 2024. Retrieved 31 August 2024.
  16. ^ a b Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (2023). "pbrt-v4 User's Guide". Archived from the original on 3 September 2024. Retrieved 31 August 2024.
  17. ^ a b Brinkmann, Ron (2008). The Art and Science of Digital Compositing (2nd ed.). Morgan Kaufmann. ISBN 978-0-12-370638-6.
  18. ^ "Blender 4.2 Manual: Rendering: Render Output: Rendering Animations". docs.blender.org. The Blender Foundation. Archived from the original on 31 August 2024. Retrieved 31 August 2024.
  19. ^ a b c d e f g h Marschner, Steve; Shirley, Peter (2022). Fundamentals of Computer Graphics (5th ed.). CRC Press. ISBN 978-1-003-05033-9.
  20. ^ a b c d e f Foley, James D.; Van Dam, Andries (1982). Fundamentals of Interactive Computer Graphics. Addison-Wesley Publishing Company, Inc. ISBN 0-201-14468-9.
  21. ^ a b c d e f g Haines, Eric; Shirley, Peter (February 25, 2019). "1. Ray Tracing Terminology". Ray Tracing Gems: High-Quality and Real-Time Rendering with DXR and Other APIs. Berkeley, CA: Apress. doi:10.1007/978-1-4842-4427-2. ISBN 978-1-4842-4427-2. S2CID 71144394. Archived from the original on January 27, 2024. Retrieved January 27, 2024.
  22. ^ a b c d e Akenine-Möller, Tomas; Haines, Eric; Hoffman, Naty; Pesce, Angelo; Iwanicki, Michał; Hillaire, Sébastien (August 6, 2018). "Online chapter 26. Real-Time Ray Tracing" (PDF). Real-Time Rendering (4th ed.). Boca Raton, FL: A K Peters/CRC Press. ISBN 978-1138627000. Archived (PDF) from the original on January 27, 2024. Retrieved January 27, 2024.
  23. ^ Cook, Robert L. (April 11, 2019) [1989]. "5. Stochastic Sampling and Distributed Ray Tracing". In Glassner, Andrew S. (ed.). An Introduction to Ray Tracing (PDF). 1.3. ACADEMIC PRESS. ISBN 978-0-12-286160-4. Archived (PDF) from the original on January 27, 2024. Retrieved January 27, 2024.
  24. ^ a b c d e Glassner, Andrew S. (2011) [1995]. Principles of digital image synthesis (PDF). 1.0.1. Morgan Kaufmann Publishers, Inc. ISBN 978-1-55860-276-2. Archived (PDF) from the original on 2024-01-27. Retrieved 2024-01-27.
  25. ^ a b c d Kajiya, James T. (August 1986). "The rendering equation". ACM SIGGRAPH Computer Graphics. 20 (4): 143–150. doi:10.1145/15886.15902. Archived from the original on 3 September 2024. Retrieved 27 January 2024.
  26. ^ Glassner, Andrew S. (April 11, 2019) [1989]. "1. An Overview of Ray Tracing". An Introduction to Ray Tracing (PDF). 1.3. ACADEMIC PRESS. ISBN 978-0-12-286160-4. Archived (PDF) from the original on January 27, 2024. Retrieved January 27, 2024.
  27. ^ "Unity Manual:Light Probes: Introduction". docs.unity3d.com. Archived from the original on 3 September 2024. Retrieved 27 January 2024.
  28. ^ "Blender Manual: Rendering: EEVEE: Light Probes: Introduction". docs.blender.org. The Blender Foundation. Archived from the original on 24 March 2024. Retrieved 27 January 2024.
  29. ^ a b Warnock, John (June 1969), A hidden surface algorithm for computer generated halftone pictures, University of Utah, TR 69-249, retrieved 19 September 2024
  30. ^ a b Bouknight, W. J. (1970). "A procedure for generation of three-dimensional half-tone computer graphics presentations". Communications of the ACM. 13 (9): 527–536. doi:10.1145/362736.362739. S2CID 15941472.
  31. ^ Stamm, Beat (21 June 2018). "The Raster Tragedy at Low-Resolution Revisited: Opportunities and Challenges beyond "Delta-Hinting"". rastertragedy.com. Retrieved 19 September 2024.
  32. ^ a b Watkins, Gary Scott (June 1970), A Real Time Visible Surface Algorithm, University of Utah, retrieved 19 September 2024
  33. ^ a b c d e Catmull, Edwin (December 1974). A Subdivision Algorithm for Computer Display of Curved Surfaces (PDF) (PhD thesis). University of Utah. Retrieved 19 September 2024.
  34. ^ a b Carpenter, Loren (July 1984). "The A-buffer, an antialiased hidden surface method". Computer Graphics. 18 (3): 103–108. doi:10.1145/964965.808585.
  35. ^ a b Cook, Robert L.; Carpenter, Loren; Catmull, Edwin (July 1987). "The Reyes image rendering architecture" (PDF). SIGGRAPH Comput. Graph. 21 (4). Association for Computing Machinery: 95–102. doi:10.1145/37402.37414. ISSN 0097-8930. Archived (PDF) from the original on 2011-07-15. Retrieved 19 September 2024.
  36. ^ a b c Arvo, James; Kirk, David (April 11, 2019) [1989]. "6. A Survey of Ray Tracing Acceleration Techniques". In Glassner, Andrew S. (ed.). An Introduction to Ray Tracing (PDF). 1.3. ACADEMIC PRESS. ISBN 978-0-12-286160-4. Retrieved 13 September 2024.
  37. ^ a b Appel, A. (1968). "Some techniques for shading machine renderings of solids" (PDF). Proceedings of the Spring Joint Computer Conference. Vol. 32. pp. 37–49. Archived (PDF) from the original on 2012-03-13. Retrieved 19 September 2024.
  38. ^ a b Stich, Martin (February 25, 2019). "Foreword". Ray Tracing Gems: High-Quality and Real-Time Rendering with DXR and Other APIs. Berkeley, CA: Apress. doi:10.1007/978-1-4842-4427-2. ISBN 978-1-4842-4427-2. S2CID 71144394. Retrieved 13 September 2024.
  39. ^ Hanrahan, Pat (April 11, 2019) [1989]. "2. A Survey of Ray-Surface Intersection Algorithms". In Glassner, Andrew S. (ed.). An Introduction to Ray Tracing (PDF). 1.3. ACADEMIC PRESS. ISBN 978-0-12-286160-4. Archived (PDF) from the original on January 27, 2024. Retrieved 22 September 2024.
  40. ^ "Relativistic Ray-Tracing: Simulating the Visual Appearance of Rapidly Moving Objects". 1995. CiteSeerX 10.1.1.56.830. {{cite journal}}: Cite journal requires |journal= (help)
  41. ^ Liu, Edward; Llamas, Ignacio; Cañada, Juan; Kelly, Patrick (February 25, 2019). "19: Cinematic Rendering in UE4 with Real-Time Ray Tracing and Denoising". Ray Tracing Gems: High-Quality and Real-Time Rendering with DXR and Other APIs. Berkeley, CA: Apress. doi:10.1007/978-1-4842-4427-2. ISBN 978-1-4842-4427-2. S2CID 71144394. Archived from the original on January 27, 2024. Retrieved January 27, 2024.
  42. ^ Boksansky, Jakub; Wimmer, Michael; Bittner, Jiri (February 25, 2019). "13. Ray Traced Shadows: Maintaining Real-Time Frame Rates". Ray Tracing Gems: High-Quality and Real-Time Rendering with DXR and Other APIs. Berkeley, CA: Apress. doi:10.1007/978-1-4842-4427-2. ISBN 978-1-4842-4427-2. S2CID 71144394. Archived from the original on January 27, 2024. Retrieved January 27, 2024.
  43. ^ "Khronos Blog: Ray Tracing In Vulkan". www.khronos.org. The Khronos® Group Inc. December 15, 2020. Retrieved 27 January 2024.
  44. ^ a b c d e Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (March 28, 2023). "1.6". Physically Based Rendering: From Theory to Implementation (4th ed.). Cambridge, Massachusetts: The MIT Press. ISBN 978-0262048026. Archived from the original on January 27, 2024. Retrieved January 27, 2024.
  45. ^ "Blender Manual: Rendering: Cycles: Introduction". docs.blender.org. The Blender Foundation. Archived from the original on 3 September 2024. Retrieved 27 January 2024.
  46. ^ Kulla, Christopher (30 July 2017), Arnold at Sony Pictures Imageworks: From Monster House to Smurfs: The Lost Village (course slides) (PDF), SIGGRAPH, Los Angeles{{citation}}: CS1 maint: location missing publisher (link)
  47. ^ Veach, Eric (1997). Robust Monte Carlo methods for light transport simulation (PDF) (PhD thesis). Stanford University.
  48. ^ Pharr, Matt; Jakob, Wenzel; Humphreys, Greg (March 28, 2023). "15. Wavefront Rendering on GPUs". Physically Based Rendering: From Theory to Implementation (4th ed.). Cambridge, Massachusetts: The MIT Press. ISBN 978-0262048026. Archived from the original on January 27, 2024. Retrieved January 27, 2024.
  49. ^ Otte, Vilém (2015). Bi-directional Path Tracing on GPU (PDF) (Master thesis). Masaryk University, Brno.
  50. ^ Schmidt, Martin; Lobachev, Oleg; Guthe, Michael (2016). "Coherent Metropolis Light Transport on the GPU using Speculative Mutations" (PDF). Journal of WSCG. 24 (1): 1–8. ISSN 1213-6972.
  51. ^ Pharr, Matt ; Jakob, Wenzel; Humphreys, Greg (28 de marzo de 2023). "13. Lectura adicional: Guía de rutas". Representación basada en la física: de la teoría a la implementación (4.ª ed.). Cambridge, Massachusetts: The MIT Press. ISBN 978-0262048026. Recuperado el 8 de septiembre de 2024 .
  52. ^ Pharr, Matt ; Jakob, Wenzel; Humphreys, Greg (28 de marzo de 2023). "5. Lectura adicional: eliminación de ruido". Renderizado basado en la física: de la teoría a la implementación (4.ª ed.). Cambridge, Massachusetts: The MIT Press. ISBN 978-0262048026Archivado desde el original el 27 de enero de 2024 . Consultado el 27 de enero de 2024 .
  53. ^ "Manual de Blender: Renderizado: Ciclos: Optimización de renderizados: Reducción de ruido". docs.blender.org . The Blender Foundation. Archivado desde el original el 27 de enero de 2024 . Consultado el 27 de enero de 2024 .
  54. ^ "Manual de Blender: Renderizado: Ciclos: Ajustes de renderizado: Muestreo". docs.blender.org . The Blender Foundation. Archivado desde el original el 27 de enero de 2024 . Consultado el 27 de enero de 2024 .
  55. ^ "Intel® Open Image Denoise: biblioteca de eliminación de ruido de alto rendimiento para trazado de rayos". www.openimagedenoise.org . Intel Corporation. Archivado desde el original el 6 de enero de 2024 . Consultado el 27 de enero de 2024 .
  56. ^ "NVIDIA OptiX™ AI-Accelerated Denoiser". developer.nvidia.com . NVIDIA Corporation. Archivado desde el original el 18 de enero de 2024 . Consultado el 27 de enero de 2024 .
  57. ^ ab Tewari, A.; Fried, O.; Thies, J.; Sitzmann, V.; Lombardi, S.; Sunkavalli, K.; Martin-Brualla, R.; Simon, T.; Saragih, J.; Nießner, M.; Pandey, R.; Fanello, S.; Wetzstein, G.; Zhu, J.-Y.; Theobalt, C.; Agrawala, M.; Shechtman, E.; Goldman, DB; Zollhöfer, M. (2020). "Estado del arte en renderizado neuronal". Computer Graphics Forum . 39 (2): 701–727. arXiv : 2004.03805 . doi :10.1111/cgf.14022. S2CID  215416317.
  58. ^ Knight, Will. "Un nuevo truco permite que la inteligencia artificial vea en 3D". Wired . ISSN  1059-1028. Archivado desde el original el 2022-02-07 . Consultado el 2022-02-08 .
  59. ^ Sistema multiimagen Evans & Sutherland (folleto), Evans & Sutherland Corporation, 1979
  60. ^ "Nagoya City Science Museum - Exhibition Guide - Digistar II". www.ncsm.city.nagoya.jp. Nagoya City Science Museum. Retrieved 13 September 2024.
  61. ^ "Evans_and_Sutherland Digistar-II". planetariums-database.org. Worldwide Planetariums Database. Retrieved 13 September 2024.
  62. ^ "Listing of Planetariums using a Evans_and_Sutherland Digistar-II". planetariums-database.org. Worldwide Planetariums Database. Retrieved 13 September 2024.
  63. ^ Smith, Alvy Ray (October 1982). "Special Effects for Star Trek II: The Genesis Demo" (PDF). American Cinematographer: 1038. Retrieved 13 September 2024.
  64. ^ a b Bùi, Tường-Phong (1973). Illumination for Computer-Generated Images (PDF) (PhD thesis). University of Utah.
  65. ^ a b Peddie, Jon (24 September 2020). "Famous Graphics Chips: Geometry Engine". www.computer.org. Institute of Electrical and Electronics Engineers (IEEE). Retrieved 13 September 2024.
  66. ^ Clark, James H. (1980). "Structuring a VLSI System Architecture" (PDF). Lambda (2nd Quarter): 25–30.
  67. ^ Fox, Charles (2024). "11. RETRO ARCHITECTURES: 16-Bit Computer Design with the Commodore Amiga: Understanding the Architecture". Computer Architecture. No Starch Press. ISBN 978-1-7185-0287-1.
  68. ^ "NES Dev Wiki: PPU". www.nesdev.org. nesdev wiki. Retrieved 13 September 2024.
  69. ^ Harold, David (11 August 2017). "PowerVR at 25: The story of a graphics revolution". blog.imaginationtech.com. Imagination Technologies Limited. Retrieved 13 September 2024.
  70. ^ Peercy, Mark S.; Olano, Marc; Airey, John; Ungar, P. Jeffrey (2000). "Interactive Multi-Pass Programmable Shading" (PDF). SIGRAPH 2000: 425-432. Retrieved 13 September 2024.
  71. ^ "NVIDIA DLSS 3". nvidia.com. NVIDIA Corporation. Retrieved 13 September 2024.
  72. ^ Lam, Chester (16 April 2021). "Measuring GPU Memory Latency". chipsandcheese.com. Chips and Cheese. Retrieved 13 September 2024.
  73. ^ a b Gong, Xun; Gong, Xiang; Yu, Leiming; Kaeli, David (March 2019). "HAWS: Accelerating GPU Wavefront Execution through Selective Out-of-order Execution". ACM Trans. Archit. Code Optim. 16 (2). Association for Computing Machinery. doi:10.1145/3291050. Retrieved 15 September 2024.
  74. ^ Warnock, John (20 May 1968), A Hidden Line Algorithm For Halftone Picture Representation (PDF), University of Utah, TR 4-5, retrieved 19 September 2024
  75. ^ Gouraud, H. (1971). "Continuous shading of curved surfaces" (PDF). IEEE Transactions on Computers. 20 (6): 623–629. doi:10.1109/t-c.1971.223313. S2CID 123827991. Archived from the original (PDF) on 2010-07-02.
  76. ^ a b "History | School of Computing". Archived from the original on 2013-12-03. Retrieved 2021-11-22.
  77. ^ a b Phong, B-T (1975). "Illumination for computer generated pictures" (PDF). Communications of the ACM. 18 (6): 311–316. CiteSeerX 10.1.1.330.4718. doi:10.1145/360825.360839. S2CID 1439868. Archived from the original (PDF) on 2012-03-27.
  78. ^ Blinn, J.F.; Newell, M.E. (1976). "Texture and reflection in computer generated images". Communications of the ACM. 19 (10): 542–546. CiteSeerX 10.1.1.87.8903. doi:10.1145/360349.360353. S2CID 408793.
  79. ^ Blinn, James F. (20 July 1977). "Models of light reflection for computer synthesized pictures". ACM SIGGRAPH Computer Graphics. 11 (2): 192–198. doi:10.1145/965141.563893 – via dl.acm.org.
  80. ^ Crow, F.C. (1977). "Shadow algorithms for computer graphics" (PDF). Computer Graphics (Proceedings of SIGGRAPH 1977). Vol. 11. pp. 242–248. Archived from the original (PDF) on 2012-01-13. Retrieved 2011-07-15.
  81. ^ Williams, L. (1978). "Casting curved shadows on curved surfaces". Computer Graphics (Proceedings of SIGGRAPH 1978). Vol. 12. pp. 270–274. CiteSeerX 10.1.1.134.8225.
  82. ^ Blinn, J.F. (1978). Simulation of wrinkled surfaces (PDF). Computer Graphics (Proceedings of SIGGRAPH 1978). Vol. 12. pp. 286–292. Archived (PDF) from the original on 2012-01-21.
  83. ^ Fuchs, H.; Kedem, Z.M.; Naylor, B.F. (1980). On visible surface generation by a priori tree structures. Computer Graphics (Proceedings of SIGGRAPH 1980). Vol. 14. pp. 124–133. CiteSeerX 10.1.1.112.4406.
  84. ^ Whitted, T. (1980). "An improved illumination model for shaded display". Communications of the ACM. 23 (6): 343–349. CiteSeerX 10.1.1.114.7629. doi:10.1145/358876.358882. S2CID 9524504.
  85. ^ Cook, R.L.; Torrance, K.E. (1981). A reflectance model for computer graphics. Computer Graphics (Proceedings of SIGGRAPH 1981). Vol. 15. pp. 307–316. CiteSeerX 10.1.1.88.7796.
  86. ^ Williams, L. (1983). Pyramidal parametrics. Computer Graphics (Proceedings of SIGGRAPH 1983). Vol. 17. pp. 1–11. CiteSeerX 10.1.1.163.6298.
  87. ^ Glassner, A.S. (1984). "Space subdivision for fast ray tracing". IEEE Computer Graphics & Applications. 4 (10): 15–22. doi:10.1109/mcg.1984.6429331. S2CID 16965964.
  88. ^ Porter, T.; Duff, T. (1984). Compositing digital images (PDF). Computer Graphics (Proceedings of SIGGRAPH 1984). Vol. 18. pp. 253–259. Archived (PDF) from the original on 2015-02-16.
  89. ^ Cook, R.L.; Porter, T.; Carpenter, L. (1984). Distributed ray tracing (PDF). Computer Graphics (Proceedings of SIGGRAPH 1984). Vol. 18. pp. 137–145.[permanent dead link]
  90. ^ Goral, C.; Torrance, K.E.; Greenberg, D.P.; Battaile, B. (1984). Modeling the interaction of light between diffuse surfaces. Computer Graphics (Proceedings of SIGGRAPH 1984). Vol. 18. pp. 213–222. CiteSeerX 10.1.1.112.356.
  91. ^ Cohen, M.F.; Greenberg, D.P. (1985). The hemi-cube: a radiosity solution for complex environments (PDF). Computer Graphics (Proceedings of SIGGRAPH 1985). Vol. 19. pp. 31–40. doi:10.1145/325165.325171. Archived from the original (PDF) on 2014-04-24. Retrieved 2020-03-25.
  92. ^ Arvo, J. (1986). Backward ray tracing. SIGGRAPH 1986 Developments in Ray Tracing course notes. CiteSeerX 10.1.1.31.581.
  93. ^ Wu, Xiaolin (July 1991). "An efficient antialiasing technique". ACM SIGGRAPH Computer Graphics. 25 (4): 143–152. doi:10.1145/127719.122734. ISBN 978-0-89791-436-9.
  94. ^ Wu, Xiaolin (1991). "Fast Anti-Aliased Circle Generation". In James Arvo (ed.). Graphics Gems II. San Francisco: Morgan Kaufmann. pp. 446–450. ISBN 978-0-12-064480-3.
  95. ^ Hanrahan, P.; Salzman, D.; Aupperle, L. (1991). A rapid hierarchical radiosity algorithm. Computer Graphics (Proceedings of SIGGRAPH 1991). Vol. 25. pp. 197–206. CiteSeerX 10.1.1.93.5694.
  96. ^ M. Oren and S.K. Nayar, "Generalization of Lambert's Reflectance Model Archived 2010-02-15 at the Wayback Machine". SIGGRAPH. pp.239-246, Jul, 1994
  97. ^ Tumblin, J.; Rushmeier, H.E. (1993). "Tone reproduction for realistic computer generated images" (PDF). IEEE Computer Graphics & Applications. 13 (6): 42–48. doi:10.1109/38.252554. S2CID 6459836. Archived (PDF) from the original on 2011-12-08.
  98. ^ Hanrahan, P.; Krueger, W. (1993). Reflection from layered surfaces due to subsurface scattering. Computer Graphics (Proceedings of SIGGRAPH 1993). Vol. 27. pp. 165–174. CiteSeerX 10.1.1.57.9761.
  99. ^ Lafortune, Eric; Willems, Yves (December 1993). "Bi-directional path tracing" (PDF). Proceedings of Third International Conference on Computational Graphics and Visualization Techniques (CompuGraphics). pp. 145–153. Archived (PDF) from the original on 21 May 2022. Retrieved 2 September 2024.
  100. ^ Miller, Gavin (24 July 1994). "Efficient algorithms for local and global accessibility shading". Proceedings of the 21st annual conference on Computer graphics and interactive techniques - SIGGRAPH '94. ACM. pp. 319–326. doi:10.1145/192161.192244. ISBN 978-0897916677. S2CID 15271113. Archived from the original on 22 November 2021. Retrieved 7 May 2018 – via dl.acm.org.
  101. ^ Jensen, H.W.; Christensen, N.J. (1995). "Photon maps in bidirectional monte carlo ray tracing of complex objects". Computers & Graphics. 19 (2): 215–224. CiteSeerX 10.1.1.97.2724. doi:10.1016/0097-8493(94)00145-o.
  102. ^ Veach, Eric; Guibas, Leonidas J. (15 September 1995). "Optimally combining sampling techniques for Monte Carlo rendering". SIGGRAPH95: 22nd International ACM Conference on Computer Graphics and Interactive Techniques. pp. 419–428. doi:10.1145/218380.218498. Archived from the original on 26 July 2024. Retrieved 2 September 2024.
  103. ^ Veach, E.; Guibas, L. (1997). Metropolis light transport. Computer Graphics (Proceedings of SIGGRAPH 1997). Vol. 16. pp. 65–76. CiteSeerX 10.1.1.88.944.
  104. ^ Veach, E.; Guibas, L. (1997). Metropolis light transport. Computer Graphics (Proceedings of SIGGRAPH 1997). Vol. 16. pp. 65–76. CiteSeerX 10.1.1.88.944.
  105. ^ Keller, A. (1997). Instant Radiosity. Computer Graphics (Proceedings of SIGGRAPH 1997). Vol. 24. pp. 49–56. CiteSeerX 10.1.1.15.240.
  106. ^ Sloan, P.; Kautz, J.; Snyder, J. (2002). Precomputed Radiance Transfer for Real-Time Rendering in Dynamic, Low Frequency Lighting Environments (PDF). Computer Graphics (Proceedings of SIGGRAPH 2002). Vol. 29. pp. 527–536. Archived from the original (PDF) on 2011-07-24.
  107. ^ Loper, Matthew M; Black, Michael J (6 September 2014). "OpenDR: An approximate differentiable renderer" (PDF). Computer Vision - ECCV 2014. Vol. 8695. Zurich, Switzerland: Springer International Publishing. pp. 154–169. doi:10.1007/978-3-319-10584-0_11. Archived (PDF) from the original on 24 June 2024. Retrieved 2 September 2024.
  108. ^ Müller, Thomas; Gross, Markus; Novák, Jan (June 2017). "Practical Path Guiding for Efficient Light-Transport Simulation". Computer Graphics Forum (Proceedings of EGSR). 36 (4). The Eurographs Association & John Wiley & Sons, Ltd.: 91–100. doi:10.1111/cgf.13227. Retrieved 4 September 2024.
  109. ^ Bitterli, Benedikt; Wyman, Chris; Pharr, Matt; Shirley, Peter; Lefohn, Aaron; Jarosz, Wojciech (July 2020). "Spatiotemporal reservoir resampling for real-time ray tracing with dynamic direct lighting". ACM Transactions on Graphics (Proceedings of SIGGRAPH). 39 (4). doi:10.1145/3386569.3392481. Archived from the original on 1 March 2024. Retrieved 2 September 2024.

Further reading

External links