Trazado de rayos

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda

El raytracing o trazado de rayos es un algoritmo para síntesis de imágenes tridimensionales. Propuesto inicialmente por Turner Whitted en 1980, está basado en el algoritmo de determinación de superficies visibles de Arthur Appel denominado Ray Casting (1968).

Tres esferas, reflejándose en el suelo y unas en otras.

En el algoritmo Ray Casting se determinan las superficies visibles en la escena que se quiere sintetizar trazando rayos desde el observador (cámara) hasta la escena a través del plano de la imagen. Se calculan las intersecciones del rayo con los diferentes objetos de la escena y aquella intersección que esté más cerca del observador determina cuál es el objeto visible.

El algoritmo de trazado de rayos extiende la idea de trazar los rayos para determinar las superficies visibles con un proceso de sombreado (cálculo de la intensidad del píxel) que tiene en cuenta efectos globales de iluminación como pueden ser reflexiones, refracciones o sombras arrojadas.

Para simular los efectos de reflexión y refracción se trazan rayos recursivamente desde el punto de intersección que se está sombreando dependiendo de las características del material del objeto intersecado.

Para simular las sombras arrojadas se lanzan rayos desde el punto de intersección hasta las fuentes de luz. Estos rayos se conocen con el nombre de rayos de sombra (shadow rays).

El algoritmo básico de trazado de rayos fue mejorado por Robert Cook (1985) para simular otros efectos en las imágenes mediante el muestreo estocástico usando un método de Montecarlo; entre estos efectos podemos citar el desenfoque por movimiento (blur motion), la profundidad de campo o el submuestreo para eliminar efectos de aliasing en la imagen resultante.

En la actualidad, el algoritmo de trazado de rayos es la base de otros algoritmos más complejos para síntesis de imágenes (mapeado de fotones, Metropolis, entre otros) que son capaces de simular efectos de iluminación global complejos como la mezcla de colores (color blending) o las cáusticas.

Algoritmo de trazado de rayos[editar]

Para cada pixel de la imagen {
 Crear un rayo desde el punto de visión a través del pixelActual
 Inicializar NearestT al INFINITO y NearestObject a NULL
 Para cada objeto de la escena {
   Si el rayo se interseca con el objetoActual{
     Si t de la intersección es menor que NearestT {
         Poner NearestT = t de la intersección
         Poner NearestObject a objetoActual
     }
   }
 }
 Si NearestObject = NULL{
    Rellenamos pixelActual con el color de fondo
 }
 Sino{
    Lanzar un rayo a cada foco de luz para comprobar las sombras
    Si la superficie es reflectiva, generar un rayo reflectivo (recursivo)
    Si la superficie es transparente, generar un rayo refractante (recursivo)
    Usar NearestObject y NearestT para computar la función de sombreado
    Rellenar este pixel con el color resultante de la función de sombreado
 }
}

Véase también[editar]