Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

57
uís Paulo Santos - Computação Gráfica 08/09 uís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing

Transcript of Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Page 1: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Luís Paulo Santos - Computação Gráfica 08/09Luís Paulo Santos - Computação Gráfica 08/09

Computação Gráfica

Ray Tracing

Page 2: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Raster

• A técnica de rasterization tem como ciclo principal as primitivas geométricas do mundo

DI-UM Computação Gráfica 08/09 2

? ? ?

???

? ? ?

. Para cada primitiva

.. Iluminar os seus vértices

.. Projectar no viewport

.. Rasterization

Page 3: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Raster

• Pontos fracos– Todos os vértices são iluminados, mesmo que não sejam visíveis

na imagem– A iluminação de cada vértice é independente de todos os outros

objectos do mundo: Iluminação Local

• Pontos fortes– Disponibilidade de coprocessadores especializados (Graphics

Processing Unit), exímios a realizar projecções e rasterização

DI-UM Computação Gráfica 08/09 3

Page 4: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray tracing

• O ray tracing tem como ciclo principal os pixeis da imagem

DI-UM Computação Gráfica 08/09 4

? ? ?

???

? ? ?

. Para cada pixel

.. Determinar o ponto visível

.. Iluminar esse ponto

Page 5: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing

• Pontos fracos– A iluminação de um ponto pode ser arbitrariamente complexa,

impedindo eventualmente aplicações interactivas– Inexistência de coprocessadores especializados para implementar

o ray tracing. Este algoritmo executa no CPU, resultando num tempo por pixel superior ao raster

• Pontos fortes– A iluminação de cada ponto é dependente de todos os outros

objectos do mundo: Iluminação Global. O algoritmo de ray tracing incorpora naturalmente a grande maioria dos efeitos de transporte de luz

DI-UM Computação Gráfica 08/09 5

Page 6: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Raster versus Ray Tracing

DI-UM Computação Gráfica 08/09 6[NVIDIA NVIRT 2009]

Page 7: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Introdução

• O conceito de ray tracing foi introduzido na Computação Gráfica em 1980 por Whitted

• O termo ray tracing é usado livremente para designar uma infinidade de diferentes abordagens ao problema de rendering, desde que baseados no princípio de intersecção de uma semirecta (raio) com primitivas geométricas

• Esta sessão debruça-se sobre o algoritmo clássico de ray tracing conforme apresentado por Whitted, logo determinístico, e aborda algumas questões essenciais associadas com a sua funcionalidade, implementação e desempenho

DI-UM Computação Gráfica 08/09 7

Page 8: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray casting: definição

• Ray casting:Determina qual o ponto y visível ao longo de um raio com origem em x e direcção ψ.

sendo A o conjunto de todos os objectos representados na cena.

DI-UM Computação Gráfica 08/09 8

}0:min{

}:{),(

onintersecti

onintersecti

Atxttt

txyyxr

),( xry

x

Θ

y=r(x,Θ)

Page 9: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Plano da imagem

p

Ray Tracing: Princípios

DI-UM Computação Gráfica 08/09 9

Observador

x

Cena

Fonte de luz

L(x→Obs)

Raio Primário

Os raios primários determinam quais os objectos visíveis directamente pelo observador.

Page 10: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Algoritmo

// ciclo principal

computeImage (viewPoint) {

para cada pixel p {

raio = GerarRaio (viewPoint, p, PRIMARIO)

radiance[p] = rad (raio)

}

}

rad (raio) {

objecto, x = trace (raio)

computeRad (x, raio, objecto)

}

DI-UM Computação Gráfica 08/09 10

Page 11: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Algoritmo

// intersecção mais próxima da origem do raio

trace (raio) { // p = r (origem, direcção)tmin = Max_distPara todos os objectos da cena {

x = intersect (raio, objecto)dist = distancia (raio.origem, x)

if (dist < tmin) {tmin = distp = x obj = objecto }

}return (obj, p)

}

DI-UM Computação Gráfica 08/09 11

Page 12: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Raios Primários

• Os raios primários determinam quais os pontos visíveis directamente pelo observador. Diz-se que propagam importância, pois estes pontos passam a ser importantes para a imagem.

• O algoritmo pode parar por aqui atribuindo uma cor aos pontos:– Pseudo-cor – visualização científica– Em função da posição das fontes de luz sem verificar se são

visíveis: iluminação local

• Inexistência de sombras• As placas gráficas fazem isto, usando no entanto o algoritmo de

profundidade para determinar a visibilidade (depth buffer ou Z-buffer)

DI-UM Computação Gráfica 08/09 12

Page 13: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

