• Nenhum resultado encontrado

Reflexão e Sombras em Tempo Real. Waldemar Celes. Tecgraf/PUC-Rio

N/A
N/A
Protected

Academic year: 2021

Share "Reflexão e Sombras em Tempo Real. Waldemar Celes. Tecgraf/PUC-Rio"

Copied!
71
0
0

Texto

(1)

Tecgraf/PUC-Rio

Reflexão e Sombras em Tempo Real

Waldemar Celes

(2)

Textura Projetiva

(3)

Textura Projetiva

qProjeção de imagens sobre superfícies

ð Exemplo: projetor de slides

Projective Texture Mapping Cass Everitt - nVidia

(4)

Geração de Coord de Textura

q  Combinação linear

ð  Espaço do objeto

²  Eq. do plano: [a,b,c,d]T

²  Geração de coordenada: s = ax+by+cz+dw

ð  Espaço do olho

²  Eq. do plano: [a,b,c,d]T

²  Transf. do plano: [a’,b’,c’,d’] T = [a,b,c,d] M-1

²  Geração de coordenada: s = a’xe+b’ye+c’ze+d’we

(5)

Pipeline de Transformações

q  Para visualização

ð  Model

ð  View

ð  Projection

²  Clip space: -1 a 1 q  Para projeção

ð  Model

ð  Projector view

ð  Projector projection

²  Texture space: 0 a 1

(6)

Geração de Coord. Projetiva

q  Espaço do objeto

ð Posicionamento do projetor no espaço global

tion transforma

space texture

to clip

projector of

e perspectiv projection

projector

projector of

lookat view

projector matrix model

w z y x

q r t s

p p

p p

