En los gráficos por computadora en 3D , el trazado de rayos es una técnica de renderizado para generar una imagen trazando la trayectoria de la luz como píxeles en un plano de la imagen y simulando los efectos de sus encuentros con objetos virtuales. La técnica es capaz de producir un alto grado de realismo visual, más que los métodos típicos de renderizado de líneas de exploración , [ cita requerida ] pero a un mayor costo computacional. Esto hace que el trazado de rayos sea más adecuado para aplicaciones en las que se puede tolerar un tiempo relativamente largo para renderizar, como imágenes fijas generadas por computadora y efectos visuales de cine y televisión (VFX), pero generalmente menos adecuado para aplicaciones en tiempo real como como videojuegos , donde la velocidad es fundamental para renderizar cada cuadro . [1] Sin embargo, en los últimos años, la aceleración de hardware para el trazado de rayos en tiempo real se ha convertido en estándar en las nuevas tarjetas gráficas comerciales, y las API de gráficos han seguido su ejemplo, lo que permite a los desarrolladores agregar técnicas de trazado de rayos en tiempo real a los juegos y otras aplicaciones en tiempo real. medios renderizados con un impacto menor, aunque sustancial, en los tiempos de renderizado del fotograma.
El trazado de rayos es capaz de simular una variedad de efectos ópticos , como la reflexión y la refracción , la dispersión y los fenómenos de dispersión (como la aberración cromática ). También se puede utilizar para rastrear la trayectoria de las ondas sonoras de manera similar a las ondas de luz, lo que la convierte en una opción viable para un diseño de sonido más envolvente en videojuegos al generar ecos y reverberaciones realistas . [2] De hecho, con estas técnicas se puede simular cualquier fenómeno físico de onda o partícula con movimiento aproximadamente lineal. [ cita requerida ]
El trazado de ruta es una forma de trazado de rayos que puede producir sombras suaves, profundidad de campo , desenfoque de movimiento , cáusticos , oclusión ambiental e iluminación indirecta. [3] El trazado de la trayectoria es un método de representación imparcial , pero se debe trazar una gran cantidad de rayos para obtener imágenes de referencia de alta calidad sin artefactos ruidosos.
El trazado de rayos híbrido es una combinación de trazado de rayos y rasterización . [4] [5]
Historia
La idea del trazado de rayos se remonta al siglo XVI cuando fue descrito por Alberto Durero , a quien se le atribuye su invención. [6] En Cuatro libros sobre medidas , describió un aparato llamado puerta de Durero que usa un hilo sujeto al extremo de un lápiz que un asistente mueve a lo largo de los contornos del objeto para dibujar. El hilo pasa a través del marco de la puerta y luego a través de un gancho en la pared. El hilo forma un rayo y el gancho actúa como centro de proyección y corresponde a la posición de la cámara en el trazado de rayos. [7] [8]
La historia del trazado de rayos computarizado para la representación de imágenes básicamente rastrea el desarrollo del hardware de computadora. Los primeros sistemas estaban basados en lotes (tarjetas perforadas de computadora o cinta) que se ejecutaban en computadoras relativamente lentas con memoria central. Ahora, las GPU ( unidades de procesamiento de gráficos ) admiten el trazado de rayos para un mayor realismo en los juegos de computadora en 3D de ritmo rápido.
Goldstein y Nagel de MAGI (Mathematics Applications Group, Inc.) intentaron por primera vez usar una computadora para el trazado de rayos para generar imágenes sombreadas. [9] Su trabajo cita un trabajo anterior para la "simulación visual de objetos tridimensionales" de Arthur Appel [10] que "emplea 'invisibilidad cuantitativa' para eliminar líneas ocultas, y un programa adicional para producir una salida en escala de grises", por lo que no es realmente "trazado de rayos". En el artículo de Goldsein y Nagel, “Simulación visual 3-D”, el trazado de rayos se usa para hacer imágenes sombreadas de sólidos simulando el proceso fotográfico al revés. Para cada elemento de la imagen (píxel) en la pantalla, proyectan un rayo de luz a través de él en la escena para identificar la superficie visible. La superficie cruzada por el rayo, encontrada al “trazar” a lo largo de ella, era la visible. En el punto de intersección de la superficie del rayo encontrado, calcularon la normal de la superficie y, conociendo la posición de la fuente de luz, calcularon el brillo del píxel en la pantalla. Su publicación describe una película corta (30 segundos) “realizada con el hardware de pantalla de la Universidad de Maryland equipado con una cámara de 16 mm. La película mostraba el helicóptero y un simple emplazamiento de armas a nivel del suelo. El helicóptero fue programado para someterse a una serie de maniobras que incluyen giros, despegues y aterrizajes, etc., hasta que finalmente es derribado y se estrella ”. Se utilizó una computadora CDC 6600 .
Ampliando aún más este método, MAGI desarrolló un sistema CAD / CAM comercial llamado SynthaVision que creaba imágenes sombreadas y dibujos de líneas, calculaba las propiedades de masa y verificaba la no interferencia en las operaciones de mecanizado N / C. Desafortunadamente, debido a la potencia de procesamiento de la computadora en ese momento, era un sistema por lotes costoso. MAGI produjo un video de animación llamado MAGI / SynthaVision Sampler en 1974. [11]
En 1976, Scott Roth creó una animación de libro animado en el curso de gráficos por computadora de Bob Sproull en Caltech usando trazado de rayos con un modelo simple de cámara estenopeica . Las páginas escaneadas se muestran como un video a la derecha. El programa de computadora de Roth notó un punto de borde en la ubicación de un píxel si el rayo se cruzaba con un plano delimitado diferente al de sus vecinos. Por supuesto, un rayo podría intersecar varios planos en el espacio, pero solo se observó como visible el punto de la superficie más cercano a la cámara. Los bordes son irregulares porque solo una resolución aproximada era práctica con la potencia de cálculo del DEC PDP-10 de tiempo compartido utilizado. El "terminal" era una pantalla de tubo de almacenamiento Tektronix para texto y gráficos. Junto a la pantalla había una impresora que crearía una imagen de la pantalla en papel térmico [enrollado]. (Aunque se podría haber calculado una superficie normal en cada intersección de la superficie del rayo para la representación en escala de grises, los píxeles de la pantalla eran solo binarios: verde o negro). Roth amplió el marco, introduciendo el término fundición de rayos en el contexto de gráficos por computadora y modelado sólido .
Roth acuñó el término " fundición de rayos " antes de escuchar "trazado de rayos"; sin embargo, ambos términos describen el mismo concepto. Su desarrollo de fundición de rayos [12] en GM Research Labs ocurrió al mismo tiempo que el trabajo de trazado de rayos de Turner Whitted en Bell Labs. . [13] Para cada píxel de la imagen, se proyecta un rayo en la escena, se identifica la superficie visible, se calcula la superficie normal en el punto visible y se calcula la intensidad de la luz visible. Para modelar sombras, transparencias y especularidad general (p. Ej., espejos), se emiten rayos adicionales.
Whitted produjo una película con trazado de rayos llamada Compleat Angler [14] en 1979 mientras era ingeniero en Bell Labs. Modeló la refracción de las transparencias en el video generando un rayo secundario desde el punto de la superficie visible en un ángulo determinado por el índice de refracción del sólido. Luego, el rayo secundario se procesa como un rayo especular.
Hasta 2013, la iluminación global a gran escala en las principales películas que utilizan imágenes generadas por computadora se falsificaba con iluminación adicional. La película Monsters University de Pixar de 2013 fue la primera película animada en utilizar el trazado de rayos para toda la iluminación y el sombreado. [15]
Descripción general del algoritmo
El trazado de rayos ópticos describe un método para producir imágenes visuales construidas en entornos de gráficos por computadora en 3D , con más fotorrealismo que las técnicas de proyección de rayos o de reproducción de líneas de exploración . Funciona trazando un camino desde un ojo imaginario a través de cada píxel en una pantalla virtual y calculando el color del objeto visible a través de él.
Las escenas en el trazado de rayos son descritas matemáticamente por un programador o por un artista visual (normalmente utilizando herramientas intermedias). Las escenas también pueden incorporar datos de imágenes y modelos capturados por medios como la fotografía digital.
Por lo general, cada rayo debe probarse para la intersección con algún subconjunto de todos los objetos de la escena. Una vez que se ha identificado el objeto más cercano, el algoritmo estimará la luz entrante en el punto de intersección, examinará las propiedades del material del objeto y combinará esta información para calcular el color final del píxel. Ciertos algoritmos de iluminación y materiales reflectantes o translúcidos pueden requerir que se vuelvan a proyectar más rayos en la escena.
Al principio puede parecer contradictorio o "hacia atrás" enviar rayos lejos de la cámara, en lugar de dentro de ella (como lo hace la luz real en la realidad), pero hacerlo es mucho más eficiente en muchos órdenes de magnitud. Dado que la inmensa mayoría de los rayos de luz de una fuente de luz determinada no llegan directamente al ojo del espectador, una simulación "hacia adelante" podría desperdiciar una enorme cantidad de cálculos en trayectorias de luz que nunca se registran.
Por lo tanto, el atajo tomado en el trazado de rayos es presuponer que un rayo dado interseca el marco de la vista. Después de un número máximo de reflejos o de que un rayo viaje una cierta distancia sin intersección, el rayo deja de viajar y se actualiza el valor del píxel.
Calcular rayos para ventana gráfica rectangular
En la entrada tenemos (en el cálculo usamos la normalización vectorial y el producto cruzado ):
- posición de los ojos
- posición de objetivo
- campo de visión - para los humanos, podemos asumir
- número de píxeles cuadrados en la dirección vertical y horizontal de la ventana gráfica
- número de píxeles reales
- vector vertical que indica dónde está arriba y abajo, generalmente (no visible en la imagen): componente de rollo que determina la rotación de la ventana gráfica alrededor del punto C (donde el eje de rotación es la sección ET)
La idea es encontrar la posición de cada centro de píxeles de la ventana gráfica. lo que nos permite encontrar la línea que va del ojo a través de ese píxel y finalmente obtener el rayo descrito por el punto y vector (o su normalización ). Primero tenemos que encontrar las coordenadas del píxel de la ventana inferior izquierda y encuentre el siguiente píxel haciendo un cambio a lo largo de direcciones paralelas a la ventana gráfica (vectores I ) multiplicado por el tamaño del píxel. A continuación presentamos fórmulas que incluyen la distanciaentre el ojo y la ventana gráfica. Sin embargo, este valor se reducirá durante la normalización de rayos. (así que también podrías aceptar que y eliminarlo de los cálculos).
Cálculos previos: busquemos y normalicemos el vector y vectores que son paralelas a la ventana gráfica (todas representadas en la imagen de arriba)
tenga en cuenta que el centro de la ventana gráfica , luego calculamos los tamaños de las ventanas gráficas dividido por 2, incluida la relación de aspecto
y luego calculamos los vectores de desplazamiento del siguiente píxel a lo largo de direcciones paralelas a la ventana gráfica () y el centro de píxeles inferior izquierdo
Cálculos: nota y ray entonces
La fórmula anterior se probó en este proyecto de JavaScript (funciona en el navegador).
Descripción detallada del algoritmo informático de trazado de rayos y su génesis
Qué sucede en la naturaleza (simplificada)
En la naturaleza, una fuente de luz emite un rayo de luz que viaja, eventualmente, a una superficie que interrumpe su progreso. Uno puede pensar en este "rayo" como una corriente de fotones viajando por el mismo camino. En un vacío perfecto, este rayo será una línea recta (ignorando los efectos relativistas ). Con este rayo de luz puede suceder cualquier combinación de cuatro cosas: absorción , reflexión , refracción y fluorescencia . Una superficie puede absorber parte del rayo de luz, resultando en una pérdida de intensidad de la luz reflejada y / o refractada. También puede reflejar todo o parte del rayo de luz, en una o más direcciones. Si la superficie tiene propiedades transparentes o translúcidas , refracta una parte del haz de luz en sí misma en una dirección diferente mientras absorbe parte (o todo) del espectro (y posiblemente altera el color). Con menos frecuencia, una superficie puede absorber una parte de la luz y volver a emitir la luz de forma fluorescente en un color de longitud de onda más larga en una dirección aleatoria, aunque esto es lo suficientemente raro como para descartarlo en la mayoría de las aplicaciones de renderizado. Entre la absorción, la reflexión, la refracción y la fluorescencia, se debe tener en cuenta toda la luz entrante, y nada más. Una superficie no puede, por ejemplo, reflejar el 66% de un rayo de luz entrante y refractarse el 50%, ya que los dos sumarían 116%. Desde aquí, los rayos reflejados y / o refractados pueden incidir en otras superficies, donde sus propiedades absorbentes, refractivas, reflectantes y fluorescentes afectan nuevamente el progreso de los rayos entrantes. Algunos de estos rayos viajan de tal manera que impactan en nuestro ojo, haciéndonos ver la escena y así contribuir a la imagen renderizada final.
Algoritmo de lanzamiento de rayos
La idea detrás del lanzamiento de rayos, el predecesor del trazado de rayos recursivo, es rastrear los rayos del ojo, uno por píxel, y encontrar el objeto más cercano que bloquea el camino de ese rayo. Piense en una imagen como una puerta mosquitera, en la que cada cuadrado de la pantalla es un píxel. Este es el objeto que el ojo ve a través de ese píxel. Usando las propiedades del material y el efecto de las luces en la escena, este algoritmo puede determinar el sombreado de este objeto. Se hace la suposición simplificadora de que si una superficie se enfrenta a una luz, la luz llegará a esa superficie y no se bloqueará ni quedará en la sombra. El sombreado de la superficie se calcula utilizando modelos tradicionales de sombreado de gráficos 3D por computadora. Una ventaja importante que ofrecía la fundición de rayos sobre los algoritmos de línea de exploración más antiguos era su capacidad para tratar fácilmente superficies y sólidos no planos, como conos y esferas . Si una superficie matemática puede ser intersecada por un rayo, se puede renderizar usando fundición de rayos. Los objetos elaborados se pueden crear utilizando técnicas de modelado sólido y se pueden renderizar fácilmente.
Algoritmo de trazado de rayos recursivo
Los algoritmos anteriores trazaban rayos desde el ojo hasta la escena hasta que golpeaban un objeto, pero determinaban el color del rayo sin trazar más rayos de forma recursiva. El trazado de rayos recursivo continúa el proceso. Cuando un rayo golpea una superficie, se pueden emitir rayos adicionales debido a la reflexión, la refracción y la sombra: [16]
- Se traza un rayo de reflexión en la dirección del reflejo del espejo. El objeto más cercano que intersecta es el que se verá en el reflejo.
- Un rayo de refracción que viaja a través de un material transparente funciona de manera similar, con la adición de que un rayo de refracción podría estar entrando o saliendo de un material. Turner Whitted amplió la lógica matemática de los rayos que atraviesan un sólido transparente para incluir los efectos de la refracción. [17]
- Se traza un rayo de sombra hacia cada luz. Si se encuentra algún objeto opaco entre la superficie y la luz, la superficie está en sombra y la luz no la ilumina.
Estos rayos recursivos añaden más realismo a las imágenes con trazado de rayos.
Ventajas sobre otros métodos de renderizado
La popularidad del renderizado basado en trazado de rayos se debe a su base en una simulación realista del transporte de luz , en comparación con otros métodos de renderizado, como la rasterización , que se centra más en la simulación realista de geometría. Los efectos como reflejos y sombras , que son difíciles de simular con otros algoritmos, son un resultado natural del algoritmo de trazado de rayos. La independencia computacional de cada rayo hace que el trazado de rayos sea adecuado para un nivel básico de paralelización , [18] [19] pero la divergencia de las trayectorias de los rayos hace que la alta utilización bajo paralelismo sea bastante difícil de lograr en la práctica. [20]
Desventajas
Una seria desventaja del trazado de rayos es el rendimiento (aunque, en teoría, puede ser más rápido que el renderizado de línea de exploración tradicional dependiendo de la complejidad de la escena frente al número de píxeles en pantalla). Hasta finales de la década de 2010, el trazado de rayos en tiempo real generalmente se consideraba imposible en el hardware del consumidor para tareas no triviales. Los algoritmos de línea de exploración y otros algoritmos utilizan la coherencia de datos para compartir cálculos entre píxeles, mientras que el trazado de rayos normalmente inicia el proceso de nuevo, tratando cada rayo ocular por separado. Sin embargo, esta separación ofrece otras ventajas, como la capacidad de disparar más rayos según sea necesario para realizar un suavizado espacial y mejorar la calidad de la imagen donde sea necesario.
Aunque maneja la interreflexión y los efectos ópticos como la refracción con precisión, el trazado de rayos tradicional tampoco es necesariamente fotorrealista . El verdadero fotorrealismo se produce cuando la ecuación de renderizado se aproxima mucho o se implementa por completo. La implementación de la ecuación de renderizado da un verdadero fotorrealismo, ya que la ecuación describe cada efecto físico del flujo de luz. Sin embargo, esto normalmente no es factible dados los recursos informáticos necesarios.
El realismo de todos los métodos de renderizado se puede evaluar como una aproximación a la ecuación. El trazado de rayos, si se limita al algoritmo de Whitted, no es necesariamente el más realista. Los métodos que trazan los rayos, pero incluyen técnicas adicionales ( mapeo de fotones , trazado de rutas ), brindan una simulación mucho más precisa de la iluminación del mundo real.
Dirección invertida de recorrido de la escena por los rayos.
El proceso de disparar rayos desde el ojo a la fuente de luz para representar una imagen a veces se denomina trazado de rayos hacia atrás , ya que es la dirección opuesta a la que viajan los fotones. Sin embargo, existe confusión con esta terminología. El trazado de rayos temprano siempre se hacía desde el ojo, y los primeros investigadores como James Arvo utilizaron el término trazado de rayos hacia atrás para referirse a disparar rayos desde las luces y recopilar los resultados. Por lo tanto, es más claro distinguir el trazado de rayos basado en los ojos del basado en la luz .
Si bien la iluminación directa generalmente se muestrea mejor utilizando el trazado de rayos basado en los ojos, ciertos efectos indirectos pueden beneficiarse de los rayos generados por las luces. Las cáusticas son patrones brillantes causados por el enfoque de la luz de una amplia región reflectante en un área estrecha de superficie (casi) difusa. Un algoritmo que arroja rayos directamente desde las luces sobre objetos reflectantes, trazando sus trayectorias hasta el ojo, muestreará mejor este fenómeno. Esta integración de rayos basados en ojos y rayos basados en luz a menudo se expresa como trazado de trayectoria bidireccional, en el que las trayectorias se trazan tanto desde el ojo como desde las luces, y las trayectorias posteriormente unidas por un rayo de conexión después de cierta longitud. [21] [22]
El mapeo de fotones es otro método que utiliza el trazado de rayos basado en la luz y en los ojos; en una pasada inicial, se trazan fotones energéticos a lo largo de los rayos de la fuente de luz para calcular una estimación del flujo radiante en función del espacio tridimensional (el mapa de fotones del mismo nombre). En una pasada posterior, los rayos se rastrean desde el ojo hasta la escena para determinar las superficies visibles, y el mapa de fotones se utiliza para estimar la iluminación en los puntos de la superficie visible. [23] [24] La ventaja del mapeo de fotones frente al trazado de ruta bidireccional es la capacidad de lograr una reutilización significativa de fotones, reduciendo el cálculo, a costa del sesgo estadístico.
Un problema adicional ocurre cuando la luz debe pasar a través de una apertura muy estrecha para iluminar la escena (considere una habitación oscura, con una puerta entreabierta que conduce a una habitación muy iluminada), o una escena en la que la mayoría de los puntos no tienen una línea de visión directa. -mira a cualquier fuente de luz (por ejemplo, con luminarias dirigidas al techo o antorchas ). En tales casos, solo un subconjunto muy pequeño de trayectos transportará energía; El transporte ligero de Metropolis es un método que comienza con una búsqueda aleatoria del espacio del camino, y cuando se encuentran caminos energéticos, reutiliza esta información explorando el espacio cercano de los rayos. [25]
A la derecha hay una imagen que muestra un ejemplo simple de una trayectoria de rayos generados de forma recursiva desde la cámara (o el ojo) hasta la fuente de luz utilizando el algoritmo anterior. Una superficie difusa refleja la luz en todas direcciones.
Primero, se crea un rayo en un punto de vista y se traza a través de un píxel hasta la escena, donde golpea una superficie difusa. A partir de esa superficie, el algoritmo genera de forma recursiva un rayo de reflexión, que se traza a través de la escena, donde golpea otra superficie difusa. Finalmente, se genera otro rayo de reflexión y se traza a través de la escena, donde golpea la fuente de luz y es absorbido. El color del píxel ahora depende de los colores de la primera y segunda superficie difusa y del color de la luz emitida por la fuente de luz. Por ejemplo, si la fuente de luz emitió luz blanca y las dos superficies difusas eran azules, entonces el color resultante del píxel es azul.
Ejemplo
Como demostración de los principios involucrados en el trazado de rayos, considere cómo se encontraría la intersección entre un rayo y una esfera. Esta es simplemente la matemática detrás de la intersección línea-esfera y la posterior determinación del color del píxel que se calcula. Por supuesto, hay mucho más en el proceso general de trazado de rayos, pero esto demuestra un ejemplo de los algoritmos utilizados.
En notación vectorial , la ecuación de una esfera con centro y radio es
Cualquier punto de un rayo a partir del punto con direccion (aquí es un vector unitario ) se puede escribir como
dónde es su distancia entre y . En nuestro problema, sabemos, , (por ejemplo, la posición de una fuente de luz) y y tenemos que encontrar . Por lo tanto, sustituimos:
Dejar por simplicidad; luego
Saber que d es un vector unitario nos permite esta pequeña simplificación:
Esta ecuación cuadrática tiene soluciones
Los dos valores de que se encuentran resolviendo esta ecuación son las dos tales que son los puntos donde el rayo se cruza con la esfera.
Cualquier valor que sea negativo no se encuentra en el rayo, sino en la media línea opuesta (es decir, el que comienza desde con dirección opuesta).
Si la cantidad debajo de la raíz cuadrada (el discriminante ) es negativa, entonces el rayo no cruza la esfera.
Supongamos ahora que hay al menos una solución positiva, y supongamos ser el mínimo. Además, supongamos que la esfera es el objeto más cercano en nuestra escena que cruza nuestro rayo, y que está hecha de un material reflectante. Necesitamos encontrar en qué dirección se refleja el rayo de luz. Las leyes de la reflexión establecen que el ángulo de reflexión es igual y opuesto al ángulo de incidencia entre el rayo incidente y la normal a la esfera.
Lo normal a la esfera es simplemente
dónde es el punto de intersección encontrado antes. La dirección de la reflexión se puede encontrar mediante una reflexión de con respecto a , es decir
Así, el rayo reflejado tiene la ecuación
Ahora solo necesitamos calcular la intersección de este último rayo con nuestro campo de visión , para obtener el píxel que impactará nuestro rayo de luz reflejado. Por último, este píxel se establece en un color apropiado, teniendo en cuenta cómo el color de la fuente de luz original y el de la esfera se combinan por el reflejo.
Control de profundidad adaptativo
El control de profundidad adaptativo significa que el renderizador deja de generar rayos reflejados / transmitidos cuando la intensidad calculada es menor que un cierto umbral. Siempre debe haber una profundidad máxima establecida o de lo contrario el programa generaría un número infinito de rayos. Pero no siempre es necesario ir a la profundidad máxima si las superficies no son muy reflectantes. Para probar esto, el trazador de rayos debe calcular y mantener el producto de los coeficientes global y de reflexión a medida que se trazan los rayos.
Ejemplo: sea Kr = 0.5 para un conjunto de superficies. Luego de la primera superficie la contribución máxima es 0.5, para la reflexión de la segunda: 0.5 × 0.5 = 0.25, la tercera: 0.25 × 0.5 = 0.125, la cuarta: 0.125 × 0.5 = 0.0625, la quinta: 0.0625 × 0.5 = 0.03125 , etc. Además, podríamos implementar un factor de atenuación de distancia como 1 / D2, que también disminuiría la contribución de intensidad.
Para un rayo transmitido podríamos hacer algo similar, pero en ese caso la distancia recorrida a través del objeto causaría una disminución de la intensidad aún más rápida. Como ejemplo de esto, Hall & Greenberg encontraron que incluso para una escena muy reflectante, usar esto con una profundidad máxima de 15 resultó en una profundidad promedio de árbol de rayos de 1.7. [26]
Límites de volúmenes
Incluir grupos de objetos en conjuntos de volúmenes delimitadores jerárquicos disminuye la cantidad de cálculos necesarios para el trazado de rayos. Primero se prueba un rayo de proyección para una intersección con el volumen delimitador , y luego, si hay una intersección, el volumen se divide recursivamente hasta que el rayo golpea el objeto. El mejor tipo de volumen delimitador vendrá determinado por la forma del objeto u objetos subyacentes. Por ejemplo, si los objetos son largos y delgados, entonces una esfera encerrará principalmente un espacio vacío en comparación con una caja. Los cuadros también son más fáciles de generar volúmenes delimitadores jerárquicos.
Tenga en cuenta que el uso de un sistema jerárquico como este (asumiendo que se hace con cuidado) cambia el tiempo computacional de la intersección de una dependencia lineal del número de objetos a algo entre una dependencia lineal y una logarítmica. Esto se debe a que, para un caso perfecto, cada prueba de intersección dividiría las posibilidades entre dos y daría como resultado una estructura de tipo árbol binario. Los métodos de subdivisión espacial, que se analizan a continuación, intentan lograr esto.
Kay y Kajiya dan una lista de propiedades deseadas para volúmenes delimitadores jerárquicos:
- Los subárboles deben contener objetos que estén cerca unos de otros y cuanto más abajo en el árbol, más cerca deben estar los objetos.
- El volumen de cada nodo debe ser mínimo.
- La suma de los volúmenes de todos los volúmenes delimitadores debe ser mínima.
- Se debe prestar más atención a los nodos cercanos a la raíz, ya que podar una rama cerca de la raíz eliminará más objetos potenciales que uno más abajo en el árbol.
- El tiempo dedicado a la construcción de la jerarquía debería ser mucho menor que el tiempo que se ahorra al usarla.
Trazado de rayos interactivo
La primera implementación de un trazador de rayos interactivo fue el sistema de gráficos por computadora LINKS-1 construido en 1982 en la Escuela de Ingeniería de la Universidad de Osaka , por los profesores Ohmura Kouichi, Shirakawa Isao y Kawata Toru con 50 estudiantes. [ cita requerida ] Era un sistema informático de procesamiento masivo paralelo con 514 microprocesadores (257 Zilog Z8001s y 257 iAPX 86s ), utilizado para renderizar gráficos de computadora 3D realistas con trazado de rayos de alta velocidad. Según la Sociedad de Procesamiento de la Información de Japón : "El núcleo de la representación de imágenes en 3D es calcular la luminancia de cada píxel que forma una superficie renderizada desde el punto de vista, la fuente de luz y la posición del objeto dados . El sistema LINKS-1 se desarrolló para realizar un Metodología de renderizado de imágenes en la que cada píxel podría procesarse en paralelo de forma independiente mediante el trazado de rayos. Al desarrollar una nueva metodología de software específicamente para el renderizado de imágenes de alta velocidad, LINKS-1 pudo renderizar rápidamente imágenes de gran realismo ". Se usó para crear un video de los cielos similar a un planetario en 3D, hecho completamente con gráficos por computadora. El video fue presentado en el pabellón de Fujitsu en la Exposición Internacional de 1985 en Tsukuba . " [27] Fue el segundo sistema en hacerlo después del Evans & Sutherland Digistar en 1982. Se informó que el LINKS-1 era el ordenador más potente del mundo. en 1984. [28]
El primer registro público de trazado de rayos "en tiempo real" con representación interactiva (es decir, actualizaciones mayores de un fotograma por segundo) fue acreditado en la conferencia de gráficos por computadora SIGGRAPH 2005 como las herramientas REMRT / RT desarrolladas en 1986 por Mike Muuss para el Sistema de modelado de sólidos BRL-CAD . Publicado inicialmente en 1987 en USENIX , el trazador de rayos BRL-CAD fue una implementación temprana de un sistema de trazado de rayos distribuido en red paralela que logró varios fotogramas por segundo en el rendimiento de renderizado. [29] Este rendimiento se logró mediante el motor de trazado de rayos LIBRT altamente optimizado pero independiente de la plataforma en BRL-CAD y mediante el uso de geometría CSG implícita sólida en varias máquinas paralelas de memoria compartida a través de una red de productos básicos. El trazador de rayos de BRL-CAD, incluidas las herramientas REMRT / RT, sigue estando disponible y desarrollado hoy como software de código abierto. [30]
Desde entonces, se han realizado esfuerzos e investigaciones considerables para implementar el trazado de rayos a velocidades en tiempo real para una variedad de propósitos en configuraciones de escritorio independientes. Estos propósitos incluyen aplicaciones de gráficos 3D interactivos como producciones de escenas de demostración , juegos de computadora y video , y renderizado de imágenes. Algunos programadores de demostraciones aficionados han desarrollado algunos motores 3D de software en tiempo real basados en el trazado de rayos desde finales de la década de 1990. [31]
En 1999, un equipo de la Universidad de Utah , dirigido por Steven Parker, demostró el trazado de rayos interactivo en vivo en el Simposio de 1999 sobre gráficos 3D interactivos. Representaron un modelo de 35 millones de esferas con una resolución de 512 por 512 píxeles, con una velocidad de aproximadamente 15 fotogramas por segundo en 60 CPU. [32]
El proyecto OpenRT incluyó un núcleo de software altamente optimizado para el trazado de rayos junto con una API similar a OpenGL con el fin de ofrecer una alternativa al enfoque actual basado en la rasterización para gráficos 3D interactivos. El hardware de trazado de rayos , como la Unidad de procesamiento de rayos experimental desarrollada por Sven Woop en la Universidad de Saarland , ha sido diseñado para acelerar algunas de las operaciones computacionalmente intensivas del trazado de rayos. El 16 de marzo de 2007, la Universidad de Saarland reveló una implementación de un motor de trazado de rayos de alto rendimiento que permitía renderizar juegos de computadora a través del trazado de rayos sin un uso intensivo de recursos. [33]
El 12 de junio de 2008, Intel demostró una versión especial de Enemy Territory: Quake Wars , titulada Quake Wars: Ray Traced , utilizando el trazado de rayos para el renderizado, que se ejecuta en resolución HD básica (720p). ETQW operó a 14–29 fotogramas por segundo. La demostración se realizó en un sistema Xeon Tigerton de 16 núcleos (4 sockets, 4 núcleos) que funcionaba a 2,93 GHz. [34]
En SIGGRAPH 2009, Nvidia anunció OptiX , una API gratuita para el trazado de rayos en tiempo real en las GPU de Nvidia. La API expone siete puntos de entrada programables dentro de la tubería de trazado de rayos, lo que permite cámaras personalizadas, intersecciones primitivas de rayos, sombreadores, sombreado, etc. Esta flexibilidad permite el rastreo de rutas bidireccionales, el transporte ligero de Metropolis y muchos otros algoritmos de renderizado que no se pueden implementar con recursividad de la cola. [35] Los renderizadores basados en OptiX se utilizan en Autodesk Arnold, Adobe AfterEffects , Bunkspeed Shot, Autodesk Maya , 3ds max y muchos otros renderizadores.
Imagination Technologies ofrece una API gratuita llamada OpenRL que acelera los algoritmos de renderizado basados en trazado de rayos recursivos de cola y, junto con su hardware de trazado de rayos patentado, trabaja con Autodesk Maya para proporcionar lo que 3D World llama "trazado de rayos en tiempo real para el artista cotidiano". [36]
En 2014, una demostración de la PlayStation 4 videojuego El Mañana niños , desarrollado por Q-Games y Japan Studio , demostró nuevas de iluminación técnicas desarrolladas por Q-Games, en particular en cascada voxel cono de trazado de rayos, que simula la iluminación en tiempo real y usos reflejos más realistas en lugar de reflejos en el espacio de la pantalla . [37]
Nvidia ofrece trazado de rayos acelerado por hardware en sus GPU GeForce RTX y Quadro RTX, actualmente basadas en la arquitectura Ampere . El hardware de Nvidia utiliza un bloque funcional independiente, denominado públicamente "núcleo RT". Esta unidad es algo comparable a una unidad de textura en tamaño, latencia e interfaz con el núcleo del procesador. La unidad presenta un recorrido de BVH, descompresión de nodo BVH comprimido, pruebas de intersección de rayos-AABB y pruebas de intersección de rayos-triángulos.
AMD ofrece trazado de rayos interactivo sobre OpenCL en tarjetas gráficas Vega a través de Radeon ProRender . [38] En octubre de 2020, la compañía presentó la serie Radeon RX 6000 , su GPU Navi de segunda generación con soporte para trazado de rayos acelerado por hardware en un evento en línea. [39] [40] [41] [42] [43]
La PlayStation 5 , Xbox Series X y Series S admiten componentes de hardware de trazado de rayos dedicados en sus GPU para efectos de trazado de rayos en tiempo real. [44] [45] [46] [47]
Complejidad computacional
Se han probado varios resultados de complejidad para determinadas formulaciones del problema del trazado de rayos. En particular, si la versión de decisión del problema de trazado de rayos se define de la siguiente manera [48] : dada la posición y dirección inicial de un rayo de luz y algún punto fijo, el rayo finalmente alcanza ese punto, entonces el documento de referencia demuestra los siguientes resultados:
- El trazado de rayos en sistemas ópticos 3D con un conjunto finito de objetos reflectantes o refractivos representados por un sistema de desigualdades cuadráticas racionales es indecidible .
- El trazado de rayos en sistemas ópticos 3D con un conjunto finito de objetos refractivos representados por un sistema de desigualdades lineales racionales es indecidible.
- El trazado de rayos en sistemas ópticos 3D con un conjunto finito de objetos rectangulares reflectantes o refractivos es indecidible.
- El trazado de rayos en sistemas ópticos 3D con un conjunto finito de objetos reflectantes o parcialmente reflectantes representados por un sistema de desigualdades lineales, algunas de las cuales pueden ser irracionales, es indecidible.
- El trazado de rayos en sistemas ópticos 3D con un conjunto finito de objetos reflectantes o parcialmente reflectantes representados por un sistema de desigualdades lineales racionales es PSPACE -hard.
- Para cualquier dimensión igual o mayor que 2, el trazado de rayos con un conjunto finito de superficies reflectantes paralelas y perpendiculares representadas por desigualdades lineales racionales está en PSPACE.
Ver también
- Seguimiento de haz
- Rastreo de cono
- Trazado de rayos distribuido
- Iluminación global
- Sombreado de Gouraud
- Lista de software de trazado de rayos
- Lista de juegos compatibles con el trazado de rayos
- Computación paralela
- Seguimiento de ruta
- Sombreado Phong
- Refinamiento progresivo
- Sombreado
- Reflexión especular
- Mosaico
- Iluminación por píxel
Referencias
- ^ "Función patrocinada: cambiar el juego - trazado de rayos experimental basado en la nube" . www.gamasutra.com . Consultado el 18 de marzo de 2021 .
- ^ "Los próximos grandes pasos en el diseño de sonido de juegos" . www.gamasutra.com . Consultado el 18 de marzo de 2021 .
- ^ "Disney explica por qué su animación 3D parece tan realista" . Engadget . Consultado el 18 de marzo de 2021 .
- ^ "Renderizado híbrido para iluminación en tiempo real: trazado de rayos vs rasterización - Imaginación" .
- ^ "Implementación de trazado de rayos híbrido en un motor de juego rasterizado - Imaginación" .
- ^ Georg Rainer Hofmann (1990). "¿Quién inventó el trazado de rayos?". La computadora visual . 6 (3): 120-124. doi : 10.1007 / BF01911003 . S2CID 26348610 ..
- ^ Steve Luecking (2013). "Durero, dibujo y pensamiento digital - Conferencia FATE 2013" . brian-curtis.com . Consultado el 13 de agosto de 2020 .
- ^ Steve Luecking. "Stephen J Luecking" . Consultado el 13 de agosto de 2020 .
- ^ Goldstein, Robert; Nagel, Roger (enero de 1971), "3D Visual simulation", Simulation , 16 (1): 25–31
- ^ Appel A. (1968) Algunas técnicas para sombrear representaciones de sólidos con máquinas . Procedimiento de conferencia AFIPS 32 págs. 37-45
- ^ [1]
- ^ Roth, Scott D. (febrero de 1982), "Ray Casting para modelar sólidos", procesamiento de imágenes y gráficos por computadora , 18 (2): 109-144, doi : 10.1016 / 0146-664X (82) 90169-1
- ^ Whitted T. (1979) Un modelo de iluminación mejorado para pantalla sombreada . Actas de la sexta conferencia anual sobre gráficos por computadora y técnicas interactivas
- ^ [2]
- ^ Sra. (28 de mayo de 2013). "Esta vida animada: la velocidad de la luz de Pixar trae nueva luz a Monsters University" . Esta vida animada . Consultado el 26 de mayo de 2020 .
- ^ Tomas Nikodym (junio de 2010). "Algoritmo de trazado de rayos para aplicaciones interactivas" (PDF) . Universidad Técnica Checa, FEE .
- ^ Whitted, T. (1979). "Un modelo de iluminación mejorado para pantalla sombreada" . Actas de la 6ª conferencia anual sobre gráficos por ordenador y técnicas interactivas . ISBN 0-89791-004-4.
- ^ Nebel, J.-C. (1998). "Un nuevo algoritmo paralelo proporcionado por un modelo de tiempo de cálculo". Taller de Eurographics sobre gráficos y visualización paralelos, 24-25 de septiembre de 1998, Rennes, Francia . OCLC 493481059 .
- ^ Chalmers, A .; Davis, T .; Reinhard, E. (2002). Representación práctica en paralelo . AK Peters. ISBN 1-56881-179-9.
- ^ Aila, Timo; Laine, Samulii (2009). "Comprensión de la eficiencia de Ray Traversal en GPU". HPG '09: Actas de la Conferencia sobre gráficos de alto rendimiento 2009 . págs. 145-149. doi : 10.1145 / 1572769.1572792 .
- ^ Eric P. Lafortune e Yves D. Willems (diciembre de 1993). "Trazado de ruta bidireccional" . Proceedings of Compugraphics '93 : 145-153.
- ^ Péter Dornbach (1998). "Implementación de algoritmo de trazado de rayos bidireccional" (PDF) . Consultado el 11 de junio de 2008 .
- ^ Iluminación global usando mapas de fotones Archivado 2008-08-08 en Wayback Machine
- ^ Mapeo de fotones - Zack Waters
- ^ Veach, Eric; Guibas, Leonidas J. (1997). "Transporte ligero de Metrópolis". SIGGRAPH '97: Actas de la 24ª conferencia anual sobre gráficos por ordenador y técnicas interactivas . págs. 65–76. doi : 10.1145 / 258734.258775 .
- ^ Hall, Roy A .; Greenberg, Donald P. (noviembre de 1983). "Un banco de pruebas para la síntesis de imágenes realistas". Gráficos y aplicaciones informáticos IEEE . 3 (8): 10-20. CiteSeerX 10.1.1.131.1958 . doi : 10.1109 / MCG.1983.263292 . S2CID 9594422 .
- ^ "【Universidad de Osaka】 Sistema de gráficos por computadora LINKS-1" . Museo de la Computación IPSJ . Sociedad de Procesamiento de la Información de Japón . Consultado el 15 de noviembre de 2018 .
- ^ Defanti, Thomas A. (1984). Avances en informática. Volumen 23 (PDF) . Prensa académica . pag. 121. ISBN 0-12-012123-9.
- ^ Véanse las actas del 4º taller de gráficos por computadora, Cambridge, MA, EE.UU., octubre de 1987. Asociación de Usenix, 1987. págs. 86–98.
- ^ "Acerca de BRL-CAD" . Consultado el 18 de enero de 2019 .
- ^ Piero Foscari. "El reino del trazado de rayos en tiempo real" . Transacciones ACM sobre gráficos . Consultado el 17 de septiembre de 2007 .
- ^ Parker, Steven; Martin, William (26 de abril de 1999). "Trazado de rayos interactivo" . I3D '99 Actas del Simposio de 1999 sobre gráficos interactivos en 3D (abril de 1999): 119–126. CiteSeerX 10.1.1.6.8426 . doi : 10.1145 / 300523.300537 . ISBN 1581130821. S2CID 4522715 . Consultado el 30 de octubre de 2019 .
- ^ Mark Ward (16 de marzo de 2007). "Los rayos iluminan gráficos realistas" . BBC News . Consultado el 17 de septiembre de 2007 .
- ^ Theo Valich (12 de junio de 2008). "Intel convierte ET: Quake Wars en trazado de rayos" . TG Diariamente . Consultado el 16 de junio de 2008 .
- ^ Nvidia (18 de octubre de 2009). "Nvidia OptiX" . Nvidia . Consultado el 6 de noviembre de 2009 .
- ^ "3DWorld: revisión de hardware: tarjeta aceleradora de trazado de rayos Caustic Series2 R2500" . Consultado el 23 de abril de 2013 .3D World, abril de 2013
- ^ Cuthbert, Dylan (24 de octubre de 2015). "Creando las bellas e innovadoras imágenes de The Tomorrow Children en PS4" . Blog de PlayStation . Consultado el 7 de diciembre de 2015 .
- ^ GPUOpen Ray-tracing en tiempo real
- ^ Garreffa, Anthony (9 de septiembre de 2020). "AMD revelará las tarjetas gráficas Big Navi RDNA 2 de próxima generación el 28 de octubre" . TweakTown . Consultado el 9 de septiembre de 2020 .
- ^ Lyles, Taylor (9 de septiembre de 2020). "El próximo mes se darán a conocer las CPU Zen 3 de próxima generación de AMD y la GPU Radeon RX 6000 'Big Navi'" . The Verge . Consultado el 10 de septiembre de 2020 .
- ^ "AMD se burla de los números de rendimiento de la tarjeta Radeon RX 6000: ¿apunta a 3080?" . anandtech.com . AnandTech . 8 de octubre de 2020 . Consultado el 25 de octubre de 2020 .
- ^ "AMD anuncia las presentaciones de Ryzen" Zen 3 "y Radeon" RDNA2 "para octubre: comienza un nuevo viaje" . anandtech.com . AnandTech . 9 de septiembre de 2020 . Consultado el 25 de octubre de 2020 .
- ^ Judd, Will (28 de octubre de 2020). "AMD presenta tres tarjetas gráficas Radeon 6000 con trazado de rayos y un rendimiento superior a RTX" . Eurogamer . Consultado el 28 de octubre de 2020 .
- ^ Warren, Tom (8 de junio de 2019). "Microsoft insinúa la próxima generación de Xbox 'Scarlet' en los teasers del E3" . The Verge . Consultado el 8 de octubre de 2019 .
- ^ Chaim, Gartenberg (8 de octubre de 2019). "Sony confirma el nombre de PlayStation 5, fecha de lanzamiento de vacaciones de 2020" . The Verge . Consultado el 8 de octubre de 2019 .
- ^ Warren, Tom (24 de febrero de 2020). "Microsoft revela más especificaciones de Xbox Series X, confirma GPU de 12 teraflops" . The Verge . Consultado el 25 de febrero de 2020 .
- ^ Warren, Tom (9 de septiembre de 2020). "Microsoft revela las especificaciones de Xbox Series S, promete cuatro veces la potencia de procesamiento de Xbox One" . The Verge . Consultado el 9 de septiembre de 2020 .
- ^ "Computabilidad y complejidad del trazado de rayos" (PDF) . CS.Duke.edu .
enlaces externos
- Trazado de rayos interactivo: ¿el reemplazo de la rasterización?
- El pescador completo (1978)
- Escribir un Ray Tracer simple (scratchapixel)
- Ray trazando un toro
- Ray Tracing en una serie de libros de fin de semana