- Raytracing
-
Raytracing
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).
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 intersectado.
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 Monte Carlo; 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 bleeding) o las cáusticas.
Algoritmo del Ray - Tracing
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 intercepta 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 } }
PDF introductorio a raytracing - PRIMERA PARTE
PDF sobre raytracing - SEGUNDA PARTE
Categorías: Infografía | Algoritmos | Gráficos de computador en 3D
Wikimedia foundation. 2010.