• A radiância reflectida por um ponto p ao longo de uma direcção Θ, Lr (p → Θ), devido a radiância incidente em p ao longo da direcção Ψ, Li (p← Ψ), é dada por:

• fr(p, Θ <-> Ψ) – Bidirectional Reflectance Distribution Function (BRDF), caracteriza o material; indica a fracção da radiância incidente ao longo de Ψ que é reflectida ao longo de Θ (por comprimento de onda)

• cos (N, Ψ) – cosseno entre a direcção de incidência e a normal da superfície do objecto no ponto I

Ray Tracing: Radiância reflectida

DI-UM Computação Gráfica 08/09 13

),cos( )( ),()( NpLpfpL irr

NLr (p → Θ) Li(p ←Ψ)

Page 14: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Iluminação Directa

DI-UM Computação Gráfica 08/09 14

• A radiância reflectida pode ser dividida em 2 integrais:

– iluminação directa oriunda das fontes de luz

– iluminação indirecta, oriunda de todas as outras direcções

)()()( pLpLpL indirectadirectar

• A iluminação directa é tão importante que quase todos os algoritmos de ray tracing a calculam dipsrando raios na direcção das fontes de luz

• Estes raios (shadow rays) determinam apenas se a fonte de luz é visível a partir de p ou não

Page 15: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Iluminação Directa

• A maioria dos ray tracers clássicos permite aproximar as fontes de luz como fontes ideais: pontos que emitem com igual intensidade em todas as direcções.

– Um raio disparado na direcção de p para Li basta para determinar se a fonte pontual Li é visível a partir do ponto p (chamemos a esta direcção ψi)

• A BRDF para este ponto e este par de direcções, fr(p,Θ ↔ ψi), indica a percentagem de radiância incidente ao longo de ψi

que é reflectida na direcção Θ.

DI-UM Computação Gráfica 08/09 15

Page 16: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Iluminação Directa

• V(x,y) é a função de visibilidade:

• V(x,y) é avaliada disparando um raio de x para ySe nenhum objecto for intersectado por este raio a uma distância da origem menor do que a distância da fonte de luz então V(x,y)=1, senão V(x,y)=0

• Estes raios são designados por shadow rays ou shadow feelers

DI-UM Computação Gráfica 08/09 16

x)departir a visívelé nãoy se (i.e.,

x)departir a visíveléy se (i.e.,

),( se 0

),( se 1),(

yxr

yxryxV

Page 17: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Iluminação Directa

DI-UM Computação Gráfica 08/09 17

Plano da imagem

p

Observador

x

Cena

Fonte de luz

L(x→Obs)

Raio Primário

Fonte de luz

Page 18: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Iluminação Directa

computeRad (x, raio, objecto) { radiance = directIllum (x, raio.dir, objecto) return (radiance)}

directIllum (x, dir, objecto) {rad = 0;

para cada fonte de luz l {raio = GerarRaio (x, l, SHADOW)if (visibilidade (raio, l)) rad += brdf (x, dir, dir_l)* Ll * cos (Nx, dir_l)

}return (rad)

}

DI-UM Computação Gráfica 08/09 18

Page 19: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Iluminação Directa

// visibilidade da fonte de luz

visibilidade (raio,l) { // V(x,y)tmin = distancia (raio.origem,l)Para todos os objectos da cena {

p = intersect (raio, objecto)dist = distancia (raio.origem, p)if (dist < tmin)

return (0)}return 1

}

DI-UM Computação Gráfica 08/09 19

Page 20: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Iluminação Indirecta

DI-UM Computação Gráfica 08/09 20

Quais as direcções a considerar para a iluminação indirecta?

O ray tracing clássico sugere que se amostre as direcções especulares, pois estas correspondem a máximos da BRDF

• reflexão especular : aproximada pela direcção R

• transmissão especular : aproximada pela direcção T

Page 21: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Iluminação Indirecta

DI-UM Computação Gráfica 08/09 21

• Reflexão especular

• Transmissão especular(lei de Snell)

θi

θt

θrV

N

R

T

