01 Sombras en OpenGL Informática Gráfica– Ingeniería Informática. Carlos Calvo Rodríguez.

Post on 27-Jan-2016

228 views 6 download

Transcript of 01 Sombras en OpenGL Informática Gráfica– Ingeniería Informática. Carlos Calvo Rodríguez.

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 | corchado@usal.es

Facultad de CienciasUniversidad de Salamanca37007 Salamanca. Spain

Juan Manuel Corchado Rodríguez