SombrasSombrasSombrasSombrasVisualización Computacional 2
Horarios (again…)Horarios (again…)
LUNES 26/10: Aula 2 Facultad (19 hs.): Introducción
MARTES 27/10: Aula 2 Facultad (19 hs.): Texturas
MIERCOLES 28/10: Aula 2 Facultad (19 hs.): Técnicas de iluminación avanzadas
JUEVES 29/10: Aula 2 Facultad (19 hs.): Sombras VIERNES 30/10: Aula 2 Facultad (19 hs.): Optimización
LUNES 2/11: Aula 1 Facultad (18 hs.): Animación – Comportamiento Físico
Half Life 2 - Valve Software
Sombras - Sombras - ResumenResumen
Introducción
¿Por qué usar sombras?
Técnicas
Fake Shadows
Planar Shadows
Projective Textures
Shadow Mapping
Soft Shadows & Hard Shadows
Shadow Volumes
Conclusiones
Sombras - Sombras - IntroducciónIntroducción
Nluces
psdpiaa vrKlnKISIKI
i
0
)()(
Si=
0: Si la luz es bloqueada en este punto
1: Si la luz no es bloqueada en este punto
Notar que las áreas que se encuentran en sombra(no influenciadas por ninguna luz) son iluminadas por la luz ambiental
l n
r
v
Sombras - Sombras - IntroducciónIntroducción
Sombra compuesta de dos regiones:
Umbra
Penumbra
Umbra es la región sólida
Luz completamente bloqueada
Penumbra es la zona de transición
Luz bloqueada parcialmente
No ocurre con luces puntuales
Sombras - Sombras - IntroducciónIntroducción
Hard ShadowsSoft ShadowsHasenfratz et al. / Real-time Soft Shadows
Sombras - Sombras - IntroducciónIntroducción
Un punto está en sombras si no es “visto” desde la posición de la luz.
Los algoritmos de evaluación de sombra son similares a los algoritmos de determinación de vista.
Cuando existen múltiples luces debo clasificar los polígonos para cada una.
Igualmente, existen aproximaciones sin hacer testeo de visibilidad.
Sombras - Sombras - ¿Por qué usar sombras?¿Por qué usar sombras?
Ocultan defectos.
Uso en condiciones climáticas y efectos especiales.
Incrementan notablemente el realismo.
Brindan información adicional de la escena.
Sombras - Sombras - ¿Por qué usar sombras?¿Por qué usar sombras?
Sombras - Sombras - ¿Por qué usar sombras?¿Por qué usar sombras?
Posición y tamaño relativos a la escena
Sombras - Sombras - ¿Por qué usar sombras?¿Por qué usar sombras?
Información adicional del entorno
Sombras - Sombras - ¿Por qué usar sombras?¿Por qué usar sombras?
Información adicional del modelo
Sombras - Sombras - Fake ShadowsFake Shadows
La forma más simple de crear una sombra: agregar un polígono debajo del objeto.
Sombras - Sombras - Fake ShadowsFake Shadows
Ventajas:
Extremadamente simple.
Desventajas:
Técnica muy limitada.
El piso debe ser plano.
El objeto debe estar a cierta altura del piso.
Sólo puede rotar en el eje Y.
No es verdadera en cuanto a la forma del objeto.
No es verdadera en cuanto a la dirección de la luz.
No hará sombra más que en el piso.
Complejidad: Constante
Sombras - Sombras - Fake ShadowsFake Shadows
Pequeña mejora: usar escala negativa (misma idea que los fake de reflejo).
La ventaja es que la sombra ahora tiene la forma del objeto.
Uso de stencil buffer para cortar la proyección.
Complejidad: Cant. Objetos
glPushMatrix(); glScalef(1.0, -1.0, 1.0); drawDinosaur(); glPopMatrix();
drawFloor();drawDinosaur();
Stencil BufferStencil Buffer
Marcar los píxeles en una pasada de rendering para controlar actualizaciones en futuras pasadas.
"For pixels en el frame buffer" →"For pixels marcados en el frame buffer"
Se pueden especificar distintas operaciones:
stencil test falla
stencil test pasa & depth test falla
stencil test pasa & depth test pasa
frame buffer
depth buffer
stencil buffer
Sombras - Sombras - Planar ShadowsPlanar Shadows
Dibujar la geometría real y la geometría proyectada sobre los planos donde habrá sombra.
Sombras - Sombras - Planar ShadowsPlanar Shadows
Dibujar planos();For todos los planosbegin aplicar transformacion de proyección; deshabilitar DEPTH_TEST; deshabilitar colores; dibujar Objeto 3d proyectado;End;Dibujar Objeto 3D();
Sombras - Sombras - Planar ShadowsPlanar Shadows
Sombras - Sombras - Planar ShadowsPlanar Shadows
Ventajas:Proyección sobre distintos planos.La sombra refleja la situación de acuerdo a la rotación del objeto.La sombra cambia de acuerdo a la posición de la luz
Desventajas:Tengo que dibujar el objeto tantas veces como planos.Los objetos no proyectan sombra ni sobre sí mismos ni sobre otros objetos.No es posible proyectar sombras en superficies curvas.
Complejidad: Cant. Objetos * Cant. Planos
Sombras - Sombras - Projective ShadowsProjective Shadows
Surge como mejora a Planar Shadows: renderizar el objeto a una textura (o tenerla precalculada) y proyectar la textura.
Render desde L Textura B/N Render Final
Sombras - Sombras - Projective ShadowsProjective Shadows
Ventajas:
Las mismas que Planar Shadows.
No se renderiza el objeto una vez por cada plano.
Desventajas:
Las mismas que Planar Shadows.
Resolución.
Se debe especificar occluder y receiver
Limitación por la cantidad de unidades de texturas.
Complejidad: MAX (Cant. Objetos, Cant. Planos)
Sombras - Sombras - Shadow MappingShadow Mapping
Utilización de textura con información de Z-Buffer.
Dos pasadas:
Calcular shadow map (renderizar desde el punto de la luz).
Renderizar la escena chequeando si los puntos están o no en sombra.
Foley et al. “Computer Graphics Principles and Practice”
Sombras - Sombras - Shadow MappingShadow Mapping
Tenemos el punto 3D (x,y,z)WS. ¿Cómo obtenemos su valor del Shadow Map?
Rta: Se aplica al punto la matriz de proyección usada en la imagen generada desde el punto de vista de la luz.
Foley et al. “Computer Graphics Principles and Practice”
(x,y,z)WS
(x',y',zL)
Obtenemos (x’,y’,z’)LS
zL:=ShadowMap(x’,y’);Si zL<z’ entonces
punto en sombra Sino
punto en luz
(x',y',z') LS
Sombras - Sombras - Shadow MappingShadow Mapping
Ventajas:Los objetos proyectan sombra sobre sí mismos y sobre otros objetos.La técnica más rápida y directa.No se necesita conocimiento previo de la escena.Independiente del punto de vista.
Desventajas:No sirve para luces omni-direccionales.Field of View.Dependencia de precisión del Z-Buffer.Aliasing del Shadow Map.Consumo de recursos (render target switch y uso de texturas)
Complejidad: Cant. Objetos
Sombras - Sombras - Soft ShadowsSoft Shadows
Diversas técnicas de soft shadows pero alejadas de un frame rate aceptable.
Nuevas técnicas orientadas hacia procesamiento de imágenes sobre el Shadow Map.
Se intenta mejorar el aliasing y la calidad en técnicas como Shadow Mapping.
Sombras - Sombras - Soft ShadowsSoft Shadows
Pasos:
1. Generar el shadow map.
2. Guardar a un buffer de textura las partes de la escena que están en sombras después del algoritmo de comparación.
3. Realizar procesamiento de Blur o Soften a la imagen guardada en el paso 2.
4. Proyectar la textura procesada en el espacio de coordenadas de la escena en la pantalla.
Map Shadow OriginalMap Shadow Original
Sombras - Sombras - Soft ShadowsSoft Shadows
Map Shadow Blur: Map Shadow Blur: 1 pasada1 pasada
Map Shadow Blur: Map Shadow Blur: 2 pasadas2 pasadas
Sombras - Sombras - Shadow VolumesShadow Volumes
El cable proyecta sombra sobre el personaje.
El personaje proyecta sombra sobre el piso.
Sombras - Sombras - Shadow VolumesShadow Volumes
Representar explícitamente el volumen de la sombra en el espacio.
Para cada polígono se construye una pirámide con la luz como vértice más alto.
Se incluye un polígono para cortar el volumen.
El test queda parecido a un test de clipping.
Sombras - Sombras - Shadow VolumesShadow Volumes
“Abducted” Contraband Entertainment
Sombras - Sombras - Shadow VolumesShadow Volumes
Geometría Visible
Geometría Shadow Volume
Escena compleja con sombras
“Abducted”, Contraband Entertainment
Sombras - Sombras - Shadow VolumesShadow Volumes
Geometría Visible
Geometría Shadow Volume
Escena con múltiples fuentes de luz
“Abducted” Contraband Entertainment
Sombras - Sombras - Shadow VolumesShadow Volumes
Si un punto está dentro del volumen generado a partir de una luz Li ese punto no recibe contribución de esa luz.
Costo ~ #polys * #luces
Sombras - Sombras - Shadow VolumesShadow Volumes
Tirar un rayo desde el punto de vista al punto.
Incrementar/decrementar un contador cada vez que se intersecta un polígono del shadow volume (usando z buffer)
Si el contador es <> 0 el punto está en sombra.
+1-1
+1
Sombras - Sombras - Shadow VolumesShadow Volumes
Determinar la silueta del objeto que proyectará sombra.
Extruír la silueta desde el punto de vista de la luz para construir el Shadow Volume.
Algoritmo de conteo Zpass o Zfail.
Sombras - Sombras - Shadow VolumesShadow Volumes
Silueta del Objeto generador (Ocludder)
Luz
Shadowvolume
(extensión infinita)
Un shadow volume es un volumen definido por la luz y la silueta del objeto generador de sombra.
Sombras - Sombras - Shadow VolumesShadow Volumes ((ZpassZpass Caso 1) Caso 1)
Ocludder Luz
Espectador
Objeto fuera de
la sombra
+ ---+ +
Contador Shadow Volume = +1+1+1-1-1-1 = 0
Sombras - Sombras - Shadow VolumesShadow Volumes ((ZpassZpass Caso 2) Caso 2)
Ocludder Luz
Espectador Objeto en sombra
+ -+ +
Contador Shadow Volume = +1+1+1-1 = 2
Sombras - Sombras - Shadow VolumesShadow Volumes ((ZpassZpass Caso 3) Caso 3)
Occluder Luz
Espectador Objeto fuera de
la sombra
Contador Shadow Volume = 0 (ninguna pasada zPass)
Sombras - Sombras - Shadow Volumes (Problema zNear)Shadow Volumes (Problema zNear)
zNear Clip Plane
zFar Clip Plane Perdemos esta intersección (problemas en el conteo)
View Frustum
Sombras - Sombras - Shadow VolumesShadow Volumes (Error (Error ZpassZpass))
Ocludder Luz
Objeto en sombra
-+
Contador Shadow Volume = +1-1 = 0
Espectador
Sombras - Sombras - Shadow VolumesShadow Volumes (Error (Error ZpassZpass))
Tres posibles soluciones:
Reacomodar los contadores de acuerdo a los volúmenes y la posición de la vista.
Clipping de los shadow volumes al View Frustum.
Usar Z-Fail.
SombrasSombras - - Shadow Volumes (Solución Shadow Volumes (Solución Reacomodar contadoresReacomodar contadores))
Ajustar el valor inicial del contador.
MUY COSTOSO
0+1
0
+1
SombrasSombras - - Shadow Volumes (Solución Shadow Volumes (Solución Clipping Clipping de SVde SV))
Hacer clipping de los shadow volumes con el frustum de vista e incluir estos polígonos en el conteo.
Difícil reconstrucción
Sombras - Sombras - Shadow VolumesShadow Volumes (Solución (Solución ZFailZFail))
Ocludder Luz
Objeto en sombra
Contador Shadow Volume = +1+1 = 2
Espectador
++
Sombras - Sombras - Shadow VolumesShadow Volumes ((ZfailZfail))
Ocludder Luz
Espectador
Objeto fuera de la sombra
Contador Shadow Volume = 0 (ninguna pasada zFail)
Sombras - Sombras - Shadow VolumesShadow Volumes ((ZfailZfail))
Ocludder Luz
Espectador
Objeto fuera de la sombra
Contador Shadow Volume = -1-1-1+1+1+1 = 0
- +- - + +
Sombras - Sombras - Shadow VolumesShadow Volumes
Ventajas:
La proyección de sombras sobre sí mismos en los objetos es automática.
Pocos problemas de aliasing y resolución.
Sirve para luces omni-direccionales.
Desventajas:
Imposible hacer soft shadows.
Consume fillrate.
Se necesita calcular la silueta (costo CPU).
Complejidad: Cant. Objetos*2 (si no tenemos doble stencil)
Sombras - Sombras - Zpass y ZFailZpass y ZFail
Zpass Ventajas:
No requiere Volumes con bordes.
Más eficiente (Oclussion Culling).
Zfail Ventajas:
No tiene problemas con plano zNear.
No tiene problemas con posición de espectador.
Nota:Juegos tipo Diablo: ZpassJuegos tipo Doom3: Zfail
Sombras - Sombras - Shadow VolumesShadow Volumes
La sombra de la reja aparece en el camión y el piso utilizando Shadow Maps.
Sería imposible utilizar Shadow Volumes con la reja!
“Fuel” Firetoad Software
Sombras - ConclusionesSombras - Conclusiones
La mayoría son algoritmos costosos.
Requieren conocimientos de procesamiento de imágenes y de geometría no triviales.
No existe la técnica “perfecta”.
La mejor decisión es la combinación de técnicas de acuerdo al tipo de escena.