2. Capítulo 4. Índice 1. Introducción 2. Eliminación de partes ocultas 3. Tratamiento informático del color 4. Iluminación y sombreado sencillos 4.1. Modelo general de reflexión y simplificaciones 4.2. Modelo de Iluminación Local (MIL) simplificado 4.3. Métodos de sombreado sencillos. 4.4. Detalles de las superficies 4.5. Sombras arrojadas 4.6. Superficies transparentes y Especulares 4.7. Ray-tracing 5. Métodos de síntesis fotorealista. Iluminación global. 6. Métodos de visualización de volúmenes.
3.
4.
5.
6.
7.
8.
9. 4.2. MIL simplificado. Índice. 4.1. Modelo general de reflexión local de luz y simplificaciones 4.2. Modelo de Iluminación Local (MIL) simplificado 4.2.1. Componente ambiental. 4.2.2. Componente difusa 4.2.3. Atenuación con la distancia 4.2.4. Modelos para la componente pseudo-especular 4.3. Métodos de sombreado sencillos. 4.4. Detalles de las superficies 4.5. Sombras arrojadas 4.6. Superficies transparentes 4.7. Superficies especulares 4.8. Ray-tracing
10.
11.
12. 4.2.1. MIL Simple. Componente ambiental. Aquí vemos una imagen en la cual el factor k a va en aumento desde 0
13.
14.
15. 4.2.1. MIL Simple. Componente difusa. Esta componente difusa suele expresarse como: I = k d I p ( N · L ) donde el punto ( · ) indica producto escalar, N es el vector normal a la superficie en x , y L es el vector (unitario) que va desde el punto x hacia la fuente de luz (que es un punto). x N L
16. 4.2.1. MIL Simple. Componente difusa. Aquí vemos una imagen en la cual el factor k d va en aumento desde 0
17. 4.2.3. MIL Simple. Atenuación con la distancia La luz de una fuente que alcanza un objeto se atenúa con la distancia m Podemos incorporar este factor en la expresión anterior I = k d f att I p ( N · L ) La intensidad de luz decrece con el cuadrado de la distancia, luego, si d es la distancia entre la fuente y x entonces podemos hacer: f att = 1 / d 2 Sin embargo, de esta forma en las imágenes la luz cambia muy bruscamente. Una alternativa es usar tres constantes c 1 c 2 y c 3
18.
19. 4.2. MIL Simple. Aquí k a crece hacia la derecha y k d hacia abajo
20.
21.
22.
23.
24. 4.2.4. MIL Simple. Componente pseudo-especular Aquí k s crece hacia la derecha y hacia abajo
25. 4.2.4. MIL Simple. Componente pseudo-especular Aquí n crece hacia la derecha y hacia abajo
26. 4.2.4. MIL Simple. Componente pseudo-especular Los modelos anteriores pueden combinarse para producir otro nuevo con todas las componentes (ambiental + difusa + especular) I R = k a O dR I aR + f att I pR [ k d O dR ( N · L ) + k s O sR ( V · R ) n ] Aquí hemos usado un color del objeto, que afecta a la parte especular, dicho color RGB es ( O sR ,O sG , O sB ) Finalmente, si hay muchas ( m ) fuentes de luz, será necesario sumar la contribución de cada una de ellas: I R = k a O dR I aR + f i I piR [ k d O dR ( N · L i ) + k s O sR ( V · R i ) n ] i =1 m
27. 4.2.4. MIL Simple. Componente pseudo-especular Aquí k d crece hacia la derecha y k s hacia abajo
28.
29.
30.
31. 4.2.5. MIL Simple. Atenuación atmosférica Ejemplo: Fuente OpenGL obtenido y adaptado de: http://www.sgi.com/products/software/opengl/examples/redbook/source/fog.c
32. 4.3. Métodos de Sombreado Sencillo. Índice. 4.1. Modelo general de reflexión local de luz y simplificaciones 4.2. Modelo de Iluminación Local (MIL) simplificado 4.3. Métodos de sombreado sencillos. 4.3.1. Sombreado plano 4.3.2. Interpolación de intensidades (Gouroud) 4.3.3. Interpolación de normales (Phong) 4.4. Detalles de las superficies 4.5. Sombras arrojadas 4.6. Superficies transparentes. 4.7. Superficies especulares 4.8. Ray-tracing
33.
34.
35. 4.3.1. Sombreado. Sombreado Plano. Si los objetos son curvos (no están formados por caras planas), lo usual es aproximarlos por caras planas. Aparecen dos inconvenientes: Se produce un efecto de bandas Match que acentúa los contrastes en los bordes entre polígonos (debido a la inhibición lateral de las neuronas fotoreceptoras en la retina) El objeto no aparece como curvo, si no a facetas, a no ser que el tamaño de los polígonos proyectados sea inferior a un pixel.
37. 4.3.1. Sombreado. Sombreado Plano. Además de lo anterior, si el observador o la fuente de luz están cercanas al objeto, la iluminación constante en cada cara no es correcta. fuente de luz observador superficie R R’ V’ V El ángulo entre R y V varía mucho, igual pasa con el ángulo entre L y la normal. Por tanto, la intensidad reflejada cambia mucho. L L’
38.
39.
40. 4.3.2. Sombreado. Interpolación de intensidades (Gouroud) I 2 ( x 2 ,y 2 ) I 1 ( x 1 ,y 1 ) I 3 ( x 3 ,y 3 ) I ( x,y ) En el caso de que el polígono sea un triángulo (es lo más frecuente), cada componente del color se interpola linealmente igual que las Z en Z-buffer Las tuplas ( x , y , I R ) pueden interpretarse como puntos de un plano cuya ecuación implícita es: a R x + b R y + c R I + d R = 0 y por tanto, podemos escribir: I R = f R ( x,y ) = e R x + g R y + h R I G = f G ( x,y ) = e G x + g G y + h G I B = f B ( x,y ) = e B x + g B y + h B
46. 4.3.2. Sombreado. Interpolación de intensidades (Gouroud) El método de Gouroud presenta un problema: la posible perdida de zonas brillantes dentro del triángulo. L N R=V Punto con máximo brillo (según modelo de Phong) Curva real. Aproximación poligonal + interpolación Brillo menor en los extremos del segmento
47. 4.3.2. Sombreado. Interpolación de intensidades (Gouroud) En general, el problema anterior se presenta siempre que aproxima una función continua por una serie de segmentos de recta.. Este problema se puede resolver discretizando a más resolución, pero esto incrementa los tiempos de cálculo.
52. 4.4. Detalles de las superficies. Índice. 4.1. Modelo general de reflexión local de luz y simplificaciones 4.2. Modelo de Iluminación Local (MIL) simplificado 4.3. Métodos de sombreado sencillos. 4.4. Detalles de las superficies 4.4.1. Polígonos de detalle 4.4.2. Texturas 4.4.3. Mapas de perturbación de la normal 4.5. Sombras arrojadas 4.6. Superficies transparentes. 4.7. Superficies especulares 4.8. Ray-tracing
53.
54.
55.
56.
57.
58. 4.4.2. Detalles. Texturas. Aquí vemos un ejemplo de una textura aplicada a la tetera Se usa un algoritmo simplificado de OpenGL (1 texel por pixel) textura sin sombreado sombreado sin textura Resultado (modulación)
59. 4.4.2. Detalles. Texturas. En el caso de mallas de polígonos, las correspondencia f se hace asignando coordenadas de textura a los vértices, y usando interpolación lineal (es el esquema de OpenGL) Imagen del libro “OpenGL Programming Guide”, disponible en: http://www.glprogramming.com/red/chapter09.html ( u,v ) U V
60.
61. 4.4.2. Detalles. Mapas de perturbación de la normal Si N es la normal original (de longitud unidad), entonces podemos calcular la normal modificada N’ usando la siguiente fórmula: N’ = N + d u ( N × Q v ) - d v ( N × Q u ) donde: T = textura de grises que controla las alturas (valores escalares). P = punto a sombrear ( u , v ) = coordenadas en el espacio de la textura del punto P d u = dT ( u,v ) /du (derivada de T respecto de u en ( u , v )) d v = dT ( u,v ) /dv (derivada de T respecto de v en ( u , v )) Q u = dF ( u,v ) /du (vector tangente a la superficie en P, respecto de u ) Q v = dF ( u,v ) /dv (vector tangente a la superficie en P , respecto de v ) F = función de parametrización de la superficie original
62. 4.4.2. Detalles. Mapas de perturbación de la normal Ejemplo: Imágenes de Fredo Durand y Barb Curtler: http://groups.csail.mit.edu/graphics/classes/6.837
64. 4.4.2. Detalles. Mapas de perturbación de la normal Aquí vemos un ejemplo de bump-mapping combinado con texturas e iluminación:
65. 4.5. Sombras arrojadas. Índice. 4.1. Modelo general de reflexión local de luz y simplificaciones 4.2. Modelo de Iluminación Local (MIL) simplificado 4.3. Métodos de sombreado sencillos. 4.4. Detalles de las superficies 4.5. Sombras arrojadas 4.5.1. Polígonos de detalle 4.5.2. Algoritmo de Weiler-Atherton-Greenberg 4.5.3. Algoritmo de Z-Buffer 4.6. Superficies transparentes. 4.7. Superficies especulares 4.8. Ray-tracing
66.
67.
68.
69.
70. 4.5.3. Sombras arrojadas. Z-buffer También se puede usar el Z-buffer, para sombras y para EPO observador (Z-buffer B) fuente de luz Z-buffer A p q
73. 4.5.4. Sombras arrojadas. Z-Buffer Se soluciona aumentando la resolución del Z-buffer de la fuente de luz (aunque hay otros algoritmos) Este algoritmo puede dar problemas para objetos muy lejanos a la fuente de luz (las sombras aparecen escalonadas). http://www.devmaster.net/ articles/shadow_techniques/
74. 4.5.4. Sombras arrojadas. Z-Buffer Este algoritmo puede usarse para “proyectar” texturas sobre los objetos http://developer.nvidia.com/object/cedec_shadowmap.html
75. 4.6. Superficies transparentes. Índice. 4.1. Modelo general de reflexión local de luz y simplificaciones 4.2. Modelo de Iluminación Local (MIL) simplificado 4.3. Métodos de sombreado sencillos. 4.4. Detalles de las superficies 4.5. Sombras arrojadas. 4.6. Superficies transparentes. 4.6.1. Refracción 4.6.2. Método simple. 4.6.3. Semitransparencia. 4.7. Superficies especulares 4.8. Ray-tracing
76.
77.
78. 4.6.1. Superficies transparentes. Refracción. T = sen ( t ) M - cos ( t ) N donde: I = dirección de luz incidente (norm.) N = normal a la superficie M = N ( N I ) cos ( i ) = I•N sen ( i ) = ( 1 - cos 2 ( i )) sen ( t ) = sen ( i ) n i / n t cos ( t ) = ( 1 - sen 2 ( t )) T M N -N I i t n i n t n t sen ( t ) = n i sen ( i ) La luz incidente en la dirección I se refracta en la dirección T
83. 4.7. Superficies especulares. Índice. 4.1. Modelo general de reflexión local de luz y simplificaciones. 4.2. Modelo de Iluminación Local (MIL) simplificado. 4.3. Métodos de sombreado sencillos. 4.4. Detalles de las superficies. 4.5. Sombras arrojadas. 4.6. Superficies transparentes. 4.7. Superficies especulares 4.7.1. Mapas de entorno 4.7.2. Duplicación 4.8. Ray-tracing
84.
85.
86. 4.7.1. Superficies especulares. Mapas de entorno. Ejemplo de mapas de entorno: Imágenes de Fredo Durand y Barb Curtler: http://groups.csail.mit.edu/graphics/classes/6.837
87. 4.7.1. Superficies especulares. Mapas de entorno. Ejemplo de mapas de entorno:
88. 4.7.1. Superficies especulares. Mapas de entorno. Ejemplo de mapas de entorno (más texturas y bump-mapping) http://developer.nvidia.com/object/reflective_bump_mapping.html
89.
90. 4.7.2. Superficies especulares. Duplicación. Ejemplo: (combinado con sombras arrojadas, y texturas) http://www.opengl.org/resources/code/samples/mjktips/TexShadowReflectLight.html
91. 4.8. Ray-Tracing. Índice. 4.1. Modelo general de reflexión local de luz y simplificaciones 4.2. Modelo de Iluminación Local (MIL) simplificado 4.3. Métodos de sombreado sencillos. 4.4. Detalles de las superficies 4.6. Superficies transparentes. 4.7. Superficies especulares 4.8. Ray-tracing 4.8.1. Algoritmo básico. 4.8.2. Sombras arrojadas 4.8.3. Mapas de texturas. 4.8.4. Superficies especulares y transparentes. 4.8.5. Análisis. 4.8.6. Ejemplos 4.8.7. Extensiones.
92.
93.
94. 4.8.1. Ray-Tracing. Algoritmo básico Una vez que se conoce el punto, se puede calcular el vector normal al objeto en dicho punto. Con todo esto podemos evaluar el modelo de iluminación local, y asignar color al pixel. N P V R L plano de visión fuente de luz Con esto podemos incluir objetos curvos (esferas, cilindros, conos, etc..)
95.
96.
97.
98. 4.8.4. Ray-Tracing. Esquema del algoritmo. El esquema del algoritmo es como sigue: Sea O = posición del observador, en CM (coords. del mundo) Para cada pixel ( i , j ) de la imagen Sea Q = punto central (en CM) del pixel ( i , j ) en el plano de visión Sea W = vector desde O hasta Q normalizado Sea I = RayTracing ( O, W , 1 ) Fijar pixel ( i,j ) con el color I La función RayTracing es recursiva, devuelve un color, y tiene un parámetro que sirve para que la recursión no se haga infinita.
99. 4.8.4. Ray-Tracing. Esquema del algoritmo. La funcion RayTracing tiene el siguiente esquema Funcion Ray-Tracing( punto O , vector W , entero n ) Si n > maximo devolver color negro Sea A = primer objeto visible desde O en la dirección W Si no existe ningún objeto devolver color de fondo Sea P = punto de A alcanzado por el rayo ( P=O+dW ) Sea N = vector normal a A en P Sea ( u,v ) = coordenadas de P en el espacio de la textura de A Hacer I = EvaluaMIL ( A, P, N, u,v,n ) Devolver I
100. 4.8.4. Ray-Tracing. Esquema del algoritmo. Función EvaluaMIL ( objeto A , punto P , vectores N, W , reales u,v , entero n ) Para cada fuente de luz puntual con posición C i Hacer S i = V ( P, C i ) Sea V = -W Obtener todos los atributos del objeto A en P ( k a k d k s k t k ps O dR O dG ..etc....) Sea I = resultado de evaluar el MIL (según fórmula de la página 65) Si k t > 0 Sea T = vector refractado respecto de V , siendo la normal N Hacer I = I + k t * RayTracing ( P, T, n+1 ) Si k ps > 0 Sea R = vector reflejado respecto de V , siendo la normal N Hacer I = I + k ps * RayTracing ( P, R, n+1 ) devolver I