450 likes | 739 Views
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. Conocimientos Previos. Objetos 3D Iluminación y Sombreado
E N D
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
Luz Ojo Rayo reflejado Rayo incidente Superficie Introducción • Los métodos de sombreado de Flat, Gouraud y Phong utilizan modelos de iluminación local 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 • 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
i r 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 = Superficie Ernesto Coto - Trazado de Rayos
i t 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 Superficie 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
i r t Reflexión y Refracción N Rreflex = 2N(N · Rin) - Rin Rin = ((N ·Rin) – 1 -2(1- (N ·Rin)2))N - Rin Rrefrac Donde =1 /2 Ernesto Coto - Trazado de Rayos
Plano Imagen El algoritmo básico • Simular rayos de luz desde la fuente de luz hacia el ojo 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
Plano Imagen m Ojo n El algoritmo básico • Trazar un rayo por cada píxel en el 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 • 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 • 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 • 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
p = -(n. ro + D) / (n. rd ) Intersección • ( Ax + By + Cz + D = 0 ) Normal al plano n = <A, B, C> p rd ro 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
i Reflexión N NCosi - I R 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 in - i) / sin i • Entonces… • t = sintm - cos tn = (sint / sini) (cos in -i) - cos tn = ( cos i- cos t)n -i i cos in - i i cos in 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