stringtranslate.com

Seguimiento de ruta

Una imagen renderizada mediante trazado de ruta, que demuestra características notables de la técnica.

El trazado de ruta es un método Monte Carlo de gráficos por computadora para representar imágenes de escenas tridimensionales de manera que la iluminación global sea fiel a la realidad. Fundamentalmente, el algoritmo integra toda la iluminancia que llega a un único punto de la superficie de un objeto. Luego, esta iluminancia se reduce mediante una función de reflectancia de la superficie ( BRDF ) para determinar qué parte irá hacia la cámara del punto de vista. Este procedimiento de integración se repite para cada píxel de la imagen de salida. Cuando se combina con modelos de superficies físicamente precisos , modelos precisos de fuentes de luz reales y cámaras ópticamente correctas, el trazado de trayectorias puede producir imágenes fijas que no se pueden distinguir de las fotografías.

El trazado de ruta simula naturalmente muchos efectos que deben agregarse específicamente a otros métodos ( trazado de rayos convencional o renderizado de líneas de exploración ), como sombras suaves , profundidad de campo , desenfoque de movimiento , cáusticas , oclusión ambiental e iluminación indirecta. La implementación de un renderizador que incluya estos efectos es correspondientemente más sencilla. Una versión extendida del algoritmo se realiza mediante el trazado volumétrico de trayectoria , que considera la dispersión de la luz de una escena.

Debido a su precisión, naturaleza imparcial y simplicidad algorítmica, el trazado de ruta se utiliza para generar imágenes de referencia al probar la calidad de otros algoritmos de renderizado . Sin embargo, el algoritmo de seguimiento de trayectoria es relativamente ineficiente: se debe rastrear una gran cantidad de rayos para obtener imágenes de alta calidad libres de artefactos de ruido . Se han introducido varias variantes que son más eficientes que el algoritmo original para muchas escenas, incluido el rastreo de ruta bidireccional, el rastreo de ruta volumétrico y el transporte ligero Metropolis .

Historia

La ecuación de renderizado y su uso en gráficos por computadora fue presentada por James Kajiya en 1986. [1] El trazado de ruta se introdujo entonces como un algoritmo para encontrar una solución numérica a la integral de la ecuación de renderizado. Una década más tarde, Lafortune sugirió muchas mejoras, incluido el trazado de rutas bidireccional. [2]

El transporte ligero de Metropolis , un método para perturbar caminos encontrados previamente para aumentar el rendimiento en escenas difíciles, fue introducido en 1997 por Eric Veach y Leonidas J. Guibas .

Más recientemente, las CPU y GPU se han vuelto lo suficientemente potentes como para representar imágenes más rápidamente, lo que ha provocado un interés más generalizado en los algoritmos de seguimiento de rutas. Tim Purcell presentó por primera vez un algoritmo de iluminación global ejecutándose en una GPU en 2002. [3] En febrero de 2009, Austin Robison de Nvidia demostró la primera implementación comercial de un trazador de ruta ejecutándose en una GPU [4] , y le siguieron otras implementaciones, como como el de Vladimir Koylazov en agosto de 2009. [5] Esto fue ayudado por la maduración de los kits de herramientas de programación GPGPU como CUDA y OpenCL y SDK de trazado de rayos GPU como OptiX .

El trazado de rutas ha jugado un papel importante en la industria cinematográfica. Las películas anteriores se habían basado en la renderización de líneas de exploración para producir animaciones y efectos visuales generados por computadora. En 1998, Blue Sky Studios renderizó el cortometraje Bunny, ganador del Premio de la Academia, con su renderizador de trazado de trayectoria patentado CGI Studio, que presenta sombras suaves y efectos de iluminación indirecta. Monster House de Sony Pictures Imageworks fue, en 2006, el primer largometraje de animación renderizado íntegramente en un trazador de trayectoria, utilizando el renderizador comercial Arnold . Además, Walt Disney Animation Studios ha estado utilizando su propio trazador de ruta optimizado conocido como Hyperion desde la producción de Big Hero 6 en 2014. [6] Pixar Animation Studios también ha adoptado el trazado de ruta para su renderizador comercial RenderMan .