:

) (

:

) (

: :

12 12

12 12

S T P V M

M V P S T T

T

o

o

=

!!

!!

"

#

$$

$$

%

&

=

!!

!!

"

#

$$

$$

%

&

(7)

Geração de Coord. Projetiva

q  Espaço do olho

ð  Posicionamento do projetor no espaço global

tion transforma space

texture to

clip

projector of

e perspectiv projection

projector

projector of

lookup view

projector

matrix view

of inverse

w z y x

q r t s

p p e

e p p e

e e e e

e

:

) (

:

) (

:

1 :

1

12 12

12 12

S T P V V

V V P S T T

T

=

"

"

"

"

#

$

%%

%%

&

'

=

"

"

"

"

#

$

%%

%%

&

'

(8)

Geração de Coord. Projetiva

q  Codificação da matriz no gerador

ð  ps =[T00,T01,T02,T03]

ð  Análogo para pt, pr, pq

² No espaço do olho, usa inversa na especificação dos planos

(9)

Problemas

q Projeção reversa

ð Textura 1D para eliminar contribuição

² Por exemplo com teste de alpha

² Requer multi-textura

q  Filtro anisotrópico é desejável

ðGrande distorção devido a dupla projeção

² Grandes redução e ampliação na mesma textura

(10)

Light mapping

q Mais apropriado, dark mapping

ð Projeta textura sobre superfícies

ð Mapas, em geral, em baixa resolução

ð Animação com coordenadas de textura

Texturas: mapas de atenuação

v=1.0 v=0.5

(11)

Reflexão Planar

(12)

Reflexão plana

(13)

Reflexão plana

q  Refletor ideal: lei de reflexão

q  Traçado de raios

ð Reflete raio

q  Formas alternativas

ð Objeto refletido

ð Observador refletido

i n

r

(14)

Reflexão plana

q  Idéia básica do algoritmo

ð Renderiza cena refletida

² Sem incluir refletor

ð Renderiza cena normal

² Incluindo refletor

² Refletor recebe fator de transparência: reflexividade

(15)

Reflexão plana

q Transformação de reflexão

ð Refletor: n = (0,1,0), em y=0

² Espelhamento: S(1,-1,1)

ð Caso geral, refletor: nTp = 0

² Mudança de base: F = R(n,j) T(-p)

² Espelhamento: M = F-1 S(1,-1,1) F

ð Obs: tem espelhamento

² Altera a orientação das faces!

(16)

Reflexão plana

q Problemas

ð Reflexão invertida

² Usar clipping planes

ð Reflexão fora do refletor

² Usar stencil buffer

(17)

Reflexão plana

q Algoritmo

ð Marca stencil com refletor

ðDesenha cena refletida

² Sem refletor

² Habilitando plano de clip

² Apenas onde stencil está marcado

² Invertendo orientação das faces

ðDesenha cena normal

² Sem refletor

ðDesenha refletor

² Com alpha indicando reflexividade

² Ativando blend

(18)

Reflexão plana com textura

q Algoritmo

ð Desenha cena refletida em textura

² Pode ser em baixa resolução

ð Desenha cena normal

² Aplicando textura no refletor

² Textura projetiva

–  Projeção de visualização

² Reflexividade

–  Alpha e combinação de textura

(19)

Reflexão plana

q Vantagens de usar textura

ð Refletores quase planas

² Mar calmo

ðImagem refletida com pertubação (noise)

² Agrega realismo

ðRe-uso para cenas estáticas

² Sobrevida em frames consecutivos

q  Desvantagens

ð Suporte para renderização em textura

² Menos eficiente que stencil (?)

(20)

Sombra Planar

(21)

Sombras

(22)

Sombras

(23)

Sombras

q Sombras

ð Hard

² Fonte de luz pontual

ð Soft

² Fonte de luz com área

² Regiões caracterizadas

–  Umbra –  Penumbra

(24)

Sombras planas

q  Matriz de projeção

ð Plano de sombra

² n.x + d = 0

ð Posição da luz

² l

!!

!!

"

#

$$

$$

%

&

+

+

+

=

nl nl

nl nl

M

z y

x

z z

z y

z x

z

y z

y y

y x

y

x z

x y

x x

x

n n

n

d l n

l d

n l n

l

d l n

l n

l d

n l

d l n

l n

l n

l d

(25)

Sombras planas

q  Algoritmo

ð Desenha os não receptores

ð Para cada plano receptor

² Desenha com luz ambiente

² Para cada fonte de luz

–  Marca stencil com sombras

»  Usando a matriz de projeção –  Desenha receptor

»  Apenas onde stencil não estiver marcado

»  Z-func como EQUAL

»  Blend como ONE-ONE ð Obs

² LOD para gerar sombra em geral não prejudica qualidade

(26)

Sombras planas

q Problemas

ð Falsas sombras

² De objetos após o receptor

ð Anti-sombras

² De objetos atrás da fonte de luz

ð Correção

² Clipping planes paralelos ao receptor

(27)

Sombras planas com textura

q Algoritmo

ð Renderiza cena do ponto de vista da fonte de luz

² Matriz de projecão para paralelogramo

² Cena em preto e branco

–  Indica regiões de sombra ð Renderiza cena normal

² Aplica textura no receptor

² Evita iluminar regiões de sombra

(28)

Geração de Sombras em Superfícies Curvas

(29)

Sombras em superfícies curvas

q Shadow map

ð Aliasing

ð Suporte em hardware

² Mais eficiente

q Shadow volume

ð Hard-shadow

ð Ideal para sombras em regiões grandes

q  Variance shadow map

ð Anti-aliasing

ð Pode falhar

(30)

Shadow Mapping

(31)

Shadow map

q Algoritmo

ð Renderiza cena do ponto de vista da fonte de luz

² Usa Z-buffer como textura: shadow map

–  Texel: distância da fonte ao objeto mais próximo ð Renderiza cena aplicando shadow map

² Textura projetiva do ponto de vista da fonte de luz

² Teste de sombra

–  If r <= texel then iluminado else sombra end

texel = r

(32)

Shadow map

Suporte em hardware

ð Textura é um shadow map

² DEPTH_COMPONENT

² Tex Parameter:

–  TEXTURE_COMPARE_MODE = COMPARE_R_TO_TEXTURE ð Shader

² Função textureProj

–  Valor de retorno {c,c,c,1}, com c valendo zero ou um –  Pode-se aplicar filtro: 0 <= c <= 1

»  Diminui aliasing

–  Pode-se programar filtros melhores

»  Percentage-closer filter

»  Técnicas de dithering

0 1 1 1

c = 0.75

(33)

Shadow map

q Shadow map não depende do observador

ð Sempre válido para objetos e fontes estáticos

ð Idéias

² Reaproveitamento do shadow map

–  Explorar coerência quadro a quadro

² Dois shadow maps

–  Um para objetos estáticos

–  Um para objetos dinâmicos (atualizada frequentemente)

(34)

Shadow map

q Problemas

ð Self-shadows

² Imprecisão numérica

–  r texel

² Soluções

–  Melhorar ajuste do volume de visão da fonte de luz –  Usar offset na geração do mapa

–  Usar mapa de ID em vez de mapa de profundidade –  Gerar mapa com back-faces

(35)

Aliasing

q Percentage Closer Filter

ð Grid regular

² Banding effects

for (int i=0; i<NSAMPLES; i++) {

sm.xy = offsets[i] * fsize + smPos;

shadow += textureProj(shadowMap,sm);

}

shadow /= NSAMPLES;

(36)

Eliminando banding effects

q Jittered grid

q  Domínio circular

ð Preservando áreas

² x = x1/2 cos(2πu)

² y = y1/2 cos(2πu)

(37)

Eliminando banding effects

q Múltiplos offsets

ð Pixels vizinhos com offsets diferentes

² Textura 3D de RGBA

–  Dois offsets (2 pares x,y) por texel

s = frag.x t = frag.y

r = offset

(38)

Melhorando desempenho

qUso de “branching” no shader

ð Menos amostras para determinar penumbra

ð Fragmentos próximos com mesmo branching

-- Testa se em penumbra for (int i=0; i<4; i++) {

vec4 offset = texture(jitter,jcoord);

sm.xy = offset.xy * fsize + smPos;

shadow += textureProj(shadowMap,sm) / 8;

sm.xy = offset.zw * fsize + smPos;

shadow += textureProj (shadowMap,sm) / 8;

} ...

if ((shadow-1)*shadow != 0) { -- Em penumbra

}

(39)

Melhorando desempenho

q Se mapa gerado com “back face”

ð Não incorpora erros na imagem, mas...

ð “Self-shadow” degrada desempenho

ð Correção:

if ((shadow-1) * shadow * max(NdotL,0) != 0) { -- Em penumbra

}

(40)

Perspective shadow map

(41)

Perspective shadow map

q  Problemas de aliasing

ð Projeção de visualização pode expandir sombra

² Enquanto no mapa aparece pequeno

ds

di

ri

βs βi

•  ds : limitado pela resolução do mapa

•  rs/ri : se pequeno e constante, diminui aliasing de perspectiva

•  βis : difícil eliminação, pois a luz pode tangenciar a superfície (aliasing de perspectiva)

s i i s s

i r

d r

d β

= β

(42)

Perspective shadow map

qMapa de sombras com

ð Resolução alta para objetos próximos

ðResolução baixa para objetos distantes

qObjetivo

ð Diminuir aliasing de perspectiva

qIdéia

ðGerar mapa no espaço após perspectiva

(43)

Perspective shadow map

qExemplo: árvores vistas da esquerda

ð Espaço do olho

² Árvores de mesmo tamanho

ð Espaço após perspectiva

² Árvores próximas maiores

(44)

Perspective shadow map

q Geração do mapa

ð Transforma cena para espaço de clip

ð Renderiza mapa com fonte de luz transformada

² No exemplo anterior: rs/ri = cte

(45)

Perspective shadow map

q Transformação da fonte de luz

ð Luz direcional: {x,y,z,0}

ð Luz pontual: {x,y,z,1}

ð Transformação perspectiva

P

P

x z

(f+n)/(f-n)

f

x

z 1 -1

(46)

Perspective shadow map

q  Transformação perspectiva

ð  Ponto no infinito

²  Ponto finito com z = (f+n)/(f-n)

ð  Ponto finito

²  Pode se transformar em ponto no infinito

–  Se no plano z=0

q  Transformação da fonte de luz

ð  Luz direcional

²  Permanece direcional se pw=0

²  Acontece se: {x,y,0,0} {px,py,0,0}

ð  Luz local

²  Pode se transformar em luz direcional

–  Luz no plano do observador –  Melhor ganho do PSM

(47)

Perspective shadow map

q  Self-shadow é acentuado

q  PSM depende da posição do observador

q  Frustum da fonte pode cruzar plano z=0

ð Cruza infinito após transformação

ð Frustum de interesse

² M = convex hull (V + l)

–  M contém todos os raios de luz que interceptam objetos da cena

² H = M BV L

ð Se H cruza plano z=0

² Afasta observador para gerar PSM

² Tende a se aproximar do PS

(48)

Variance Shadow Mapping

(49)

Variance shadow mapping

q No lugar de armazenar uma profundidade por texel

q  VSM armazena a distribuição de profundidade no texel

ð Assumindo uma distribuição normal

q Vantagem

ð Podemos aproximar a média de duas

distribuições usando filtros convencionais de interpolação dos valores armazenados

(50)

Variance shadow mapping

q Valores armazenados

ð Média da profundidade:

ð Média da profundidade ao quadrado:

q Distribuição normal:

ð Média e variância:

µ

µ

2

µ = E x[ ]

σ2 = E x[( µ)2]

σ2 = E x[ 2 2µx +µ2] = E x[ ]2 2µE x[ ]+µ2

σ2 = E x[ ]2 2µ2 +µ2 = E x[ ]2 µ2

σ2 = E x[ ]2 E x[ ]2

(51)

Variance shadow mapping

q Chebychevs inequality

ð Dada uma distribuição normal, a probabilidade de x ser maior ou igual a um determinado valor t é dada por:

P x( t) = σ

2

σ 2 + (t µ)2

No nosso contexto, dada uma profundide de um fragmento, este valor

representa a percentagem de texel (dentro do filtro) com valores maiores, ou seja, a propabilidade do fragmento receber luz.

(52)

Variance shadow mapping

q Algoritmo

ð Renderiza sob ponto de vista da luz

² Armazena na textura:

ð Para diminuir aliasing

² Blur

² Mipmapping

ð Renderiza cena aplicando textura projetiva

²  Profundidade do fragmento: d

² Se d < µ então iluminado: i = 1.0

² Senão:

depth, depth2

i = P(x d) = σ2

σ2 +(d µ)2 µ = tex(0)

σ2 = E[x2] E[x]2 =tex(1)tex(0)2

(53)

Variance shadow mapping

q Limitações

ð Quando a variância é pequena, P(x≥t) tende a zero rapidamente, não tendo problemas

ð Mas, quando a variância é grande, pode haver

vazamento de luz

(54)

Shadow Volume

(55)

Shadow volume

q Determinação dos volumes de sombra

ð Cada objeto delimita um volume de sombra

(56)

Shadow volume

q Algoritmo básico

ð Traçado de raio

² Raio entra no volume

–  Incrementa contador

² Raio sai do volume

–  Decrementa contador

² Determinação da sombra

–  Em sombra se contador diferente de zero

(57)

Shadow volume: z-pass

q  Stencil buffer como contador

ð Limpa stencil

²  Com zero (ou 128 se não tratar índice negativo)

ð Desenha cena com luz ambiente

²  Z-buffer definido

ð Desenhafront faces dos volumes

²  Teste do z-buffer ativo, sem alterar buffer z e color

²  Incrementa stencil se z-teste passar

ð Desenhaback faces dos volumes

²  Decrementando stencil

ð Desenha cena com luz difusa e especular

²  Teste de stencil passa quando valor for zero (ou 128)

²  Z-func como EQUAL

²  Blend como ONE-ONE

(58)

Shadow volume: z-pass

qProblema

ð Observador dentro de um volume de sombra

(59)

Shadow volume: z-fail

q  Stencil buffer como contador

ð Desenhaback faces dos volumes

²  Desabilitando teste em z

²  Incrementa stencil

ð Desenhafront faces dos volumes

²  Desabilitando teste em z

²  Decrementa stencil

ð Desenhafront faces dos volumes

²  Habilitando teste em z

²  Incrementa stencil se z-teste passar

ð Desenhaback faces dos volumes

²  Habilitando teste em z

²  Decrementa stencil se z-teste passar

Deixa valores positivos no stencil qdo observador está

dentro do volume

(60)

Shadow volume: z-fail

q  Re-odernando as passadas

ð Desenhaback faces dos volumes

²  Desabilitando teste em z

²  Incrementa stencil

ð Desenhaback faces dos volumes

²  Habilitando teste em z

²  Decrementa stencil se z-teste passar

ð Desenhafront faces dos volumes

²  Desabilitando teste em z

²  Decrementa stencil

ð Desenhafront faces dos volumes

²  Habilitando teste em z

²  Incrementa stencil se z-teste passar

(61)

Shadow volume: z-fail

qCancelando passadas duplicadas

ð Desenhaback faces dos volumes

² Habilitando teste em z

² Incrementa stencil se z-teste falhar

ð Desenhafront faces dos volumes

² Habilitando teste em z

² Decrementa stencil se z-teste falhar

(62)

Shadow volume

q Determinação dos volumes de sombra

ð Construção de mapa de elevação

² Desenha cena do ponto de vista da fonte de luz

–  Z-buffer representa mapa de elevação

² Renderiza mapa de elevação

–  Representa os volumes envolventes –  Renderização de terrenos

² Problemas

–  Aliasing –  Eficiência

(63)

Shadow volume

q  Determinação dos volumes de sombra

ð  Representação dos volumes

²  Estrutura de dados topológica

–  Face: v1, v2, v3, n –  Aresta: v1, v2, f1, f2

»  Com f1 usando a aresta de v1 para v2 –  Vértice: x, y, z

–  Não pode conter falhas

²  Processamento

–  Em relação à fonte de luz e aos objetos

–  Para cada face: determina se é back ou front face

»  n.L < 0

–  Silhueta: para cada aresta, checa orientação das faces vizinhas

»  back & front faces

²  Determinação do volume

–  Faces laterais

»  Arestas de silhuetas estendidas até o infinito –  Light caps

»  Conjunto de front faces –  Dark caps

»  Conjunto de back faces mapeadas no infinito

(64)

Shadow volume

q  Trabalhando no infinito

ð Matriz de projeção: zfar

!!

!!

!!

"

#

$$

$$

$$

%

&

+

+

=

!

!!

!!

!!

"

#

$

$$

$$

$$

%

&

+

+

+

=

0 1

0 0

2 1

0 0

2 0 0

0 2 0

0 1

0 0

0 2 0

2 0 0

0 2 0

inf

b n t

b t b t

n r l

l r l

r n

n f

fn n

f n f b t

b t b

t

n r l

l r l

r n

P P

(65)

Shadow volume

q  Trabalhando no infinito

ð Estruturação dos vértices

² x0,y0,z0,1, x1,y1,z1,1,…,xn,yn,zn,0, xn+1,yn+1,zn+1,0,…

q  Volume de sombra

ð Light cap: front faces

² v1,v2,v3

ð Faces laterais: quadriláteros

² v1,v1+n,v2+n,v2

ð Dark cap: back faces

² V1+n,v2+n,v3+n

q  Dentro do VP

ð If v.w == 0 then

out.pos = MVP * float4(v.xyz * L.w – L.xyz , 0) else

out.pos = MVP * v.xyzw

(66)

Shadow Volume na GPU

q  Determinação do shadow volume na GPU

ð Quadrilátero degenerado em arestas vivas

² Vértices com normais das faces adjacentes

–  Shader transforma “back vertices” para infinito

² Grande número de vértices extras

(67)

Desacoplamento: geometria x oclusores

q  Possibilita uso de LOD

ð  Oclusores com modelos simplificados

² Importante preservar a silhueta

q  Problema

ð  Auto sombra

² Similar ao que acontece com shadow mapping

(68)

Desacoplamento: geometria x oclusores

q Solução

ð Formar volume com orientações inversas

² Front cap: back faces

² Back cap (at infinity): front faces

Volume de sombra convencional

(69)

Desacoplamento: geometria x oclusores

q Solução

ð Formar volume com orientações inversas

² Front cap: back faces

² Back cap (at infinity): front faces

Volume de sombra invertido

(70)

Visibility for per-pixel lighting

q Visibility set

ð Objetos dentro do frustum de visão: V

q  Light sets

ð Objetos dentro do frustum da fonte: Li

q Illumination set

ð I = V L

q Shadow set

ð H

(71)

Visibility for per-pixel lighting

q  Algoritmos de múltiplas passadas

ð Primeira passada define z-buffer

² Existem hw acelerados para z-only render

ð Demais passadas

² Uso de query de oclusão

q  Stencil para marcar frustum da fonte

ð Após primeira passada (z-buffer definido)

ð Marca stencil com frustum da fonte

² Análogo ao desenho de volumes de sombra

² Só processa pixel com valores de stencil zero (ou 128)

Referências

Documentos relacionados

Quando, a 27 de Abril, tropas da 2ª frente bielorrussa romperam na direcção de Prenzlau, Heinrici retirou para Norte duas divisões, disponibilizadas pelo Alto Comando da

Quadro 2 Quadro-resumo das condutas consesuadas sobre triagem e avaliação nutricional para o paciente oncológico adulto e idoso cirúrgico, clínico, transplantado (TCTH) e sob

2002 58 Três canções de embalar Soprano, clarinete, tuba, violoncelo e 7' 45'' para a Maria, a Miriam e a Contan ça Estreia em Condeixa em

(CESPE Ð TŽcnico Judici‡rio Ð TŽcnico de enfermagem Ð MPU Ð 2010) As cŽlulas musculares agrupam-se em feixes para formar as massas macrosc—picas que recebem o nome

Superintendência Regional de Meio Ambiente e Desenvolvimento Sustentável do Leste Mineiro Rua 28, 100 – Ilha dos Araújos – Governador Valadares –

I Suporte geom´ etrico para aplica¸ c˜ ao da textura?. I Em geral, usa-se um quadril´

O Vestibular 2015.1 da Facene tem caráter classificatório, pela ordem decrescente da média ponderada obtida pelo candidato na prova; e caráter eliminatório, se o

- {nodes} Camera Light Entity - app - shp Scene - env Transform Property Environ Appearance Material Texture Shape Engine Classe Node Atributos. I Nome associado ao n´