VVNNR

)(2

NNVV

T

NV

t

tt

t

i

i

t

))(

(cos

))(1(1sin1cos

sin

sin

222

Page 22: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Iluminação Indirecta

• Para calcular a radiância incidente em x ao longo de cada uma das direcções R e T devem ser enviados raios secundários ao longo de cada uma destas direcções.

• O processamento dos raios secundários é em tudo equivalente aos raios primários, fazendo do ray tracing um algoritmo recursivo que gera uma árvore de raios.

• É necessário um critério de paragem para que a árvore não tenha profundidade infinita:– Terminar ao atingir uma determinada profundidade– Terminar quando a contribuição de um raio for inferior a um

determinado limite– Decidir de forma estocástica (Roleta Russa)

DI-UM Computação Gráfica 08/09 22

Page 23: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Iluminação Indirecta

computeRad (x, raio, objecto, depth) { rad = directIllum (x, raio.dir, objecto)

if (depth < MAX_DEPTH) {

if (ksg > 0) { // reflexão especularraioR = GerarRaio (x, Rg, REFLEXAO)objR, p = trace (raioR)rad += ksg*cos(N,raioR)*computeRad (p,raioR,objR, depth++)}

if (ktg > 0) { // transmissão especularraioT = GerarRaio (x, Tg, TRANSMISSAO)objT, p = trace (raioT)rad += ktg*cos(N,raioT)*computeRad (p,raioT,objT, depth++)}

} return (rad) }

DI-UM Computação Gráfica 08/09 23

Page 24: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Imagens

DI-UM Computação Gráfica 08/09 24

[Turner Whitted, 1980]

Page 25: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Imagens

DI-UM Computação Gráfica 08/09 25

[Utah Teapot, 1980]

Page 26: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing Images

DI-UM Computação Gráfica 08/09 26

[NVidia, 2009]

[Henrik Wann Jensen, 2000]

Page 27: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing Images

DI-UM Computação Gráfica 08/09 27

[NVidia, 2009]

Page 28: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Complexidade

• O algoritmo usado para determinar a visibilidade ao longo de um raio requer que cada raio seja intersectado com TODAS as primitivas geométricas da cena.

• O tempo para cada raio é, portanto, linear com o número de primitivas N:

• No entanto, cada raio não passa na proximidade da maioria das primitivas

DI-UM Computação Gráfica 08/09 28

)(ray NT

Page 29: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Estruturas de Aceleração

• O objectivo das estruturas de aceleração é diminuir o número de intersecções por raio.

• Isto é conseguido:1. Permitindo a rejeição rápida e simultânea de grupos de primitivas2. Se possível, ordenando o processo de procura (intersecções), tal

que as primitivas mais próximas da origem do raio sejam processadas primeiro, evitando processar as mais distantes se for encontrada uma intersecção

• Abordagens:– SUBDIVISÃO DO ESPAÇO: grelhas regulares, octrees, kd-tree

Permitem aplicar os critérios 1 e 2

– SUBDIVISÃO DOS OBJECTOS: bounding volume hierarchy (BVH)Permitem aplicar apenas o critério 1

DI-UM Computação Gráfica 08/09 29

Page 30: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Grelha Regular

• O espaço 3D é particionado impondo uma grelha regular que o subdivide em voxels (volume elements). Todos os voxels têm a mesma dimensão.

DI-UM Computação Gráfica 08/09 30

• Construção muito rápida•Travessia pouco eficiente devido à má distribuição das primitivas pelos voxels

Page 31: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Octree

• O espaço é hierarquicamente e adaptativamente subdividido em 8 voxels

DI-UM Computação Gráfica 08/09 31

• Compromisso entre tempo de construção e eficiência da travessia

Page 32: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Kd-tree

• O espaço é subdividido em 2 por um plano. Cada um dos sub-espaços resultantes é depois subdividido da mesma forma, até atingir um determinado critério de paragem

DI-UM Computação Gráfica 08/09 32

• Travessia mais eficiente se o critério de subdivisão for apropriado (e.g., SAH)• Quanto mais sofisticado for o critério de subdivisão maior o tempo necessário para a construir

Page 33: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Bounding Volume Hierarchy

• Os objectos são agrupados dentro de Bounding Volumes. Cada um destes grupos é depois hierarquicamente subdividido por outros volumes

DI-UM Computação Gráfica 08/09 33

• Não ordena o espaço• Construção semelhante à kd-tree• Travessia ligeiramente inferior à kd-tree

Page 34: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Geometria Dinâmica

• Qual a estrutura mais indicada se a geometria se move?

DI-UM Computação Gráfica 08/09 34

• Reaproveitamento da hierarquia (topologia da árvore), com ajustamento das dimensões dos volumes

• Com grandes deformações da geometria a hierarquia inicial deixa de ser apropriada para a distribuição das primitivas, exigindo uma reconstrução completa da BVH

Page 35: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Complexidade

• A complexidade do ray tracing com uma estrura de aceleração apropriada é logarítmica com o número de primitivas geométricas N:

• O tempo de construção depende do critério de subdivisão do espaço / agrupamento das primitivas

• Critérios sofisticados (e.g., SAH) resultam em travessias eficientes,mas exigem tempos de construção muito elevados

• O tempo de reconstrução/reajustamento de uma estrutura de aceleração pode impedir a sua utilização em contextos interactivos.

DI-UM Computação Gráfica 08/09 35

)(logray NT

Page 36: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Aliasing

• O resultado de um ray tracer é uma grelha bidimensional discreta com valores de radiância incidente no plano da imagem

• Mas a radiância incidente é na realidade uma função contínua definida sobre este plano

• A estratégia de amostragem (distribuição) e a sua densidade (frequência) afectam a qualidade do resultado

DI-UM Computação Gráfica 08/09 36

Se a distribuição da amostragem é uniforme e a frequência é inadequada são introduzidos artefactos na imagem, fenómeno vulgarmente designado por aliasing

Page 37: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Teoria da amostragem

• Selecção de pontos de amostragem de funções contínuas eutilização das amostras para construir novas funções semelhantes à original

DI-UM Computação Gráfica 08/09 37

)(xf * )(xIIIT

* )( xr

)(~xf

)(xf - função contínua

fDx' - Posição da amostra )'(xf - amostra)(xr - filtro reconstrução )(

~xf - função reconstruída

Page 38: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Limite de Nyquist

DI-UM Computação Gráfica 08/09 38

Limite de NyquistSe a frequência de amostragem, fs, é maior ou igual ao dobro da maior frequência presente no sinal

(função contínua), fmax, então é possível reconstruir perfeitamente o sinal original.

)()(~

então *2 se max xfxfff s

)(xf * )(xIIIT

* )( xr

)(~xf

Page 39: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Ray Tracing: Aliasing

DI-UM Computação Gráfica 08/09 39

• Um ray tracer amostra a radiância incidente no plano da imagem com uma dada frequência de amostragem (frequentemente determinada pela resolução do plano da imagem)

• Para que não surjam fenómenos de aliasing a frequência de amostragem deve ser maior ou igual ao limite de Nyquist

• Qualquer função que tenha descontinuidades não é limitada em banda, isto é, não tem uma frequência máxima

• As imagens têm descontinuidades (p. ex.: limites geométricos, contornos de sombras ou reflexões) logo não são limitadas em banda

• Os fenómenos de aliasing são portanto inevitáveis com distribuições uniformes

Page 40: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Antialiasing: Sobreamostragem

• A frequência de amostragem pode aumentar disparando mais do que um raio primário por pixel

DI-UM Computação Gráfica 08/09 40

1.6 seg 6.0 seg

Page 41: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Antialiasing: Sobreamostragem adaptativa

• Para evitar o aumento linear do tempo de execução aumenta-se a frequência de amostragem apenas quando a diferença entre 2 amostras vizinhas ultrapassa um determinado limite

DI-UM Computação Gráfica 08/09 41

• Uma vez que uma imagem com descontinuidades não é limitada em banda, o aumento da frequência de amostragem nunca elimina o fenómeno de aliasing, apenas reduz o erro

• Esta redução pode resultar num erro abaixo do limite percepcionável pelo Sistema Visual Humano

Page 42: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Antialiasing: Amostragem não uniforme

• O impacto visual de aliasing pode ser reduzido variando o espaçamento entre amostras– Por exemplo seleccionando o ponto de amostragem

estocasticamente

• O sinal reconstruído continua a ser incorrecto, mas é percepcionado como ruído e não como aliasing

• O ruído é a variância introduzida pelas variáveis aleatórias usadas no processo de selecção das amostras

• O sistema visual humano é mais tolerante a ruído aleatório do que a aliasing estruturado

DI-UM Computação Gráfica 08/09 42

Page 43: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Antialiasing: Amostragem não uniforme

DI-UM Computação Gráfica 08/09 43

Pseudo-aleatório

2

1

y

x

Estratificado

p

p

yy

xx

Jittered

2

1

*5.0

*5.0

p

p

yy

xx

• ξ1 e ξ2 são variáveis aleatórias com distribuição uniforme no domínio [0 .. 1[

Page 44: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Antialiasing: Amostragem não uniforme

DI-UM Computação Gráfica 08/09 44

Uniform (1spp) – 1.6 seg Jittered (1spp) – 1.6 seg

• O aliasing é removido introduzindo jittering e mantendo 1 amostra por pixel (spp: samples per pixel)

• É introduzido ruído no resultado• O tempo de execução mantém-se constante

Page 45: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Antialiasing: Amostragem não uniforme

DI-UM Computação Gráfica 08/09 45

• A utilização de distribuições de amostragem apropriadas permite obter melhores resultados (menor variância) com o mesmo número de raios

Imagens obtidas com o mesmo número de raios e diferentes distribuições[Pharr & Humphreys, 2004]

Page 46: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Fontes de luz

• As fontes de luz constituídas apenas por um ponto que emite potência radiante com igual intensidade em todas as direcções não têm equivalente na realidade

• As imagens resultantes de usar estes fontes de luz têm sombras com contornos muito definidos devido ao determinismo do algoritmo

DI-UM Computação Gráfica 08/09 46

Page 47: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Fontes de luz

• As fontes de luz com área permitem suportar sombras com diferentes gradações, isto é, umbra e penumbra

DI-UM Computação Gráfica 08/09 47

Como se trata de uma área são utilizados vários raios para amostrar a fonte de luz.

O ponto na área da fonte de luz que é amostrado por cada raio é escolhido aleatoriamente.

Esta aleatoriedade evita o aliasing, mas introduz ruído!

Page 48: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

DI-UM Computação Gráfica 08/09 48

Trajectos de luz

• Sendo o transporte de luz aproximado pela óptica geométrica, podemos conceber que cada fotão percorre um trajecto desde a fonte de luz até ao seu destino final

• Este trajecto é composto por segmentos de recta direccionais, representando os extremos interacções do fotão com um objecto.

• A interacção pode ser difusa (D) ou especular (S)

• O conjunto de interacções é representado por uma string com origem na fonte de luz (L) e a terminar no ponto onde o fotão é absorvido ou no observador (E)

Page 49: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

DI-UM Computação Gráfica 08/09 49

Trajectos de luz

Material Difuso

Material Especular

a

a

a

a - LSDE

bb

b

b - LDSE

c

c

c

c - LDDE

Page 50: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

DI-UM Computação Gráfica 08/09 50

Trajectos de luz

• A árvore de raios gerada pelo ray tracing de Whitted começa no observador e termina sempre que encontrar um material difuso.

• Os trajectos simulados são portanto sempre do tipoL[D][S*]E

• Os caminhos ‘a’ e ‘c’ do acetato anterior não são simulados

• O caminho ‘a’ resultaria na projecção pelo espelho do reflexo da fonte de luz no chão difuso. O ray tracing clássico não modela este fenómeno.

Page 51: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Trajectos de luz: Whitted ray tracing

DI-UM Computação Gráfica 08/09 51

E

L

D

S

LDSE

D

LDELDSSE

Page 52: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Path Tracing

• O ray tracing clássico é perfeitamente determinístico. Para cada ponto:– Disparar raios na direcção das fontes de luz– Se o material é um reflector especular dispara um raio na direcção R– Se o material é um transmissor especular dispara um raio na

direcção T

• Como as restantes direcções não são amostradas por raios, os fenómenos difusos globais não são simulados:– Interreflexões difusas e color bleeding – exemplo: iluminação do tecto

da Cornell Box por luz reflectida pelas paredes difusas – Cáusticas – exemplo: luz transmitida pela esfera transparente é

ficada no chão e parede da Cornell Box

• Estas limitações são ultrapassadas recorrendo a algoritmos estocásticos

DI-UM Computação Gráfica 08/09 52

Page 53: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Path Tracing

• Este algoritmo selecciona estocasticamente (isto é, de forma aleatória) qual a direcção ao longo da qual é disparado o próximo raio

• Como a selecção é estocástica qualquer direcção pode ser seleccionada– Como qualquer direcção pode ser seleccionada qualquer

fenómeno modelável pela óptica geométrica pode ser simulado

• A introdução de probabilidades introduz ruído nas imagens

• O ruído pode ser reduzido disparando vários (muitos) raios primários por pixel.

DI-UM Computação Gráfica 08/09 53

Page 54: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Path Tracing: Exemplo

DI-UM Computação Gráfica 08/09 54

Plano da imagem

p

Observador

x

Cena

Fonte de luz

Raio Primário 1

Nota: Os shadow rays são disparados em todas as intersecções.Não estão representados para simplificar a animação.

Raio Primário 2

Page 55: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Path Tracing: Cornell Box

DI-UM Computação Gráfica 08/09 55

4 samples per pixel: 16 s 64 samples per pixel: 4 m

Page 56: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Path Tracing: Cornell Box

DI-UM Computação Gráfica 08/09 56

1024 samples per pixel: 1h10m 4096 samples per pixel: 4h05m

Page 57: Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Trajectos de luz: path tracing

DI-UM Computação Gráfica 08/09 57

E

L

S

S

D

LSSDE

D

D

LDDE

Os trajectos de luz – seguidos a partir do observador – não terminam em materiais difusos.Podem continuar pois é sempre seleccionada uma direcção para amostrar.