stringtranslate.com

Rastreo de ruta

Una imagen generada mediante el trazado de rutas, que muestra características notables de la técnica.

El trazado de trayectorias es un método Monte Carlo de gráficos por ordenador para reproducir imágenes de escenas tridimensionales de forma que la iluminación global sea fiel a la realidad. Básicamente, el algoritmo integra toda la iluminancia que llega a un único punto de la superficie de un objeto. Esta iluminancia se reduce luego mediante una función de reflectancia de superficie ( BRDF ) para determinar qué parte de ella 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 físicamente precisos de superficies, modelos precisos de fuentes de luz reales y cámaras ópticamente correctas, el trazado de trayectorias puede producir imágenes fijas que son indistinguibles de las fotografías.

El trazado de trayectorias simula de forma natural muchos efectos que deben añadirse específicamente a otros métodos ( trazado de rayos convencional o renderizado de líneas de escaneo ), como sombras suaves , profundidad de campo , desenfoque de movimiento , cáusticos , 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 de trayectorias volumétrico , 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 trayectorias se utiliza para generar imágenes de referencia cuando se prueba la calidad de otros algoritmos de renderizado . Sin embargo, el algoritmo de trazado de trayectorias es relativamente ineficiente: se debe trazar 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 trazado de trayectorias bidireccional, el trazado de trayectorias volumétrico y el transporte de luz Metropolis .

Historia

La ecuación de renderizado y su uso en gráficos por ordenador fueron presentados por James Kajiya en 1986. [1] El trazado de trayectorias 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 después, Lafortune sugirió muchas mejoras, incluido el trazado de trayectorias bidireccional. [2]

El transporte de luz Metropolis , un método para perturbar trayectorias encontradas previamente con el fin de 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 renderizar imágenes más rápidamente, lo que ha provocado un interés más generalizado en los algoritmos de trazado de rutas. Tim Purcell presentó por primera vez un algoritmo de iluminación global que se ejecuta en una GPU en 2002. [3] En febrero de 2009, Austin Robison de Nvidia demostró la primera implementación comercial de un trazador de rutas que se ejecuta en una GPU [4] , y otras implementaciones han seguido, como la 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 los SDK de trazado de rayos de GPU como OptiX .

El trazado de trayectorias ha desempeñado un papel importante en la industria cinematográfica. Las películas anteriores se basaban en la renderización de líneas de exploración para producir efectos visuales y animación CG. En 1998, Blue Sky Studios renderizó el cortometraje ganador del Premio de la Academia Bunny con su renderizador de trazado de trayectorias CGI Studio patentado, que presenta sombras suaves y efectos de iluminación indirecta. Monster House de Sony Pictures Imageworks fue, en 2006, el primer largometraje animado en ser renderizado completamente en un trazador de trayectorias, utilizando el renderizador comercial Arnold . Además, Walt Disney Animation Studios ha estado utilizando su propio trazador de trayectorias 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 trayectorias para su renderizador comercial RenderMan .

Descripción

La ecuación de renderizado de Kajiya se adhiere a tres principios particulares de óptica: el principio de iluminación global, el principio de equivalencia (la luz reflejada es equivalente a la luz emitida) y el principio de dirección (la luz reflejada y la luz dispersa 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 esta 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 debe hacerse distinción entre la iluminación emitida por una fuente de luz y la iluminación reflejada desde una superficie.

En 1984 se inventó un método bastante diferente, llamado radiosidad, que se mantuvo 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 resultó en la publicación de ideas importantes a lo largo de la década de 1990, ya que tener en cuenta la dirección siempre exigía un precio de fuertes aumentos en los tiempos de cálculo en las computadoras de escritorio. A continuación, se presenta 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 trayectorias, que aproxima una solución a la ecuación, permanece fiel a ellos en su implementación. Existen otros principios de la óptica que no son el foco de la ecuación de Kajiya y, por lo tanto, a menudo son difíciles o incorrectamente simulados por el algoritmo. El trazado 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 conteo ) {      si ( profundidad >= ProfundidadMáxima ) {     devuelve Negro ; // Rebotó suficientes veces.   } ray .BuscarObjetoMásCercano () ; si ( ray . hitSomething == false ) {     regresa Negro ; // No se golpeó nada.   } Material material = ray . thingHit -> material ;    Emitancia de color = material . emitancia ;    // Elige una dirección aleatoria desde aquí y continúa. Ray nuevoRay ;  newRay . origin = ray . pointWhereObjWasHit ;   // ¡Esta NO es una distribución ponderada por coseno! newRay . dirección = RandomUnitVectorInHemisphereOf ( ray . normalWhereObjWasHit );   // Probabilidad del nuevo Rayo constante flotante p = 1 / ( 2 * PI );         // Calcular la BRDF para este rayo (asumiendo reflexión lambertiana) float cos_theta = DotProduct ( newRay.direccion , ray.normalWhereObjWasHit ) ;     Color BRDF = material . reflectancia / PI ;      // Rastrear recursivamente fuentes de luz reflejadas. Color entrante = TracePath ( newRay , profundidad + 1 );       //Aplica la ecuación de renderizado aquí. emitancia de retorno + ( BRDF * entrante * cos_theta / p );         }void Render ( Imagen finalImagen , count numSamples ) {      foreach ( píxel en imagenfinal ) {     foreach ( i en numMuestras ) {     Ray r = cámara .generateRay ( pixel ) ;    píxel . color += TracePath ( r , 0 );    } pixel . color /= numSamples ; // Muestras promedio.    }}

Todas las muestras se promedian 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 se debe utilizar el muestreo de importancia, es decir, seleccionar de manera probabilística un nuevo rayo de acuerdo con la distribución de 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 hay un esquema de muestreo particular, por lo que la PDF resulta ser ).

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

Rastreo 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 trayectoria hacia atrás ) en lugar de esperar a que una trayectoria la alcance por casualidad. Esta técnica suele ser eficaz, pero se vuelve menos útil cuando hay BRDF especulares o casi especulares. Para el rastreo de trayectoria hacia atrás , esto crea una alta varianza para las trayectorias cáusticas que interactúan con una superficie difusa y luego rebotan en una superficie especular antes de alcanzar una fuente de luz. La estimación del próximo evento no se puede utilizar para muestrear estas trayectorias directamente desde la superficie difusa, porque la interacción especular está en el medio. Del mismo modo, no se puede utilizar para muestrear trayectorias desde la superficie especular porque solo hay una dirección en la que la luz puede rebotar. El rastreo de luz tiene un problema similar cuando las trayectorias interactúan con una superficie especular antes de alcanzar 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 perturbadores visualmente, el rastreo de trayectoria inverso es el único método que se utiliza para el rastreo de trayectoria unidireccional en la práctica.

