Iluminación en GLSL

Anuncio
Técnicas de Iluminación
empleando shaders
Prof. Esmitt Ramírez J.
Septiembre 2010
Iluminación en GLSL
• La idea es explotar al máximo los shaders para
el cálculo de la iluminación
1.
2.
3.
4.
5.
Iluminación en GLSL
Luz direccional
Luz direccional por píxel
Luz Puntual
Reflector
Iluminación en GLSL
Ambiental + Difuso + Especular
• Luz direccional
• Luz puntual (point light)
• Reflector (spotlight)
Iluminación GLSL
• En OpenGL = GL_LIGHTi
Luz direccional
• Distancia infinita de los objetos
• Todos los rayos son paralelos
• Un vector puede ser utilizado para c/punto de
la escena
• Se ejecuta rapidamente comparado con otras
luces
• Imita efectos luminosos como el sol
Luz direccional
Reflexión de Lambert (1728-1777)
“Brillo difuso de una superficie plana es proporcional al coseno
del ángulo formado por la línea de visión y la normal de la
superficie”
• La dirección de la luz en coordenadas de ojo
• Transformar la normal a coordenadas de ojo
Luz direccional
Luz direccional
Luz direccional
• El modelo empleado por OpenGL es el
propuesto por Blinn-Phong (Phong simplificado)
• Phong: “el componente especular es proporcional al
coseno entre el vector reflexión de la luz y el vector del ojo”
L= vector desde la luz hasta el vértice
N= normal de la superficie
Eye= vector desde el vértice al ojo/cámara
R= vector reflejado de L con respecto a N
Luz direccional
• Eye vector = Reflection vector
• Tasa de decaimiento = shininess [0,128]
shininess = 8
shininess = 64
shininess = 128
Luz direccional
• Modelo Blinn-Phong
• Half-vector es un vector con una dirección
intermedia entre el vector Eye y el vector luz
Luz direccional
Luz direccional por píxel
• Normal en coordenadas de ojo y normalizar
• Normalizar vector medio y dirección de la luz
Luz direccional por píxel
Luz puntual
• Simulan luces cercanas a la escena o dentro
de ellas (e.g. lámparas de techo, calle, etc.)
• La dirección de la luz debe ser calculada para
c/vértice
• La luz recibida en la superficie decrementa a
medida que se aleja del foco de luz
(atenuación)
• Atenuación constante, lineal y cuadrática
• Direccional w = 0; Puntual w = 1
Luz puntual
• Atenuación constante, lineal y cuadrática
Luz puntual
Luz puntual
Luz puntual
• Es posible realizarlo todo en un vertex
program
Sin Shader GLSL
Shader GLSL
Spotlight
• Proyección de un fuerte haz de luz que
ilumina un área definida (e.g. teatros y cines)
• Se representa como un cono con:
– Una dirección (spotDirection) que representa el
eje del cono
– Un ángulo del cono (spotCosCutoff)
– Una tasa de decaimiento (spotExponent) para
conocer como disminuye la intensidad de luz del
centro a las paredes del cono
Spotlight
• Utilizaremos el mismo vertex shader que la
Luz Puntual
• Se calcula el coseno entre spotDirection y la
posición de la luz sobre la superficie. El
resultado es comparado con spotCosCutoff para
determinar si se esta dentro o fuera del cono
de iluminación
Spotlight
• Si esta fuera, la atenuación es 0 sino este valor
se eleva al valor especificado en spotExponent
• El componente ambiental, difuso y especular
solo tienen efecto si está dentro
• La atenuación se multiplica por el valor
sporEffect:
Spotlight
Sin shader GLSL
Shader GLSL
Modelos de Reflexión
•
•
•
•
•
•
•
•
Ashikhmin-Shirley
Fresnel
Lafortune BRDF
Ward
Oren Nayer
Velvet
Car paint
Gooch
Modelos de Reflexión
•
•
•
•
•
•
•
•
Ashikhmin-Shirley
Fresnel
Lafortune BRDF
Ward
Oren Nayer
Velvet
Car paint
Gooch
Modelos de Reflexión
•
•
•
•
•
•
•
•
Ashikhmin-Shirley
Fresnel
Lafortune BRDF
Ward
Oren Nayer
Velvet
Car paint
Gooch
Modelos de Reflexión
•
•
•
•
•
•
•
•
Ashikhmin-Shirley
Fresnel
Lafortune BRDF
Ward
Oren Nayer
Velvet
Car paint
Gooch
Modelos de Reflexión
•
•
•
•
•
•
•
•
Ashikhmin-Shirley
Fresnel
Lafortune BRDF
Ward
Oren Nayer
Velvet
Car paint
Gooch
Modelos de Reflexión
•
•
•
•
•
•
•
•
Ashikhmin-Shirley
Fresnel
Lafortune BRDF
Ward
Oren Nayer
Velvet
Car paint
Gooch
Tips
• Al utilizar la contribución de muchas luces en
la escena: NumEnabledLights
• Two-Sided Lighting = invertir la normal de la
superficie y calcular
• Fog = gl_FogCoord
Descargar