Descripción

La ecuación de representación de Kajiya se adhiere a tres principios ópticos particulares; el Principio de Iluminación Global, el Principio de Equivalencia (la luz reflejada equivale a la luz emitida) y el Principio de Dirección (la luz reflejada y la luz dispersada tienen una dirección).

En el mundo real, los objetos y las superficies son visibles porque reflejan la luz. Esta luz reflejada ilumina a su vez otros objetos. De esa simple observación se desprenden dos principios.

I. Para una escena interior determinada, cada objeto de la habitación debe contribuir a iluminar a todos los demás objetos.

II. En segundo lugar, no hay que hacer distinción entre la iluminación emitida por una fuente de luz y la iluminación reflejada por una superficie.

Inventado en 1984, un método bastante diferente llamado radiosidad era fiel a ambos principios. Sin embargo, la radiosidad relaciona la iluminancia total que cae sobre una superficie con una luminancia uniforme que sale de la superficie. Esto obligó a que todas las superficies fueran lambertianas , o "perfectamente difusas". Si bien la radiosidad recibió mucha atención en su introducción, las superficies perfectamente difusas no existen en el mundo real. La comprensión de que la dispersión de una superficie depende tanto de las direcciones entrantes como salientes es el principio clave detrás de la función de distribución de reflectancia bidireccional (BRDF). Esta dependencia de la dirección fue un foco de investigación que dio como resultado la publicación de ideas importantes a lo largo de la década de 1990, ya que tener en cuenta la dirección siempre exigió un precio de fuertes aumentos en los tiempos de cálculo en las computadoras de escritorio. Sigue el Principio III.

III. La iluminación proveniente de las superficies debe dispersarse en una dirección particular que es función de la dirección entrante de la iluminación que llega y de la dirección saliente que se está muestreando.

La ecuación de Kajiya es un resumen completo de estos tres principios, y el trazado de ruta, que aproxima una solución a la ecuación, permanece fiel a ellos en su implementación. Hay otros principios de la óptica que no son el foco de la ecuación de Kajiya y, por lo tanto, el algoritmo a menudo resulta difícil o los simula incorrectamente. El rastreo de trayectorias se ve confuso por fenómenos ópticos que no están contenidos en los tres principios. Por ejemplo,

Algoritmo

El siguiente pseudocódigo es un procedimiento para realizar un seguimiento de ruta ingenuo. La función TracePath calcula una única muestra de un píxel, donde solo se considera la ruta de recopilación.