El rastreo de ruta bidireccional proporciona un algoritmo que combina los dos enfoques y puede producir una varianza menor que cada método por separado. Para cada muestra, se rastrean dos rutas de forma independiente: una utilizando la fuente de luz y otra desde la cámara. Esto produce un conjunto de posibles estrategias de muestreo, donde cada vértice de una ruta se puede conectar directamente a cada vértice de la otra. Los algoritmos originales de rastreo de luz y rastreo de ruta hacia atrás son casos especiales de estas estrategias. Para el rastreo de luz , se conectan los vértices de la ruta de la cámara directamente al primer vértice de la ruta de 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, hay varias estrategias de muestreo completamente nuevas, donde se conectan los vértices intermedios. La ponderación de todas estas estrategias de muestreo utilizando 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 cáusticos o escenas que se iluminan principalmente a través de iluminación indirecta.

Actuación

El ruido disminuye a medida que aumenta el número de muestras por píxel. En la parte superior izquierda se muestra una muestra por píxel y se duplica de izquierda a derecha en cada cuadrado.

Un trazador de trayectorias toma muestras de píxeles de una imagen de forma continua . La imagen comienza a ser reconocible después de 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 un problema especialmente para las animaciones, ya que les da una calidad de "grano de película" normalmente no deseada de motas aleatorias.

El principal obstáculo para el rendimiento en el trazado 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 tiene como objetivo proyectar menos rayos a través de la escena y, al mismo tiempo, converger correctamente a 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 rayos proyectados en ciertas direcciones coincide con la fuerza de las contribuciones en esas direcciones, el resultado es idéntico, pero en realidad se proyectaron 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 se utiliza para hacer coincidir las BRDF.

El transporte de luz de Metropolis puede generar una imagen con menos ruido y menos muestras. Este algoritmo se creó para lograr una convergencia más rápida en escenas en las que la luz debe atravesar pasillos extraños o pequeños agujeros para llegar a la parte de la escena que está viendo la cámara. También ha demostrado ser prometedor en la reproducción correcta de situaciones patológicas con cáusticos. En lugar de generar rutas aleatorias, se crean nuevas rutas de muestreo como pequeñas mutaciones de las existentes. En este sentido, el algoritmo "recuerda" las rutas exitosas 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 mediante BRDF . El equivalente para la luz transmitida (luz que atraviesa el objeto) son las BSDF . Un trazador de trayectorias puede aprovechar al máximo las funciones de distribución complejas, cuidadosamente modeladas o medidas, que controlan la apariencia ("material", "textura" o "sombreado" en términos de gráficos de computadora) de un objeto.

Véase también

Notas

  1. ^ Kajiya, JT (1986). "La ecuación de renderizado". Actas de la 13.ª conferencia anual sobre gráficos por ordenador y técnicas interactivas . ACM. CiteSeerX  10.1.1.63.1402 .
  2. ^ Lafortune, E, Modelos matemáticos y algoritmos de Monte Carlo para renderizado basado en la física, (tesis doctoral), 1996.
  3. ^ Purcell, TJ; Buck, I; Mark, W; y Hanrahan, P, "Ray Tracing on Programmable Graphics Hardware", Proc. SIGGRAPH 2002 , 703 – 712. Véase también Purcell, T, Ray tracing on a stream processing (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 renderizador de producción de Disney 'Hyperion': ¡Sí, Disney!". fxguide . Consultado el 16 de septiembre de 2017 .
  7. ^ Veach, E., y Guibas, LJ Metropolis light transport. En SIGGRAPH'97 (agosto de 1997), págs. 65–76.
  8. SmallPt es un trazador de rutas educativo de Kevin Beason. Utiliza 99 líneas de C++ (incluida la descripción de escenas). Esta página tiene un buen conjunto de ejemplos de ruido resultante de esta técnica.