1
Alberto Raposo – PUC-Rio
INF 1366 – Computação Gráfica Interativa
Ray Tracing (Traçado de Raios)
Alberto B. [email protected]
http://www.tecgraf.puc-rio.br/~abraposo/INF1366/index.htm
Alberto Raposo – PUC-Rio
Ray Tracing / Ray Casting• Como computar a irradiação de um raio de
luz?
Angel Figure 6.2
D. BroganUniv. of Virginia
2
Alberto Raposo – PUC-Rio
Ray Casting
•Forma mais simples de Ray Tracing
Plano de visualização
Posição do observador
Raios atravésdo plano devisualização
D. BroganUniv. of Virginia
Alberto Raposo – PUC-Rio
Máquina de ray casting de Durer
• Albrecht Durer, Século XVI
Cluter & Durand, MIT
3
Alberto Raposo – PUC-Rio
Máquina de ray casting de Durer
Cluter & Durand, MIT
Alberto Raposo – PUC-Rio
Máquina de ray casting de Durer
Cluter & Durand, MIT
4
Alberto Raposo – PUC-Rio
Ray Casting• Para cada amostra (pixel)…
– Construa raio da posição do observador através do plano de visualização• feito no sentido contrário: do olho para fonte de luz. Assim, só
calculamos os raios que geram alguma coisa visível
– Encontre a primeira superfície que o raio intercepta– Calcule a cor baseada no modelo de iluminação (ex., Phong)
D. BroganUniv. of Virginia
Alberto Raposo – PUC-Rio
Ray Casting
Amostras no planode visualização
Posição do olho
Raiosatravés do
plano de visualização
D. BroganUniv. of Virginia
5
Alberto Raposo – PUC-Rio
Ray Casting• Implementação Simples:
Image RayCast(Camera camera, Scene scene, int width, int height){
Image image = new Image(width, height);for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) { Ray ray = ConstructRayThroughPixel(camera, i, j);Intersection hit = FindIntersection(ray, scene);image[i][j] = GetColor(hit);
}}return image;
}D. BroganUniv. of Virginia
Alberto Raposo – PUC-Rio
Ray Casting• Implementação Simples:
Image RayCast(Camera camera, Scene scene, int width, int height){
Image image = new Image(width, height);for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) { Ray ray = ConstructRayThroughPixel(camera, i, j);Intersection hit = FindIntersection(ray, scene);image[i][j] = GetColor(hit);
}}return image;
}D. BroganUniv. of Virginia
6
Alberto Raposo – PUC-Rio
Construindo Raio Através de um Pixel
right
back
Up direction
P0
towards
Plano devisualização
P
V
Ray: P = P0 + tVRay: P = P0 + tV
D. BroganUniv. of Virginia
Alberto Raposo – PUC-Rio
Construindo Raio Através de um Pixel
• Exemplo 2D
dΘ towardsP0
right
right = towards x up
Θ = meio ângulo do frustumd = distância ao plano de visualização
P1 = P0 + d*towards – d*tan(Θ)*rightP2 = P0 + d*towards + d*tan(Θ)*right
P1
P2
2*d*tan(Θ)
P
P = P1 + (i/width + 0.5) * (P2 - P1)= P1 + (i/width + 0.5) * 2*d*tan (Θ)*right
V = (P - P0) / ||P - P0 ||
V
Raio: P = P0 + tVRaio: P = P0 + tV
D. BroganUniv. of Virginia
2200 )()(),(
00 PPPP yyxxPPdistPP −+−==−
7
Alberto Raposo – PUC-Rio
Ray Casting• Implementação Simples:
Image RayCast(Camera camera, Scene scene, int width, int height){
Image image = new Image(width, height);for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) { Ray ray = ConstructRayThroughPixel(camera, i, j);Intersection hit = FindIntersection(ray, scene);image[i][j] = GetColor(hit);
}}return image;
}D. BroganUniv. of Virginia
Alberto Raposo – PUC-Rio
Interseção do raio com a cena
• É o que consome a maior parte do algoritmo de ray trace.
• Interseções com diferentes primitivasgeométricas– Esfera– Triângulo– Grupos de primitivas (cena)
8
Alberto Raposo – PUC-Rio
Interseção Raio-EsferaRaio: P = P0 + tVEsfera: |P - C|2 - r 2 = 0
P0
V
C
P
r
P’
D. BroganUniv. of Virginia
Alberto Raposo – PUC-Rio
Interseção Raio-EsferaRaio: P = P0 + tVEsfera: ||P – C||2 = r 2
Substituindo P:||P0 + tV - C||2 = r 2
P0
V
C
Pr
P’
( )( ) ( )( ) 200 rVtCPVtCP =+−⋅+−
[ ] [ ] ( ) ( )[ ] 0)(2 2000
2 =−−⋅−+−⋅+⋅ rCPCPtCPVtVV
9
Alberto Raposo – PUC-Rio
Interseção Raio-Esfera
P0
V
C
Pr
P’[ ] [ ] ( ) ( )[ ] 0)(2 2
0002 =−−⋅−+−⋅+⋅ rCPCPtCPVtVV i
02 =++ ctbta ii
Equação do 2o grau:
Solução:
aacbbt
242 −±−
=
Onde: a = ||V||2 = 1b = 2 V • (P0 - C) c = ||P0 – C||2 - r 2
Se a direção do raioestiver normalizada!
Alberto Raposo – PUC-Rio
Interseção Raio-Esfera
:042 >−=∆ acbse
abt
abt
2
2
2
1
∆+−=
∆−−=
),min( 21 ttti =
se ti > 0 :
VtPtPP ii +== 0)(
P0
V
C
Pr
P’
VtPtPP jj +== 0)('
),max( 21 ttt j =
(se t1 e t2 < 0, raio não intercepta esfera)
10
Alberto Raposo – PUC-Rio
Interseção Raio-Esfera
P0
V
CP r
N = (P - C) / ||P - C||N
• Precisa do vetor normal no ponto de interseção P para cálculo da iluminação
D. BroganUniv. of Virginia
Alberto Raposo – PUC-Rio
Interseção Raio-Esfera
• Ray Tracing seria muito simples se mundo fosse composto apenas por esferas...
Cluter & Durand, MIT
11
Alberto Raposo – PUC-Rio
Interseção Raio-Triângulo
• Primeiro, ache a interseção do raio com o plano do triângulo
• Depois verifique se o ponto de interseção estádentro do triângulo
P
P0
V
D. BroganUniv. of Virginia
Alberto Raposo – PUC-Rio
Interseção Raio-PlanoRaio: P = P0 + tVPlano: (P – A) • N = 0
Substituindo P:(P0 + tV - A) • N = 0
Solução: ti = (A - P0 )• N / (V • N) N
P
P0
VP = P0 + tiV
D. BroganUniv. of Virginia
A
Ponto qualquerdo plano
12
Alberto Raposo – PUC-Rio
Interseção Raio-Triângulo• Verifica se P está dentro do triângulo
parametricamente
P
P0
Computa α, β:P = α (T2-T1) + β (T3-T1)
Checa se ponto está dentro:0 ≤ α ≤ 1 e 0 ≤ β ≤ 1 eα + β ≤ 1
Vα
βT1
T2
T3
D. BroganUniv. of Virginia
Alberto Raposo – PUC-Rio
Outras Interseções• Cone, cilindro, elipsóide:
– Similar à esfera• Box
– Procura interseção com 3 faces (planos) frontais e retorna o mais próximo do observador
• Polígono convexo– Similar ao triângulo (verifica algebricamente se ponto
de interseção com plano está dentro do polígono)• Polígono côncavo
– Interseção com plano igual, mas o teste para saber se ponto está dentro do polígono é bem mais complexot
13
Alberto Raposo – PUC-Rio
Otimizações no processo de cálculo das interseções
• Tenta-se diminuir os polígonos a serem testados para interseção:– Bounding volumes (caixas ou esferas)– Divisão hierárquica do espaço
• Uniforme• Não-uniforme (quadtree, octree)
Alberto Raposo – PUC-Rio
Ray Casting – Iluminação Direta
• Traça raios primários a partirda câmera– Iluminação direta apenas
de luzes não-bloqueadas
∑ •+•++=L LL
nSDAAE ISRVKLNKIKII ))()(( D. Brogan
Univ. of Virginia
14
Alberto Raposo – PUC-Rio
Sombras• Termo de sombra (Si) diz se fontes de luz
estão bloqueadas– Trace o raio da interseção
com o objeto até cada fonte Li
– Si = 0 se raio está bloqueado, Si = 1 caso contrário
– 0 < Si < 1 soft shadows (truque)
∑ •+•++=L LL
nSDAAE ISRVKLNKIKII ))()((
D. BroganUniv. of Virginia
Alberto Raposo – PUC-Rio
Traçado de Raios Recursivo
R1
T1
R2
T2
R3
L1L3
L2
R1
R2
L1
L3L2
T1
T2R3
M. Gattass, PUC-Rio
15
Alberto Raposo – PUC-Rio( ( ) ( ) )n
E A A D S L L R R T TLI I K I K N L K V R S I K I K I= + + • + • + +∑
Ray Tracing recursivo – efeitos de segunda ordem
• Traça raios secundários a partir das superfícies de intersecção– Iluminação global
(reflexão especulare transparência)
D. BroganUniv. of Virginia
Alberto Raposo – PUC-Rio
Reflexões Especulares
• Traça raio secundáriona direção da reflexão– Avalia radiância ao
longo do raiosecundário e a inclui no modelo de iluminação.
( ( ) ( ) )nE A A D S L L R R T TL
I I K I K N L K V R S I K I K I= + + • + • + +∑
Radiância parao raio refletido
IR
D. BroganUniv. of Virginia
16
Alberto Raposo – PUC-Rio
Reflexões Especulares
Superfície especular
n̂v̂θ
θ
ipr̂
rpp ˆ)(: ttrefletidoRaio i +=
M. Gattass, PUC-Rio
Alberto Raposo – PUC-Rio
Transparência
• Traça raio secundáriona direção da refração– Avalia radiância ao
longo do raiosecundário e a incluino modelo de iluminação
( ( ) ( ) )nE A A D S L L R R T TL
I I K I K N L K V R S I K I K I= + + • + • + +∑
Radiância do raio refratado
IT
D. BroganUniv. of Virginia
17
Alberto Raposo – PUC-Rio( ( ) ( ) )n
E A A D S L L R R T TLI I K I K N L K V R S I K I K I= + + • + • + +∑
Transparência
• Coeficiente de transparência é a fração do raiotransmitida– KT = 1 para objeto
transparente, KT = 0 para opaco
– 0 < KT < 1 para objetosemi-transparente
Coefiente detransparência
KT
D. BroganUniv. of Virginia
Alberto Raposo – PUC-Rio
Cálculo do raio refratado (transparência)• Para superfícies muito finas, pode-se ignorar mudança de
direção do raio– Assume que luz atravessa superfície e segue em linha reta
N
LΘi
TΘr
ηr
ηi
Θi
TLT −≅
D. BroganUniv. of Virginia
18
Alberto Raposo – PUC-Rio
Cálculo do raio refratado (transparência)
N
LΘi
TΘr
ηr
ηi
LNTr
iri
r
i
ηη
ηη
−Θ−Θ= )coscos(
Para objetos sólidos, aplique Lei de Snell:
iirr Θ=Θ sinsin ηη
D. BroganUniv. of Virginia
Alberto Raposo – PUC-Rio
Exemplo de refração
• Enright, D., Marschner, S. and Fedkiw, R.
19
Alberto Raposo – PUC-Rio
Resumo
• Ray casting (iluminação direta)– Geralmente usa simplificações analíticas para a
emissão das fontes de luz e para a reflectânciadas superfícies
• Ray tracing recursivo (iluminação global)– Incorpora sombras, reflexões especulares, e
refraçõesTudo isso é uma aproxmação, paratornar viável computacionalmente a geração das imagens foto-realistas
Tudo isso é uma aproxmação, paratornar viável computacionalmente a geração das imagens foto-realistas
Alberto Raposo – PUC-Rio
Resultado de curso
Alunos de CGI98M. Gattass, PUC-Rio
20
Alberto Raposo – PUC-Rio
Resultado de curso
Alunos de CGI2004.2A. Raposo, PUC-Rio
Alberto Raposo – PUC-Rio
Resultado de curso
Alunos de FCG2005.2M. Gattass, PUC-Rio
21
Alberto Raposo – PUC-Rio
Algoritmo de traçado de raios
Color trace (Scene scene, Vector3d eye, Vector3d ray, int depth){determine a interseção mais próxima com um objetoif (intercepta objeto) { calcule a normal no ponto de interseçãoreturn ( shade ( scene, object, ray, point, normal, depth));}return BACKGROUND;}
Color trace (Scene scene, Vector3d eye, Vector3d ray, int depth){determine a interseção mais próxima com um objetoif (intercepta objeto) { calcule a normal no ponto de interseçãoreturn ( shade ( scene, object, ray, point, normal, depth));}return BACKGROUND;}
selecione o centro de projeção(eye) e uma janela no plano de projeçãofor (cada pixel da tela) { determine o raio ray que vai do centro de projeção ao pixel;pixel = trace ( scene, eye, ray, 1);}
}
selecione o centro de projeção(eye) e uma janela no plano de projeçãofor (cada pixel da tela) { determine o raio ray que vai do centro de projeção ao pixel;pixel = trace ( scene, eye, ray, 1);}
}
M. Gattass, PUC-Rio
Alberto Raposo – PUC-Rio
Color shade (Scene scene, Object object, Vector3D ray,Vector3D point, Vector3D normal, int depth)
{color = termo ambiente do material do objeto ;
for (cada luz) {L = vetor unitário na direção de point para a posição da luz;if (L • normal>0) {
if (a luz não for bloqueada no ponto) {color += componente difusa (Eq.difusa) + componente especular (Eq. especular)
} }
if (depth >= maxDepth) return color;
if (objeto é refletor) {rRay = raio na direção de reflexão;rColor = trace(scene, point, rRay, depth+1);reduza rColor pelo coeficente de reflexão especular e some a color; }
return color;}
Color shade (Scene scene, Object object, Vector3D ray,Vector3D point, Vector3D normal, int depth)
{color = termo ambiente do material do objeto ;
for (cada luz) {L = vetor unitário na direção de point para a posição da luz;if (L • normal>0) {
if (a luz não for bloqueada no ponto) {color += componente difusa (Eq.difusa) + componente especular (Eq. especular)
} }
if (depth >= maxDepth) return color;
if (objeto é refletor) {rRay = raio na direção de reflexão;rColor = trace(scene, point, rRay, depth+1);reduza rColor pelo coeficente de reflexão especular e some a color; }
return color;}
M. Gattass, PUC-Rio
22
Alberto Raposo – PUC-Rio
Exemplos: Ray Tracing
"Warm Up" © Norbert Kern (2001)
Alberto Raposo – PUC-Rio
Exemplos: Ray Tracing
http://www.irtc.org/
23
Alberto Raposo – PUC-Rio
Exemplos: Ray Tracing
http://www.irtc.org/
Alberto Raposo – PUC-Rio
Exemplos: Ray Tracing
http://www.povray.org/
24
Alberto Raposo – PUC-Rio
Radiosidade
observador
• Escultura de J. Ferren• Painéis difusos
diagrama:
fotografia:
Cluter & Durand, MIT
Alberto Raposo – PUC-Rio
Radiosidade vs. Ray Tracing
Escultura original de John Ferren iluminadapor trás pela luz do dia.
Imagem gerada porradiosidade.
Imagem gerada por ray tracing.Ray tracer padrão nãoconsegue simular a inter-reflexão da luz entre as superfícies difusas.
Cluter & Durand, MIT
25
Alberto Raposo – PUC-Rio
Radiosidade vs. Ray Tracing• Ray tracing é algoritmo no espaço da imagem
– Se câmera se move, precisa recomeçar cálculo
• Radiosidade é computada no espaço de objeto– View-independent
(só não pode moveras fontes de luz)
– Pode pré-computariluminação complexa
Cluter & Durand, MIT
Alberto Raposo – PUC-Rio
Radiosidade• Assume-se que superfícies são
lambertianas ideiais (difusas)– refletem luz incidente igualmente
em todas as direções• Cena é dividida em conjunto
depequenas áreas (patches). • A radiosidade, Bi, do patch i é a
taxa total de energia que sai dasuperfície. A radiosidade sobreum patch é constante.
x'
ω'
Cluter & Durand, MIT
26
Alberto Raposo – PUC-Rio
Equação de RadiosidadeL(x',ω') = E(x',ω') + ∫ρx'(ω,ω')L(x,ω)G(x,x')V(x,x') dA
Bx' = Ex' + ρx' ∫ Bx G(x,x')V(x,x')
Superfícies perfeitamente difusas (não direcionais):
Cluter & Durand, MIT
Alberto Raposo – PUC-Rio
Exemplos: Radiosidade
Lightscape http://www.lightscape.com
27
Alberto Raposo – PUC-RioProgram of Computer Graphics, Cornell University.Note a iluminação indireta do teto.
Exemplos: Radiosidade
Alberto Raposo – PUC-Rio
Informações Adicionais
• Peter Shirley. Fundamentals of Computer Graphics, A K Peters, Ltd., Natick, MA, USA, 2002.
• Foley, J. D., Van Dam, A., Feiner, S. K., e Huhes, J. F., Phlips, L. R., Introduction to Computer Graphics, Addison-Wesley, 1995.
• Rogers, D. F., Procedural Elements for Computer Graphics. McGraw-Hill, 1985
• Marcelo Gattass: notas de aula. http://www.tecgraf.puc-rio.br/~mgattass/cg.html
• Refs. online (ray tracing):– http://www.irtc.org/– http://www.acm.org/tog/resources/RTNews/html/– http://www.povray.org/– http://www.siggraph.org/education/materials/HyperGraph/raytrace/rtrace0.htm– http://www.siggraph.org/education/materials/HyperGraph/raytrace/rt_java/raytr
ace.html