Color TracePath ( rayo , profundidad de recuento ) {      si ( profundidad >= MaxDepth ) {     volver negro ; // Rebotó suficientes veces.   } rayo . Buscarobjetomás cercano (); if ( rayo . hitSomething == false ) {     volver negro ; // No se alcanzó nada.   } Material material = rayo . cosaHit -> material ;    Emitancia de color = material . emitancia ;    // Elige una dirección aleatoria desde aquí y continúa. Ray nuevoRay ;  nuevoRay . origen = rayo . puntoDondeObjWasHit ;   // ¡Esta NO es una distribución ponderada por coseno! nuevoRay . dirección = RandomUnitVectorInHemisphereOf ( rayo . normalWhereObjWasHit );   // Probabilidad del nuevo Rayo flotador constante p = 1 / ( 2 * PI );         // Calcula el BRDF para este rayo (suponiendo una reflexión lambertiana) float cos_theta = DotProduct ( newRay . dirección , rayo . normalWhereObjWasHit );     Color BRDF = material . reflectancia / PI ;      // Traza recursivamente fuentes de luz reflejadas. Color entrante = TracePath ( newRay , profundidad + 1 );       // Aplique la ecuación de renderizado aquí. emitancia de retorno + ( BRDF * entrante * cos_theta / p );         }Renderizado vacío ( Imagen finalImagen , cuenta numSamples ) {      foreach ( píxel en imagen final ) {     foreach ( i en numMuestras ) {     Rayo r = cámara . generarRay ( píxel );    píxel . color += TracePath ( r , 0 );    } píxel . color /= numMuestras ; // Muestras promedio.    }}

Luego se promedian todas las muestras para obtener el color de salida. Tenga en cuenta que este método de muestrear siempre un rayo aleatorio en el hemisferio normal solo funciona bien para superficies perfectamente difusas. Para otros materiales, generalmente hay que utilizar un muestreo de importancia, es decir, seleccionar probabilísticamente un nuevo rayo según la distribución del BRDF. Por ejemplo, un material perfectamente especular (espejo) no funcionaría con el método anterior, ya que la probabilidad de que el nuevo rayo sea el rayo reflejado correcto (que es el único rayo a través del cual se reflejará cualquier radiancia) es cero. En estas situaciones, se debe dividir la reflectancia por la función de densidad de probabilidad del esquema de muestreo, según la integración de Monte Carlo (en el caso ingenuo anterior, no existe un esquema de muestreo particular, por lo que la PDF resulta ser ).

Hay otras consideraciones a tener en cuenta para garantizar la conservación de la energía. En particular, en el caso ingenuo, la reflectancia de un BRDF difuso no debe exceder o el objeto reflejará más luz de la que recibe (sin embargo, esto depende del esquema de muestreo utilizado y puede ser difícil de lograr).

Seguimiento de ruta bidireccional

El muestreo de la integral se puede realizar mediante cualquiera de los dos enfoques distintos siguientes:

En ambos casos, se puede utilizar una técnica llamada estimación del próximo evento para reducir la varianza. Esto funciona muestreando directamente una característica importante (la cámara en el caso del rastreo de luz , o una fuente de luz en el caso del rastreo de ruta hacia atrás ) en lugar de esperar a que un camino la golpee por casualidad. Esta técnica suele ser eficaz, pero se vuelve menos útil cuando hay BRDF especulares o casi especulares. Para el rastreo de trayectorias hacia atrás , esto crea una gran variación para las trayectorias cáusticas que interactúan con una superficie difusa y luego rebotan en una superficie especular antes de impactar una fuente de luz. La estimación del siguiente evento no se puede utilizar para muestrear estos caminos directamente desde la superficie difusa, porque la interacción especular está en el medio. Asimismo, no se puede utilizar para muestrear trayectorias desde la superficie especular porque sólo hay una dirección en la que la luz puede rebotar. El rastreo de luz tiene un problema similar cuando los caminos interactúan con una superficie especular antes de llegar a la cámara. Debido a que esta situación es significativamente más común y los objetos de vidrio ruidosos (o completamente negros) son muy perjudiciales visualmente, el rastreo de ruta hacia atrás es el único método que se utiliza para el rastreo de ruta unidireccional en la práctica.

El rastreo de ruta bidireccional proporciona un algoritmo que combina los dos enfoques y puede producir una variación menor que cualquiera de los métodos por separado. Para cada muestra, se trazan dos caminos de forma independiente: uno desde la fuente de luz y otro desde la cámara. Esto produce un conjunto de posibles estrategias de muestreo, donde cada vértice de un camino puede conectarse directamente a cada vértice del otro. Los algoritmos originales de seguimiento de luz y de seguimiento de ruta hacia atrás son casos especiales de estas estrategias. Para el rastreo de luz , se conectan los vértices del camino de la cámara directamente al primer vértice del camino de la luz. Para el rastreo de ruta hacia atrás , se conectan los vértices de la ruta de luz al primer vértice de la ruta de la cámara. Además, existen varias estrategias de muestreo completamente nuevas, en las que se conectan vértices intermedios. Ponderar todas estas estrategias de muestreo utilizando un muestreo de importancia múltiple crea un nuevo muestreador que puede converger más rápido que el rastreo de ruta unidireccional, aunque se requiere más trabajo para cada muestra. Esto funciona particularmente bien para escenas cáusticas o que se iluminan principalmente mediante iluminación indirecta.

Actuación

El ruido disminuye a medida que aumenta el número de muestras por píxel. La parte superior izquierda muestra 1 muestra por píxel y duplica cada cuadrado de izquierda a derecha.

Un trazador de ruta toma muestras continuamente de píxeles de una imagen . La imagen comienza a ser reconocible después de sólo unas pocas muestras por píxel, quizás 100. Sin embargo, para que la imagen "converja" y reduzca el ruido a niveles aceptables normalmente se necesitan alrededor de 5000 muestras para la mayoría de las imágenes, y muchas más para los casos patológicos . El ruido es particularmente un problema para las animaciones, dándoles una calidad de "grano de película" normalmente no deseada y moteada aleatoriamente.

El principal obstáculo en el rendimiento del rastreo de trayectorias es el complejo cálculo geométrico de la proyección de un rayo. El muestreo de importancia es una técnica que está motivada por emitir menos rayos a través de la escena y al mismo tiempo converger correctamente con la luminancia saliente en el punto de la superficie. Esto se hace proyectando más rayos en direcciones en las que la luminancia habría sido mayor de todos modos. Si la densidad de los rayos emitidos en determinadas direcciones coincide con la intensidad de las contribuciones en esas direcciones, el resultado es idéntico, pero en realidad se emitieron muchos menos rayos. El muestreo de importancia se utiliza para hacer coincidir la densidad de rayos con la ley del coseno de Lambert y también para hacer coincidir los BRDF.

El transporte ligero de Metrópolis puede dar como resultado una imagen con menos ruido y con menos muestras. Este algoritmo fue creado para conseguir una convergencia más rápida en escenas en las que la luz debe pasar por pasillos extraños o pequeños agujeros para llegar a la parte de la escena que está viendo la cámara. También se ha mostrado prometedor a la hora de representar correctamente situaciones patológicas con cáusticos. En lugar de generar rutas aleatorias, se crean nuevas rutas de muestreo como ligeras mutaciones de las existentes. En este sentido, el algoritmo "recuerda" los caminos exitosos desde las fuentes de luz hasta la cámara.

Funciones de distribución de dispersión

Funciones de distribución de dispersión

Las propiedades reflectantes (cantidad, dirección y color) de las superficies se modelan utilizando BRDF . El equivalente para la luz transmitida (luz que atraviesa el objeto) son los BSDF . Un trazador de ruta puede aprovechar al máximo funciones de distribución complejas, cuidadosamente modeladas o medidas, que controlan la apariencia ("material", "textura" o "sombreado" en términos de gráficos por computadora) de un objeto.

Ver también

Notas

  1. ^ Kajiya, JT (1986). "La ecuación de renderizado". Actas de la decimotercera conferencia anual sobre gráficos por computadora y técnicas interactivas . ACM. CiteSeerX  10.1.1.63.1402 .
  2. ^ Lafortune, E, Modelos matemáticos y algoritmos de Monte Carlo para representación física, (tesis doctoral), 1996.
  3. ^ Purcell, TJ; Dólar, yo; Marcos, W; y Hanrahan, P, "Ray Tracing en hardware de gráficos programables", Proc. SIGGRAPH 2002 , 703 – 712. Véase también Purcell, T, Trazado de rayos en un procesador de flujo (tesis doctoral), 2004.
  4. ^ Robison, Austin, "Descripción general del trazado de rayos interactivo en la GPU y NVIRT", diapositiva 37, I3D 2009.
  5. ^ Demostración de Vray; Otros ejemplos incluyen Octane Render, Arion y Luxrender.
  6. ^ Seymour, Mike. "El nuevo procesador de producción de Disney 'Hyperion' - ¡Sí, Disney!". guía de efectos . Consultado el 16 de septiembre de 2017 .
  7. ^ Veach, E. y Guibas, LJ Transporte ligero de Metropolis. En SIGGRAPH'97 (agosto de 1997), págs. 65–76.
  8. SmallPt es un trazador de caminos educativos de Kevin Beason. Utiliza 99 líneas de C++ (incluida la descripción de la escena). Esta página tiene un buen conjunto de ejemplos de ruido resultante de esta técnica.