Traçado de raios - PUC-Rio

Propaganda
Luciana Brasil Sondermann Alves – PUC-Rio
Prof. Dr. Marcelo Gattass
Traçado de Raios
A ideia deste trabalho é explicar como funciona a técnica de traçado de raios
(raytracing), falando sobre os tipos de estratégias que podem ser tomadas, bem como
iluminação, sombra e visibilidade. Será explicado também um pouco sobre
implementação e, no final, será dado um exemplo de utilização da técnica.
O que é?
Traçado de raios é um tipo de algoritmo de iluminação global. Ele é bastante
útil, uma vez que os modelos de iluminação global estão relacionados ao realismo das
cenas geradas sinteticamente.
Como funciona?
A ideia geral do algoritmo citado é traçar raios na cena e, para cada objeto
interceptado pelo mesmo, deverá ser calculada a interseção e, para cada ponto
interceptado do objeto, deverão ser gerados dois raios, um refletido e outro refratado, de
acordo com a propriedade do material. Lembrando que só interessa o primeiro objeto
interceptado pelo raio.
A técnica de traçado de raios possui duas estratégias: forward e backward. Em
forward, são analisados todos os raios que saem da fonte de luz e calculam-se todas as
interseções desses raios com os objetos da cena. Não é vantajoso utilizar esta estratégia,
pois são muitos os raios que são emitidos por uma fonte de luz e nem todos chegam ao
observador, neste caso, seriam calculadas interseções desnecessárias.
Já na estratégia backward, o caminho inverso é percorrido, ou seja, em vez do
raio ser traçado a partir da fonte de luz e chegar ao observador, ele é traçado a partir do
observador, passando pelo objeto e chegando até o ponto de luz. Isto faz sentido, pois se
um objeto está sendo visto pelo observador, é sinal de que foram incididos raios de luz
sobre ele.
Figura 1
Luciana Brasil Sondermann Alves – PUC-Rio
Prof. Dr. Marcelo Gattass
Traçado de Raios
Na Figura 1, podemos observar interações dos raios de luz. É emitido um raio a
partir do observador que intercepta uma superfície transparente (3), gerando, assim dois
novos raios R1 (raio refletido) e T1 (raio refratado). Da superfície 3 é lançado um novo
raio S2 (raio de sombra – será explicado mais adiante). A cada ponto (P) de um objeto
interceptado pelo raio, os mesmos cálculos são realizados. Esta recursão pode ser
visualizada através de uma árvore e pode terminar de acordo com um dos seguintes
critérios: quando o raio interceptar uma superfície difusa, quando atingir uma
determinada profundidade ou quando a energia do raio ficar abaixo de um certo limiar
estabelecido anteriormente.
Iluminação
Para compor uma imagem na tela, é preciso que seja determinado a cor de cada
pixel. Pensando no raio de luz como um caminho reto traçado que é percorrido por
partículas de luz (fótons), a cor percebida pelo olho está totalmente relacionada com a
energia dos fótons.
Além dos raios emitidos e refratados que são gerados quando um raio atinge
um ponto P de um objeto, também é realizado um cálculo de um modelo de reflexão
local. Este cálculo é necessário, uma vez que há uma iluminação direta tingindo o
ponto.
Figura 2 – Exemplo de traçado de raios exemplificando os raios emitidos e refratados
Temos que I(P) = Ilocal (P) + Iglobal (P) = Ilocal (P) + krg (Pr) + ktg (Pt)
Onde: P é o ponto atingido, I(P) é a iluminação total no ponto, Pr é o raio
refletido no ponto P, Pt é o raio refratado no ponto P, krg é o coeficiente de reflexão
global e ktg é o coeficiente de transmissão global.
Sombra
A fim de que seja determinada a iluminação no ponto P, vemos se algum raio
de luz percorre até o ponto P. Para tal verificação, é lançado um raio de iluminação em
Luciana Brasil Sondermann Alves – PUC-Rio
Prof. Dr. Marcelo Gattass
Traçado de Raios
direção à fonte de luz, se o raio chegar à mesma, a fonte está iluminando aquela
superfície e, caso contrário, significa que algum objeto está bloqueando o raio e, neste
caso, haverá geração de sombra.
Figura 3 – Exemplos de cena com sombra
Visibilidade
Como nem todos os objetos que são interceptados pelos raios estão no raio de
visão do observador, os cálculos de intercessão não serão calculados para todos os
objetos. Este teste de visibilidade é feito da seguinte forma: para cada raio, verifica-se se
ele intercepta algum objeto e, ao final, é feita uma lista de objetos interceptados por
raios e os cálculos da intercessão só são realizados nos objetos que estão no raio de
visão do observador.
Cálculos e interseções
Como já foi dito anteriormente, quando um raio incide sobre um objeto ou
superfície podem ser gerados dois raios (refletido e refratado) de acordo com as
propriedades do material atingido.
Figura 4 – Reflexão e refração na interação de um raio com uma superfície
Luciana Brasil Sondermann Alves – PUC-Rio
Prof. Dr. Marcelo Gattass
Traçado de Raios
Na figura 4, podemos observar que os raios incidente (L) e refletido (R) fazem
o mesmo ângulo com a normal (n) à superfície. Logo, θi = θr e:
R = 2(L.n)n – L
E, como o sentido de L é da superfície para o observador,
L = -Rd
Onde Rd = P (coordenadas ponto atingido) – O (coordenadas do observador)
E, por fim, a direção do raio refratado pode ser calculada a partir da lei de
Snell:
(
(
) , onde η é o índice de refração entre os meios e
) ))
⁄
As interseções podem ocorrer com vários tipos de objetos, inclusive esferas e
planos.
Efeitos
Vários efeitos podem ser alcançados ao se utilizar a técnica de traçado de raios.
São eles: Gloss (efeito espelho) – pode ser alcançado gerando-se raios em direções
próximas à ideal e combinando-se os resultados, translucidez (transparência) – pode
ser alcançado traçando-se raios em direções próximas ao do raio refratado ideal e
combinando-se os resultados, penumbra (fonte de luz parcialmente oclusa) – pode ser
obtido traçando-se raios em direções aproximadas ao de sombra principal,
profundidade de campo – pode ser obtido utilizando técnicas estocásticas ao
distribuir-se os pontos de origem dos raios que passam por um pixel como se estivessem
sobre uma lente finita e combinando-se os raios resultantes e desfoque de movimentos.
Figura 5 – Efeito Gloss
Luciana Brasil Sondermann Alves – PUC-Rio
Prof. Dr. Marcelo Gattass
Traçado de Raios
Figura 6 – Efeito translucidez
Implementação
Será feita inicialmente uma implementação utilizando o programa Pov Ray. Ele
cria cenas foto realistas usando o traçado de raio a partir de um arquivo texto que
contém informações sobre os objetos e iluminação na cena. Uma imagem é gerada a
partir do campo de visão da câmera especificado no arquivo texto.
Inicialmente, é necessário adicionar um arquivo padrão, no nosso caso
incluiremos somente a declaração que inclui as cores:
#include "colors.inc"
A declaração da câmera descreve sua posição e como a câmera irá ver a cena.
As três coordenadas indicam a sua posição e para onde a câmera estará apontada.
camera {
location <0, 0, -2>
look_at <0, 0, 0>
right 2*x
up 1.5*y
}
Em seguida, colocamos as informações do plano: posição e cores:
plane { // the floor
<0.5, 1, 0>, -3 // along the x-z plane (y is the normal vector)
pigment { checker color <0.5451,0.3529,0>, color <0.9333,0.6039,0>, scale .3 } // checkered
pattern
}
E agora são colocadas as informações sobre as esferas da cena. É definida a
posição do centro de cada uma (as três primeiras coordenadas), valor do raio (valor após
Luciana Brasil Sondermann Alves – PUC-Rio
Prof. Dr. Marcelo Gattass
Traçado de Raios
as coordenadas do centro), cor <color (R,G,B)> e informações sobre a reflexão e
iluminação do material:
sphere {
<-2, 0, 4>, 1
pigment { color <0, 1, 0> }
finish {
reflection 0.3
phong 0.9
phong_size 40
}
}
sphere {
<1, 0, 4>, .5
pigment { color <0, 0, 1> }
finish {
reflection 0.05
phong 0.05
phong_size 2
}
}
E, por fim, adicionamos as informações da fonte de luz da cena – coordenadas
e cor (R, G, B):
light_source { <10, 10, 4> color <0.960784,1,0.980392> }
Figura 8 – Imagem gerada pelo Pov Ray com o código acima
Luciana Brasil Sondermann Alves – PUC-Rio
Prof. Dr. Marcelo Gattass
Traçado de Raios
Implementação em OpenGL
Em anexo, há um programa com a implementação do traçado de raios em
OpenGL. A diferença ao utilizarmos o OpenGL é que todos os cálculos precisam ser
feitos, inclusive os de interseção.
Figura 9 – Imagem gerada pelo programa em OpenGL (em anexo)
Download