inmensia |
Ray Tracing: Traza de Rayos Hacia Atrás
Juan Mellado, 8 Diciembre, 2005 - 21:32
Explicación en detalle del algoritmo de traza de rayos hacia atrás utilizado por los sistemas de Ray Tracing para obtener el origen de los rayos que alcanzan al observador y calcular la intensidad de la luz que transportan. Traza de Rayos Hacia AtrásLas imágenes generadas por un sistema de Ray Tracing son matrices de puntos de color donde cada punto representa el color de un objeto intersectado en ese punto o un color de fondo por defecto. El color concreto asignado a un punto de intersección con un objeto es el resultado de aplicar un modelo de iluminación a dicho punto, de forma que el color obtenido sea igual a la suma de las intensidades de todos los rayos que recaen en él y que alcanzan al observador. Una posible forma de cálculo consistiría en trazar rayos en todas las direcciones desde todas las fuentes, simular los fenómenos de reflexión y transmisión contra los objetos, y ver cual de los rayos resultantes alcanzan al observador. El problema de esta solución es el altísimo coste que representaría trazar todos los rayos. Por no mencionar la ineficiencia del mismo, ya que la mayor parte de los rayos emitidos por las fuentes no alcanzan al observador y no aportan nada a la escena observada. Por ello la solución normalmente adoptada consiste en seguir el camino contrario, es decir, trazar rayos que parten del observador en busca de las fuentes. Este sistema se conoce como traza de rayos hacia atrás. Y la ventaja de esta solución es que minimiza el número de rayos a trazar, pues se centra sólo en los rayos que alcanzan al observador, que son precisamente los que aportan algo a la escena observada. Tipos de RayosEn un sistema de Ray Tracing que utilice traza de rayos hacia atrás pueden distinguirse cuatro tipos de rayos: En la práctica todos estos tipos rayos son iguales, es decir, tienen un punto origen y un vector dirección normalizado. Lo que varía de un tipo a otro es la forma en la que se obtiene su origen y dirección, y la interpretación que se le da a cada uno de ellos. En las siguientes secciones se verá como determinar el origen y dirección para cada tipo de rayo. Rayos PrimariosLos rayos primarios son los primeros en ser lanzados, se corresponden con los rayos que parten del observador y atraviesan el centro de los pixels del plano de proyección, para comprobar si se produce intersección con algún objeto de la escena. Este tipo de rayos fueron objeto de estudio en el artículo dedicado al barrido del plano de proyección. Si para un pixel no se produce intersección el sistema asigna a dicho pixel el color de fondo por defecto y continúa con otro pixel. Por el contrario, si se produce intersección, se calcula el color del punto sumando la aportación de la luz ambiente, la luz emitida por el objeto, la luz directa aportada por las fuentes a través de los rayos de sombra, y la luz aportada por otros objetos mediante los rayos reflejados y transmitidos, según el modelo de iluminación utilizado. Rayos de SombraLos rayos de sombra, también llamados detectores de sombra, son rayos que parten del punto de intersección de los rayos primarios con los objetos y marchan en dirección a cada una de las fuentes de luz presentes en el sistema. Si un rayo en su camino hacia una fuente de luz se encuentra con un objeto el punto se considera en sombra con respecto a esa fuente y la aportación directa de esa fuente se considera nula. Por el contrario, si el rayo alcanza la fuente sin intersectar ningún objeto, entonces se calcula la aportación de dicha fuente mediante el cálculo de los fenómenos de reflexión difusa y especular sobre la superficie. ![]() En la imagen se observa como un rayo primario P, que parte del observador, intersecta una esfera en el punto Q. A partir de dicho punto de intersección se trazan dos rayos de sombra, uno por fuente. El rayo S1, que se dirige a la fuente 1, es interrumpido por otra esfera, por lo que el punto se considera en sombra con respecto a la fuente 1. El otro rayo de sombra, S2, se dirige y alcanza sin problemas la fuente 2, por lo que es preciso calcular el aporte de color de la fuente debido a la reflexión difusa y especular. El origen de todos los rayos de sombra es el punto de intersección Q, y la dirección de avance hacia una fuente i es el vector normalizado S{i} que une el punto Q con el origen de la fuente L{i}: S{i} = (L{i} - Q) / |L{i} - Q|
Rayos ReflejadosLos rayos reflejados tienen su origen en el punto de intersección de los rayos primarios con los objetos, y su dirección es la dirección de reflexión especular de los rayos primarios. Su propósito es el de obtener la aportación de color debida a otros objetos. Es decir, si el punto intersectado pertenece a una superficie reflectante entonces reflejará la luz proveniente de otros objetos en la dirección de reflexión. Si el rayo reflejado no intersecta ningún objeto entonces no aporta intensidad. Por el contrario, los rayos que intersectan un objeto aportan la intensidad del objeto intersectado. De esta forma, los rayos reflejados se convierten en rayos primarios si intersectan un objeto, ya que es necesario volver a trazar rayos de sombra, reflejados, y transmitidos, en el objeto intersectado para obtener la intensidad aportada por dicho objeto. ![]() La imagen muestra como un rayo primario P alcanza la superficie de una esfera reflectante en el punto Q1. A partir de dicho punto se traza un nuevo rayo R1, resultado de la reflexión del rayo primario incidente. Como este nuevo rayo intersecta a otra esfera en el punto Q2, entonces se repite el proceso desde el principio, trazando dos nuevos rayos de sombra, S3 y S4, y un nuevo rayo reflejado, R2. Para simplificar el esquema se han omitido deliberadamente los rayos de sombra S1 y S2 que se trazarían desde Q1. El origen del rayo reflejado es el punto Q, y su dirección de avance el vector normalizado R resultante de reflejar especularmente el rayo primario incidente: R = I - 2 * (I · N) * N
Siendo I el vector unitario dirección del rayo primario incidente, y N la normal al objeto en el punto de intersección. Recuérdese del artículo dedicado al estudio de los mecanismos de transporte de la luz, que el vector R resultante es unitario. Rayos TransmitidosEl propósito de los rayos transmitidos es, en esencia, el mismo que el de los reflejados. Tienen su origen en el punto de intersección de los rayos primarios con los objetos y su dirección es la dirección de transmisión especular de los rayos primarios. Sea Q el punto de intersección, I el vector unitario dirección del rayo primario incidente, N la normal al objeto en el punto de intersección, y n21 el índice de refracción del medio del rayo incidente con respecto al medio del objeto. El origen del rayo transmitido es el punto Q, y su dirección de avance el vector normalizado T resultante de refractar especularmente el rayo primario incidente: T = (I / n21) + ( ( (-I · N) / n21) - SQRT(1 + ( ( (-I · N)^2 - 1) / n21^2) ) ) * N
Es interesante recordar del artículo dedicado al estudio de los mecanismos de transporte de la luz, que el vector T resultante es unitario, y que si el discriminante de la raíz cuadrada es negativo entonces no se produce refracción porque el ángulo de entrada supera el ángulo crítico de la superficie. Trazador de RayosDe lo expuesto en apartados anteriores debe ser claro que el proceso de traza de rayos hacia atrás es un proceso recursivo. Se comienza trazando un rayo primario, y a partir de él un rayo reflejado (y transmitido) que se convierte a su vez en primario, y vuelta a empezar. El resultado de todo el proceso puede verse como la construcción de un árbol de rayos, donde el nodo raíz es un rayo primario que intersecta un objeto, a partir del cual se trazan rayos de sombra, y los nodos hijos son los rayos reflejados y transmitidos. De forma que el color resultante es la suma de las intensidades calculadas en todos los nodos del árbol. Debido a que se pueden diseñar escenas en las que el número de rayos a generar sea excesivamente elevado, se suele limitar la profundidad del árbol con dos técnicas. La primera técnica sencillamente limita la profundidad del árbol a un número determinado de niveles, que se introduce como un parámetro al sistema. La segunda técnica limita la profundidad en función de la intensidad de los rayos generados; si el aporte de un rayo no supera un umbral mínimo entonces se detiene la construcción de esa rama del árbol. PseudocódigoLas siguientes líneas mostradas a continuación representan un pseudocódigo bastante explicativo de los pasos a realizar para la construcción del árbol de rayos y la aplicación del modelo de iluminación: Trazador() TrazarRayoPrimario(Rayo, Profundidad) retorna Color TrazarRayosSecundarios(Rayo, Profundidad, Objeto, Punto, Normal) retorna Color Por cada Fuente de Luz i presente en la Escena: Si la Profundidad es menor o igual que la máxima permitida: Si el Objeto es reflectante: Si el Objeto es transparente: Color += Aportación de la Luz Emitida por el Objeto Retornar Color ¿No encontró lo que buscaba?Utilice el buscador para encontrar más páginas en esta web o en toda Internet.Más páginas en esta web sobre RayTracing |