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
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
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
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
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
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
Raster versus Ray Tracing
DI-UM Computação Gráfica 08/09 6[NVIDIA NVIRT 2009]
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
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,Θ)
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.
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
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
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
• 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 ←Ψ)
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
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
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
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
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
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
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
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
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
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
Ray Tracing: Imagens
DI-UM Computação Gráfica 08/09 24
[Turner Whitted, 1980]
Ray Tracing: Imagens
DI-UM Computação Gráfica 08/09 25
[Utah Teapot, 1980]
Ray Tracing Images
DI-UM Computação Gráfica 08/09 26
[NVidia, 2009]
[Henrik Wann Jensen, 2000]
Ray Tracing Images
DI-UM Computação Gráfica 08/09 27
[NVidia, 2009]
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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[
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
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]
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
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!
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)
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
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.
Trajectos de luz: Whitted ray tracing
DI-UM Computação Gráfica 08/09 51
E
L
D
S
LDSE
D
LDELDSSE
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
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
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
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
Path Tracing: Cornell Box
DI-UM Computação Gráfica 08/09 56
1024 samples per pixel: 1h10m 4096 samples per pixel: 4h05m
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.