Laboratorio de Computación Grafica Universidad Central de Venezuela Trazado de Rayos Ernesto Coto
Contenido Introducción Reflexión y refracción El algoritmo básico Iluminación Consideraciones de eficiencia Ernesto Coto - Trazado de Rayos
Conocimientos Previos Objetos 3D Iluminación y Sombreado Modelos de iluminación local Geometría básica Subdivisión espacial Ernesto Coto - Trazado de Rayos
Introducción
Introducción Los métodos de sombreado de Flat, Gouraud y Phong utilizan modelos de iluminación local Rayo reflejado Rayo incidente Ojo Luz Superficie Ernesto Coto - Trazado de Rayos
Introducción Un modelo de iluminación global considera la luz que es reflejada desde otras superficies hacia la superficie con la que se trabaja Luz Ojo Rayo incidente Rayo reflejado Superficie Ernesto Coto - Trazado de Rayos
Introducción El Trazado de Rayos (Ray Tracing) es un método de despliegue de escenas que esta basado en Iluminación global Original de Turner Whitted (1980) Ernesto Coto - Trazado de Rayos
Introducción El Trazado de Rayos maneja de manera apropiada: Reflecciones y Refracciones Transparencia Sombras Ernesto Coto - Trazado de Rayos
Introducción Ampliamente usado en: Entretenimiento (Cine, Comerciales, etc.) Preproducción de juegos Simulación Ernesto Coto - Trazado de Rayos
Reflexión y Refracción
Reflexión y Refracción La luz incidente a una superficie en general es parcialmente reflejada y parcialmente transmitida como un rayo refractado Rayo incidente Rayo reflejado Superficie Rayo refractado Ernesto Coto - Trazado de Rayos
Reflexión De acuerdo a la “Ley de reflexión” el ángulo del rayo de incidencia es igual al ángulo del rayo reflejado N Rayo incidente Rayo reflejado i = r Superficie Ernesto Coto - Trazado de Rayos
Refracción Refracción es el desvío del rayo de luz cuando entra a un medio donde la velocidad del rayo es diferente N Rayo incidente i Superficie t Rayo refractado Ernesto Coto - Trazado de Rayos
Refracción La cantidad de desvío depende del índice de refracción de los dos materiales y es descrita por la ley de Snell N Medio1 1 i Medio2 2 t Ley de Snell Ernesto Coto - Trazado de Rayos
Reflexión y Refracción Rreflex = 2N(N · Rin) - Rin Rin i r t = ((N · Rin) – 1 -2(1- (N · Rin)2))N - Rin Rrefrac Donde =1 /2 Ernesto Coto - Trazado de Rayos
El algoritmo básico
El algoritmo básico Simular rayos de luz desde la fuente de luz hacia el ojo Plano Imagen Objeto Luz Ojo Rayos de Luz Ernesto Coto - Trazado de Rayos
Trazado hacia adelante Trazar los rayos desde la luz Luz Plano Imagen Rayos de Luz Ojo Objeto Ernesto Coto - Trazado de Rayos
Trazado hacia atrás Trazar los rayos desde el ojo hasta la escena Luz Plano Imagen Ojo Objeto Ernesto Coto - Trazado de Rayos
El algoritmo básico Trazar un rayo por cada píxel en el plano imagen calcularImagen() { para cada píxel i, j en la imagen rayo.inicializar(); imagen[i][j] = trazarRayo(rayo); } Ernesto Coto - Trazado de Rayos
El algoritmo básico Trazar un rayo por cada píxel en el plano imagen Ojo Plano Imagen Ernesto Coto - Trazado de Rayos
El algoritmo básico Trazar el rayo trazarRayo(rayo) { golpearObjeto(rayo, triángulos, p, n); si(objeto es luz) retornar(color de la luz); sino retornar(iluminación(p, n)); } Ernesto Coto - Trazado de Rayos
Iluminación
Iluminación Color de la superficie iluminación(punto) { para cada luz color += phong(punto) + c1_obj*trazarRayo(reflejado) + c2_obj*trazarRayo(refractado) retornar(color); } Ernesto Coto - Trazado de Rayos
Iluminación Prueba de Sombra Trazar un rayo desde el objeto hacia la luz en busca de objetos oclusores Ojo Objeto oclusor Ernesto Coto - Trazado de Rayos
Iluminación Color de la superficie iluminación(punto) { para cada luz color += phong(punto) si(golpearObjeto(rayo de sombra)) color *= atenuación color += c1_obj*trazarRayo(reflejado) + c2_obj*trazarRayo(refractado) retornar(color); } Ernesto Coto - Trazado de Rayos
Iluminación Terminación MUY COSTOSO PODRIA NUNCA TERMINAR !!!!! Un rayo se termina si no hubo intersección De lo contrario se termina solo al alcanzar la luz, pero: MUY COSTOSO PODRIA NUNCA TERMINAR !!!!! Ernesto Coto - Trazado de Rayos
Consideraciones de Eficiencia
Consideraciones de Eficiencia Criterios posibles de terminación La contribución del rayo reflejado y/o refractado es muy pequeña Se alcanza un nivel de profundidad máximo Ernesto Coto - Trazado de Rayos
Consideraciones de Eficiencia Trazado de rayos optimizado Reducir el número de rayos trazados Reducir el número de cálculos de intersecciones entre los rayos y los objetos Cajas Delimitadoras Jerarquías de Objetos Ernesto Coto - Trazado de Rayos
Resumen Concepto de Modelo de Iluminación Global Reflexión y Refracción Trazado de Rayos Esbozo de la implementación de un Trazador de Rayos Consideraciones de Eficiencia en el Trazado de Rayos Ernesto Coto - Trazado de Rayos
Bibliografía Kay, D.S. Transparency, Refraction and Ray Tracing for Computer Synthesized Images. M.S. Thesis, Program of Computer Graphics, Cornell University, Ithaca, NY. Enero, 1979. Levoy, M.. Efficient ray tracing of volume data. ACM Transactions on Graphics, vol. 9, num. 3, pp. 245-261. Julio,1990. Watt, Alan ; Watt, Mark. Advanced Animation and Rendering Techniques: Theory and Practice. ACM Press. Addison-Wesley Publishing Company. New York, 1992. Watt, Alan. 3D Computer Graphics. 3era edición. Addison-Wesley, 2000. Ernesto Coto - Trazado de Rayos
Preguntas Ernesto Coto - Trazado de Rayos
Iluminación Se utiliza el modelo de iluminación Phong Ojo N R Luz I V Superficie Para cada luz local = IambientalKambiental + IdifusaKdifusa(L.N)+ IespecularKespecular(R.V)n Ernesto Coto - Trazado de Rayos
El algoritmo básico Cálculo de intersecciones golpearObjeto() { para cada triángulo en la escena ¿el rayo interseca el triángulo? si (intersecado y más cercano) salvar la intersección si (intersecado) retornar punto de intersección y normal } Ernesto Coto - Trazado de Rayos
El algoritmo básico El rayo se expresa de forma paramétrica <x, y, z> = <xo, yo, zo> + t * <xd, yd, zd> <x, y, z> = ro + trd t = 2.5 rd = <xd, yd, zd> t = 2.0 ro = <xo, yo, zo> t = 1.0 t = 0.0 Ernesto Coto - Trazado de Rayos
Intersección rd ro p = -(n. ro + D) / (n. rd ) Normal al plano ( Ax + By + Cz + D = 0 ) Normal al plano n = <A, B, C> p rd ro p = -(n. ro + D) / (n. rd ) Ernesto Coto - Trazado de Rayos
El algoritmo básico El algoritmo principal principal() { triángulos = leerTriángulos(); iniciaOjo(); iniciaLuces(); imagen = calcularImagen(triángulos); escribirImagen(imagen); } Ernesto Coto - Trazado de Rayos
Reflexión N NCosi - I R I i NCosi R-I=2NCosi – 2I R=2NCosi – I R=2N(N·I) – I Ernesto Coto - Trazado de Rayos
Refracción n Ley de Snell i sin i = t sin t Sea =i /t = sin t / sin i Sea m = (cos i n - i) / sin i Entonces… t = sin t m - cos t n = (sin t / sin i) (cos i n - i) - cos t n = ( cos i - cos t )n - i i cos i n - i i cos i n i m t t = ? -n como i Ernesto Coto - Trazado de Rayos
Cajas Delimitadoras Ojo Ernesto Coto - Trazado de Rayos
Jerarquías de Objetos Raíz Ernesto Coto - Trazado de Rayos
Octrees Ernesto Coto - Trazado de Rayos