01 sombras en opengl informática gráfica– ingeniería informática. carlos calvo rodríguez
TRANSCRIPT
01
Sombras en OpenGLInformática Gráfica– Ingeniería Informática.
Carlos Calvo Rodríguez
02
Sombras en OpenGL
• Elemento imprescindible para realismo de la escena.
• Varios mecanismos– Sombras estáticas– Sombras dinámicas• Sombras volumétricas• Mapas de sombras (Shadow Mapping)
03
Sombras estáticas
• Aplicación mediante mapas de luz.
• Deben ser precalculados– No requieren eficiencia en tiempo real– No aptos para objetos dinámicos
04
Sombras estáticas
• Varias técnicas de precálculo– Oclusión ambiental– Radiosidad– Otras
05
Sombras dinámicas
• Fixed pipeline – Sombras Volumétricas• GLSL – Shaders – Shadow Mapping
06
Sombras volumétricas
• Uso del Stencil Buffer.• Determinación de siluetas y proyección.• Renderizado en múltiples etapas.– Renderizado de escena en penumbra. Cálculo de
stencil buffer.– Renderizado aditivo para cada luz. Test contra el
stencil buffer.• Extremadamente caro computacionalmente.
07
Sombras volumétricas
08
Shadow Mapping
• El uso de shaders permite la técnica del Shadow Mapping.
• Hace uso de una textura –no un búfer- de profundidad.
• El tamaño de la textura indica la resolución de las sombras.
glTexImage2D(GL_TEXTURE_2D, 0,GL_DEPTH_COMPONENT16, 1024, 1024, 0,GL_DEPTH_COMPONENT, GL_FLOAT, 0);
09
Shadow Mapping
• Renderizado desde cada luz en la textura, cálculo de profundidad.
• Renderizado normal, test contra la textura de profundidad.
010
Shadow mapping
• Renderizado desde la luz– Proyección ortogonal– Suficientemente grande para toda la escena
011
Shadow mapping
C++
GLSL
#version 120
// Entrada de datos de vértice para cada ejecuciónattribute vec3 vertexPosition_modelspace;
// Valores constantes para todo el meshuniform mat4 depthMVP;
void main(){gl_Position = depthMVP * (vec4(vertexPosition_modelspace,1));
}
//Especificamos el búfer creado anteriormente para el shadow map como//objetivo de rendering.glBindFramebuffer(GL_FRAMEBUFFER, fbDepth);glViewport(0, 0, 1024, 1024); //Renderizar en todo el búfer
012
Shadow Mapping
• Sólo se guarda información de profundidad.
013
Shadow Mapping
014
Shadow Mapping
• El test de sombreado permite cambiar el renderizado condicionalmente.
GLSL
float visibility = 1.0;if ( texture( shadowMap, ShadowCoord.xy ).z < ShadowCoord.z - bias){
visibility = 0.5;}
015
Shadow Mapping - Problemas
• «Shadow acne»• Peter Panning• Aliasing
016
Shadow Acne
• Margen de error• Margen de error ajustado
• Front-face culling
// Ajuste de error fijo...float bias = 0.005;
// ...o variable// float bias = 0.005*tan(acos(cosTheta));// bias = clamp(bias, 0,0.01);
glEnable(GL_CULL_FACE);glCullFace(GL_FRONT);
017
Peter Panning
• Problema relacionado con la geometría.• Resuelto utilizando geometría más ancha.• Supone más primitivas por etapa.
018
Aliasing
• PCF– Multisampling por hardware
GLSL
uniform sampler2DShadow shadowMap;
019
Aliasing
• Poisson Sampling– Multisampling fijo alrededor del pixel– Puede presentar «banding» si se dispersan las
muestras.
• Stratified Poisson Sampling– Muestreo aleatorio alrededor del píxel.– Genera patrones de ruido.
020
Aliasing
PoissonSampling
N = 16Baja dispersión
021
Aliasing
PoissonSampling
N = 16Alta dispersión
022
Aliasing
StratifiedPoissonSampling
023
Shadow Mapping - Mejoras
• «Early bailing»• Luces «spot»– Matriz de proyección de la luz.
• Múltiples luces– Necesidad de etapas extra
• Luces de punto– Uso de cubemaps para el shadowmapping.
024
Shadow Mapping - Variaciones
• Frustum automático de luz– Cálculo de PSR y PSC– Puede causar popping
025
Shadow Mapping - Variaciones
026
Shadow Mapping - Variaciones
• Light Space Perspective Shadow Maps– Modifican el frustum original para conseguir una
calidad más uniforme con la distancia.
027
Shadow Mapping - Variaciones
028
Shadow Mapping - Variaciones
• Cascaded Shadow Maps– Técnica análoga al mipmapping.– Emplea varios Shadow Maps estándar.
029
Tel. (34) 923 294450 (ext. 1525) Movil (34) 618696589Fax (34) 923 294514http://bisite.usal.es | [email protected]
Facultad de CienciasUniversidad de Salamanca37007 Salamanca. Spain
Juan Manuel Corchado Rodríguez