1 Ray Tracing: Fundamentos y tendencias actuales Andres Mariño 04-37225, Rubén Torres 04-37653 Resumen (Abstract)—Se explican los fundamentos básicos del método de RayTracing, antecedentes, características y efectos logrados con esta técnica asi como desventajas. Optimizaciones al algoritmo y nuevos efectos logrados con estas optimizaciones. Reseña de los fabricantes que han logrado ejecutar raytracing en tiempo real. Palabras clave— Algoritmo ray MonteCarlo, Ray tracing en tiempo real tracing, Método de I. INTRODUCCIÓN L A técnica del Ray-tracing es muy importante en la Computación Gráfica ya que permite generar imágenes muy reales especialmente en cuanto a efectos de reflexión, refracción, objetos semitransparentes y sombras. Esta técnica fue ideada conceptualmente hace mucho tiempo y sigue siendo utilizada, aunque con varias optimizaciones. El gran costo computacional había imposibilitado su utilización en tiempo real, por lo cual la técnica quedó limitada a la producción de videos y animaciones. Sin embargo, a partir del año 2005 surgió la posibilidad de realizar renders con R.T en tiempo real, dando inicio a una nueva era de desarrollo de este método. II. FUNDAMENTOS DEL RAY-TRACING A. Antecedentes Los orígenes de Ray-Tracing datan de 1637. Originalmente fue utilizado como marco de trabajo teórico en un experimento realizado por Rene Descartes. Este experimento consistía en un esfera de vidrio llena de agua, esta se observaba y de acuerdo con los conocimientos de reflexión y refracción se logro demostrar que si el sol se encuentra a 42 grados respecto al observador se forma el arcoíris. Las nociones del Ray-Tracing a nivel computacional empezaron en 1969, en 1980 aparece el paradigma del RayTracing el cual engloba en un solo proceso, la refracción, reflexión, sombras y la remoción de superficies ocultas. Este proceso crea imágenes “Súper Reales”, a un coste computacional muy alto. En la década de los 80 se investigo en acerca de cómo reducir el coste de este algoritmo así como mejorar su eficiencia. B. Funcionamiento del algoritmo La técnica del Ray-Tracing es la manera mas sencilla de seguir el camino de un rayo de luz en la escena, esta técnica consiste en punto de vista o cámara (el observador) lanzar un rayo de luz infinitamente delgado a través de cada pixel hacia la escena siguiendo el camino del rayo, si este rayo intercepta un objeto en la escena se calcula si hay reflexión o refracción del rayo de luz en el objeto, si la hay se realiza recursivamente con cada rayo de luz que sale del objeto. hasta que el rayo llega a una fuente de luz, en el proceso de intercepción del rayo de luz con los objeto también se hace el computo para el sombreado y si la superficie es visible o no. Como cada rayo de luz se considera infinitamente delgado se considera que estos no esparcen la reflexión ni la refracción. Pseudo-codigo 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) 2 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 } } C. Interseccion de objetos La parte mas costosa de este algoritmo es el cálculo de las intersecciones de rayos con los objetos, si se hace una implementación ingenua como comparar cada rayo contra cada objeto en la escena se estima que el 95% del coste de ejecución se realiza en el calculo de las intersecciones. Por lo tanto se han desarrollado técnicas y estrategias para mejorar el cálculo de dichas intersecciones entre el rayo y los objetos estas son: -Rayo /esfera 1. Se busca si el origen del rayo se encuentra afuera de la esfera. 2. Se busca el punto mas cercano del rayo con respecto al centro de la esfera. 3. Si el punto se encuentra afuera de la esfera y apunta lejos de la esfera el rayo no pasa por ella. 4. Si no se busca la raíz cuadrada de la distancia mas cercana del rayo hacia la superficie de la esfera. 5. Si el valor es negativo el rayo no le pega a la esfera. 6. Si no se encuentra desde arriba la distancia entre la superficie y el rayo 7. Calcular las coordenadas de la intersección. Calcula la normal en el punto de intersección. El calculo rayo/esfera se realiza de manera muy eficiente -Rayo /Poligono 1. Se obtiene la ecuación del plano que contiene al polígono. 2. Se chequea si hay una intersección entre el plano y el rayo. 3. Se chequea si el polígono se encuentra en la intersección. Es fácil de implementar pero el coste de su ejecución es alto. - Rayo / cuadrante Es un proceso similar al de la esfera. - Rayo / caja Se subdivide la caja en varios planos y se calculan las intersecciones El cálculo de otras figuras en general se realiza diviendo la figura en figuras mas simples como esferas, cajas, etc. . . D. Manejo de sombras El manejo de las sombras en este algoritmo es correcto las sombras se manejan de manera adecuada y tienen la intensidad y la forma del objeto y también se maneja sombras difusas. El manejo de las sombras en este algoritmo también eleva su costo computacional y este se eleva de manera muy rápida a medida que hayan mas fuentes de luz en la escena. Una manera de hacer mas eficiente el manejo de las sombras es llevar buffer de luz que este a medida que se sigue el camino del rayo de luz se van guardando los objetos que intercepta y a la profundidad con que se encuentra respecto a la fuente de luz. E. Deficiencias El algoritmo debido a los cálculos que tiene que hacer para saber si los rayos de luz interceptan objetos o no en la escena suele tener un costo computacional muy elevado lo cual hasta la época actual casi hacia imposible hacer este algoritmo en tiempo real. Otro defecto que posee este algoritmo es que crea imágenes “Super-Reales”, estas imágenes suelen ser muy pulidas y muy perfectas y en la realidad encontrar una escena que se parezca a una imagen producida por el este algoritmo se convierte en algo muy poco factible. III. MÉTODOS INVOLUCRADOS EN EL RAY-TRACING A. Ray-Tracing recursivo. Este algoritmo modela correctamente el transporte especular y transparente. El coste es de O(Nrays x Nobj). Donde Nrays = Número de rayos y Nobj es el número de objetos. El “cuello de botella” sería la operación de intersección que consume la mayor cantidad de recursos de procesamiento. Para optimizar este algoritmo las opciones que podemos considerar son: Limitar el número de rayos, con lo cual se pierde algo de definición o sino Acelerar el test de intersección, con otras técnicas que agilizan el proceso, como trazar rayos de ordenes superiores, beam tracing, etc. B. Utilización de coherencia. Esta optimización permite agilizar el proceso de intersecciones mediante volúmenes englobantes, jerarquía de volúmenes englobantes y subdivisión espacial (regular y adaptativa). Los volúmenes englobantes aceleran el test de intersección ya que si el rayo no intersecta al volumen englobante, se descarta el objeto, sino, se procede a subdividir el volumen para tener más exactitud. C. Métodos de MonteCarlo. Se basa en tratar el problema como un proceso estocástico en lugar de determinístico y formula una solución como 3 parámetro de una variable aleatoria. El método es muy útil en el área de la iluminación global. Entre sus aplicaciones están el Ray-Tracing distribuído y el Path-Tracing. También se utiliza en otras áreas como simulaciones nucleares, tansferencia de calor, etc. Ray Tracing distribuído. En lugar de un rayo, lanza varios rayos por píxel de manera estocástica e integra la iluminación de cada uno de ellos. Este algoritmo permite mejorar notablemente el antialiasing y produce efectos que proporcionan más realismo como lo son: penumbra (en lugar de sombras perfectas), profundidad de campo (los objetos lejanos se ven mas borrosos), glossy (distribuye muestras segun reflectacia especular noideal) y motion blur (distribuye muestras en el tiempo). Path Tracing. Trata la simulación de los rayos como un proceso random walk. 3Delight Autodesk 3ds max Autodesk Maya Autodesk Softimage Anim8or Aqsis ASAP Blender Brazil r/s BRL-CAD Bryce Cinema 4D form•Z RenderZone Plus Gelato PhotoRealistic Imagine 3D RenderMan Indigo Renderer POV-Ray Kerkythea Radiance LightWave 3D Real3D (3D modeling ghtWorks software) LuxRender Realsoft3D Manta Sunflow Interactive Ray TurboSilver Tracer V-Ray Maxwell Render YafRay Mental ray Holomatix Rendition Modo OptiX Picogen Pixie V. RAY-TRACING EN TIEMPO REAL Figura 1.1 Proceso Random Walk Es ineficiente como algoritmo pero resuelve la ecuación de la luz de forma más precisa que ray tracing convencional IV. SOFTWARE QUE IMPLEMENTA RAY-TRACING Hay una gran cantidad de paquetes de software que ofrecen ray-tracing como técnica de render. Cada día películas como “Lord of the rings” nos sorprenden con sus gráficos foto-realistas. Ahora imaginemos esos gráficos pero siendo producidos en tiempo real, para aplicaciones como video-juegos. Esto representa un reto en cuanto a recursos computacionales. Es por esta razón que esta técnica estaba limitada a la producción cinematogáfica, ya que cada frame podía tardar unas cuantas horas en ‘renderizar’. Por primera vez en el año 2005 surge un ejemplo de R.T. en tiempo real, este render fue logrado con 3 FPGa’s y la velocidad de render era de alrededor de 25 frames por segundo. Más adelante surge openRT, que es una nueva interfaz que se espera forme parte de openGL para generar R.T. interactivo. Con esta interfaz se produjo una versión de Quake 4, con R.T. en tiempo real, produciendo unos efectos increíbles un cuanto a sombras y reflejos. Otros fabricantes no se quedan atrás y hace un tiempo aparece el modelo de IBM para generar R.T.R.T. esta vez utilizando tres playStation 3 trabajando en paralelo para producir la imagen interactiva. La Intel también publicó noticias sobre como logran el R.T.R.T. con un procesador de 8 núcleos mediante su propio algoritmo código cerrado. Asimismo la marca de tarjetas de video NVidia no se queda atrás y nos presenta su sistema optiX engine en SIGGRAPH del 2009 que realiza real time R.T. con gráficos excepcionalmente buenos y capacidad de generar mapas de Voxels. VI. RAY TRACING EN TIEMPO REAL REFERENCES [1] [2] http://medialab.di.unipi.it/web/IUM/Waterloo/node92.html http://en.wikipedia.org/wiki/Ray_tracing_%28graphics%29 4 [3] [4] [5] [6] [7] http://eliax.com/index.php?/archives/5254-NVIDIA-muestraRaytracing-en-tiempo-real-y-alta-definicion.html http://eliax.com/index.php?/archives/5254-NVIDIA-muestraRaytracing-en-tiempo-real-y-alta-definicion.html http://teleobjetivo.org/blog/ray-tracing-en-tiempo-real-en-la-ps3.html http://teleobjetivo.org/blog/quake-4-usando-ray-tracing-en-tiemporeal.html . http://ima.udg.edu/~gonzalo/teaching/tranpas/Ray-tracing.pdf