lunes, 12 de mayo de 2008

EXPOSICIÒN DE TRAZADO DE RAYOS

Exposición: Traza de Rayos
Día:12-may-2008

TRAZADO DE RAYOS

El raytracing  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 pixel) 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 trazador de rayos (ray tracing)

Como vimos en el Tema 1, los modelos de iluminación semiglobales, además de considerar

la contribución de las fuentes de luz, también tienen en cuenta la luz reflejada y la transmitida procedente de los objetos circundantes. El algoritmo trazador de rayos (o ray tracing), que es una generalización del algoritmo de ray casting visto en los temas anteriores, utiliza un modelo de iluminación semiglobal.

Así, en la versión típica del algoritmo de ray tracing, el color (intensidad) en un punto de intersección rayo-superficie cualquiera viene determinado por tres tipos de aportaciones lumínicas:

* Por un lado está la contribución o color local, que se debe a la iluminación directa de las fuentes, y la luz ambiental. En definitiva, se trata de aplicar el modelo de iluminación local utilizado ray casting.

* Por otro lado está la contribución o color reflejado, que consiste en la luz que llega al punto de intersección desde los objetos circundantes, siguiendo la trayectoria de reflexión de la luz.

* Por último, el algoritmo de ray tracing también cuenta con la aportación del color transmitido, que se debe la luz que llega al punto de intersección después de cruzar (traspasar) los objetos vecinos (si es que son transmisores de la luz), siguiendo la trayectoria de transmisión.

En la Figura 1 se pueden apreciar las tres contribuciones en un punto de intersección

rayo-superficie dado.



Naturaleza recursiva del algoritmo de ray tracing

Según se ha comentado arriba, ray tracing no es más que una expansión o generalización del algoritmo de ray casting. Como sabemos, en éste solamente se traza un tipo de rayos, conocidos como rayos primarios, que van desde el observador hasta los objetos en el escenario, a través de cada píxel del plano visual. En ray tracing, además de los rayos primarios, en cada punto de intersección rayo-superficie son trazados otros dos rayos, el rayo reflejado y el rayo transmitido (NOTA: el trazado de estos rayos dependerá de que el objeto intersecado sea reflectante y/o transmisor de la luz).

Figura 2:



En la figura anterior puede apreciarse el trazado del rayo reflejado y transmitido, en cada punto de intersección. 

En la misma figura puede verse que cada rayo primario trazado lleva asociado un árbol binario (árbol de rayos) como el mostrado a continuación:





de ray tracing. Por la descripción gráfica que acabamos de ver del algoritmo, los pasos a dar para su desarrollo son:

1) Como en ray casting, primero se ha de trazar el rayo primario, es decir, hay que calcular el rayo procedente del ojo que pasa a través de un píxel dado, buscando la intersección más cercana con los objetos del escenario.

2) Una vez encontrado el punto de intersección, para averiguar el color global (final) del rayo primario (y del píxel), se calcula primero la contribución local en el punto de intersección. Para ello es preciso conocer, entre otros datos, qué fuentes aportan luz, y cuales no. Esto se consigue trazando rayos de sombra desde el punto de intersección hacia cada una de las fuentes de luz, evaluando la contribución de cada fuente en función de sus características y de los objetos interpuestos (si los hay) en la trayectoria del correspondiente rayo de sombra (Figura 4).

Figura





En el caso de que la superficie presente reflexión (que es lo más frecuente) calcularemos la trayectoria del rayo reflejado con respecto a la normal a la superficie en el punto de  intersección. En el cálculo de esta trayectoria normalmente se supone que el objeto superficie) es un reflector perfecto.

4) De la misma forma, si el objeto es transmisor de la luz, se ha de calcular la trayectoria del rayo transmitido hacia el interior del objeto, determinando el ángulo de refracción por la ley de Snell.

 Ambos rayos pueden verse en la Figura 5.






Puesto que en el algoritmo de ray tracing los rayos normalmente se trazan hacia atrás, a continuación se ha de seguir la pista del rayo reflejado (o bien la del transmitido), para encontrar los respectivos puntos de procedencia de la luz, es decir, los puntos de intersección (más cercanos) con los objetos del escenario. Localizados éstos, de nuevo se generan rayos de sombra (para calcular la contribución local), de transmisión (para hallar la contribución transmitida) y de reflexión (para la contribución reflejada), todos ellos con origen en los puntos de intersección recién encontrados. Como vemos, algorítmicamente estamos en una situación similar a la del punto de partida (aunque no igual), lo que aconseja una implantación recursiva del proceso de trazado de los rayos.

 



Veamos este proceso a través del ejemplo de la Figura 6. Supongamos un escenario con planos y esferas, todos con un cierto grado de transparencia y reflexión. Siendo E un rayo primario que interseca con la superficie 3, primero calcularemos la luz procedente de las fuentes generando los rayos de sombra S1 y S2; como se ve en la figura, el rayo S2 está bloqueado por el esferoide 4, que al ser opaca anula el efecto de la fuente Lb. Además, como la superficie 3 es conductora de la luz, se ha de trazar el rayo transmitido T1. Puesto que la superficie es al mismo tiempo reflectora, también ha de trazar se el rayo reflejado (R1). De modo similar se irían generando y evaluando los rayos Si, Rt y Ri, para poder determinar finalmente el color del rayo E.

La Figura 7 muestra el árbol de rayos correspondiente al ejemplo anterior. La raíz del árbol representa el rayo primario procedente del ojo, y cada uno de los nodos es una intersección con un objeto. De cada nodo salen por un lado los rayos de sombra, y por otro los rayos reflejados y transmitidos, en el caso de que los objetos sean reflexores y transmisores, respectivamente.




Algunas demostaciones:

Cálculo de la aportación local en ray tracing no difiere mucho de su homólogo en ray casting. En la contribución local normalmente se utiliza el modelo de intensidad de Phong, ampliado con la componente (local) transmitida. No se han de confundir las componentes especular y transmitida del modelo de intensidad de Phong (contribución local), con las contribuciones reflejada y transmitida del modelo de iluminación semiglobal ya que, entre otras razones, el cálculo de los respectivos vectores de dirección varía ligeramente, como pronto veremos.

Recordando el modelo de Phong, el cálculo del vector director de la componente especular venía dado por el vector unitario R = L + 2Ncosφ, o bien, R = 2N(N·L) – L




donde 1

η y 2

η son los índices de refracción de los medios lumínicos 1 y 2 en el vacío

(Figura 11).


No hay comentarios: