Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 1
MGattass
Algoritmo de Rastreamento de Raios
MGattass
Registros da “camera obscura (latim)”
1. Mo-Ti (V século antes de Cristo) – quarto escuro com pequeno orifício2. Aristótes (384-322 AC) – eclipse do sol3. Alhazen de Basra (X DC)4. Leonardo da Vince (XVI DC) ...
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 2
Canaletto (Giovanni Antonio Canal) (1697-1768).
Pintores
Ponto de fuga
MGattass
Evolução da Camera obscura para as Câmaras fotográficas
Luis-Jacques-Mandé Daguerre (1839)Câmara escura - Leonardo da Vinci -1545
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 3
MGattass
A Câmra Pinhole
MGattass
Princípios da câmera Pin-Hole
caixa
filme
objetopinhole
raios de luz
imagem
Câmera
plano de projeção
centro de projeção
Projeção cônica
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 4
MGattass
Síntese de imagens
xo
zo
Objetos
Pixel(RGB)
Luz
Iluminação
yo
Câmara
xe
ye
ze eye
MGattass
Algoritmo básico
Para cada pixel da telaLance uma raio;Para cada objeto da cena
Calcule a interseção do raio com este o objeto;Armazene a interseção mais próxima;
Se o raio interceptou algum objeto Calcule a contribuição das luzes neste ponto;Pinte o pixel com esta cor;
Objetos
Luz
IluminaçãoCâmara
xe
ye
ze
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 5
MGattass
Definição de uma câmera
w pixelslargura b
h pi
xels
altu
ra a
janela
ocentro de projeção janela
eixoóptico
centroóptico
oeye
ahwb =
plano de projeção
centro de projeção
Projeção cônica
MGattass
Abertura de uma câmera
f1f2
fov1
fov2a
=
2tan
2fov
fa
=
2tan2 fovfa
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 6
MGattass
Eixos de uma câmera
eixo óptico
v
u
eyexe
ye
ze
eixo horizontal
eixo vertical
MGattass
Parâmetros de funções do OpenGL
Void glPerspective(GLdouble fovy,GLdouble aspect,GLdouble near_,GLdouble far_);
aspect = w/h
xe
ye
ze
near
far
w
h
ye
ze
fovy
void glViewport(GLint x0, GLint y0,GLsizei width, GLsizei height );
u
v
width
heig
ht
o1 x0
y0
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 7
MGattass
Parâmetros intrínsecos (do OpenGL)parte 2 – Câmera mais geral
void glFrustum( GLdouble left, GLdouble right, GLdouble bottom, GLdouble top,GLdouble near_, GLdouble far_ );
ye
ze
v
near uxe
xe
ze
near
left right
far
MGattass
Parâmetros internos ou intrínsecos
near = plano próximo(distância focal)
fovy = campo de visão
w × h pixels
far = plano distante
nearf =
=
2tan2 fovfa
ahwb =
Primários: Derivados:
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 8
MGattass
Posicionamento da câmera(parâmetros externos ou extrínsecos)
eye = centro ópticocenter = ponto de visada, up = direção para cima
Coordenadas dosObjetos
eyecenter
fovy
vista lateral
upeye
center
up
x0
z0
y0
near
far
MGattass
Calculo do sistema do olho - xe ye ze
center
zeeye
up
z0
y0
x0
view
up
center
eye
z0
y0
x0
dados:eye, center, up
dados:eye, center, up
view = center - eye( )centereye
centereyez −
−=
1e
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 9
MGattass
Calculo do sistema do olho - xe ye ze
center
eye
vup
z0
y0
x0
view
zexe
center
eye
up
z0
y0
x0
view
zexe
ye
( )ee
e zupzup
x ××
=1
eee xzy ×=eye
up ze
xe ye
center
MGattass
Um modelo de câmera
zo
xo eyeo =
eyepd −= xy
yo
xe
ye
ze
u
v
o1
eyepxy
dop ttraio +=)(:
d
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 10
MGattass
Lançamento de Raios
vuop ˆ)(ˆ)(1 yvxuxy ++=
bwxxu =)(
ahyyv =)(
o1
pxy
10 2 x3
h-1
uw-1
v
1
2
y
w pixels em b
h pi
xels
em
a
eexy hya
wxb yxop ˆˆ1 ++=
MGattass
Canto inferior esquerdo da janela no plano near (ou far)
nearf =
ef z−
)2
tan(2 fovyfa =
ea y2
−
ahwb =
eb x2
−
eye
z0
y0
x0
zexe
ye
plano near
canto inferior esquerdo
1o
eeebaf xyzeyeo ˆ2
ˆ2
ˆ1 −−−=
eeeeexy hya
wxbbaf yxxyzeyep ˆˆˆ
2ˆ
2ˆ ++
−−−=
eee wxb
hyaf xyzd ˆ
21ˆ
21ˆ
−+
−+−=
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 11
MGattass
Resultando
zo
xo
eyeo =yo
xe
ye
ze
u
v
o1
eyepxy
dop ttraio +=)(:
d
eee wxb
hyaf xyzd ˆ
21ˆ
21ˆ
−+
−+−=
MGattass
Tipo Abstrato de Dados: Camera em C
struct _Camera {/* Definição da câmera */Vector eye, center, up;float fovy;float nearp,farp;int w,h;/* Parametros derivados */float f;float a,b;Vector xe,ye,ze;
};typedef struct _Camera * Camera;
Camera camCreate( Vector eye, Vector at, Vector up, double fovy, double nearp, double farp, int w, int h );
Ray camGetRay( Camera camera, double x, double y );
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 12
MGattass
Objeto câmera
( )centereyecentereye
z −−
=1
e ( )ee
e zupzup
x ××
=1 ( )eee xzy ×=
Inicialização (pré-processamento):
Lançamento de raios: o + td
eyeo =
nearf =
=
2tan2 fovfa a
hwb =
Dados: fov, w, h, near, far, eye, center, up
eee wxb
hyaf xyzd ˆ
21ˆ
21ˆ
−+
−+−=
MGattass
Modelagem dos Objetos
Implícita: Por fronteira:
r=− cp
p
dados:centro craio r
p1
p2p3
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 13
MGattass
Interseção de um raio com uma esfera
02 =++ ctbta ii
o d
ti
dop ttRaio +=)(:
22)(: rtEsfera i =− cp
22 rti =−+ cdo
( )( ) ( )( ) 2rtt ii =+−⋅+− dcodco
[ ] [ ] ( ) ( )[ ] 0)(2 22 =−−⋅−+−⋅+⋅ rtt ii cococoddd
aacbbt
242 −±−
=
MGattass
Objeto esfera: métodos
Interseção:
( ) ( ) 2rc −−⋅−= coco
dd ⋅=a)(2 cod −⋅=b
042 >−=∆ acbse
abt
abt
2
2
2
1
∆+−=
∆−−=
),min( 21 ttti =
se ti > 0 :
dopp iii tt +== )(
( )cpcp
n −−
= ii
i1ˆ
c
piinNormal:
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 14
MGattass
Interseção com o plano do triângulo
o
d
( ) 01 =⋅−+⋅ npondit p1
n
( )nd
nop⋅
⋅−= 1
it
( ) 0)(: 1 =⋅− npp itPlano
dop ttRaio +=)(:
( ) 01 =⋅−+ npdo it
dopp iii tt +== )(
p2
p3
)( itp
( ) ( )( ) ( )2312
2312ˆppppppppn
−×−−×−
=
MGattass
Ponto interno a triângulo
p1
( ) 0)( 112 >−×⋅ ppvn inti
p2
p3
2312 vvn ×=
v31
v12
v23 ( ) 0)( 112 <−×⋅ pppn exti
extip
inti
p
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 15
MGattass
Coordenadas baricêntricas
p1v12
v23v31
( )( )( ) 2/)(ˆ
2/)(ˆ2/)(ˆ
1123
3312
2231
ppvnppvnppvn
−×⋅=−×⋅=−×⋅=
i
i
i
AAA
pi é interior se L1, L2 e L3∈ [0..1]
A3
A1A2
321 AAAAT ++=
T
T
T
AALAALAAL
///
33
22
11
===n
p2
p3
extip
intip
( )3112ˆ vvn ×= unit
MGattass
Coordenadas baricêntricas comofunções interpolantes
p1
pi
A3
A1A2
1
1
1
L1
L2
L3
1321 =++ LLL
+
+
=
3
3
3
3
2
2
2
2
1
1
1
1
zyx
Lzyx
Lzyx
Lzyx
i
i
ip3
p2
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 16
MGattass
Interpolação de cor e coordenada de texturaatravés das coordenadas baricêntricas
+
+
=
3
3
3
3
2
2
2
2
1
1
1
1
bgr
Lbgr
Lbgr
Lbgr
i
i
i
ou:
+
+
=
3
33
2
22
1
11 v
uL
vu
Lvu
Lvu
i
i
p1
pi
A3
A1A2
p3
p2c1 u1
c2 u2
c3 u3
MGattass
Caixa alinhada com os eixos
x
y
z
(xmin, ymin, zmin)(xmax, ymax, zmax)
o d=(dx, dy, dz)
ti
max
max
min
0
00
zzd
yydxxd
z
y
x
=⇒<
=⇒<=⇒>
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 17
MGattass
Motivação: Uma cena simples
Camera:eye = (100,40,40), center = (0,0,0), up=(0,1,0), near = 30, far=230,
w=230, h=230.Esfera:
c = (0,20,0), r = 25, cor azul = (0,0,1)Caixas alinhadas com os eixos:
p0 = (-80,-50,-50), p1 = (50,-45,50) e cor amarela = (0.7,0.7,0)p0 = (-80,-50,-60), p1 = (50,50,-50) e cor amarela = (0.7,0.7,0)
Luz Pontual:Posição=(60,120,40) e intensidade RGB l=(0.8,0.8,0.8)
MGattass
O que conseguiriamos se simplesmente atribuissemos aos pixels a cor dos objetos?
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 18
MGattass
Área aparente
energialuminosa
energialuminosa
A
θcos' AA =
θ
I (lumens)
I (lumens)
2/ mlumensAIi =
2/cos' mlumensAIi θ=
MGattass
Modelo de reflexão de superfíces Lambertianas
luz incidente luz
incidente luz incidente
1. Reflete igualmente em todas as direções2. A intensidade é proporcional ao co-seno
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 19
MGattass
Componente de reflexão difusa
=
θθθ
coscoscos
dbb
dgg
drr
b
g
r
klklkl
III
- π/2 0 π/2
θcos
α
1
n
L θ
ip
MGattass
Outras maneiras de se escrever:
I, l, k ∈ [0 ,1 ]
Eq. 1( )( )( )
( ) ( )LnLnLnLnLn
ˆˆˆˆˆˆ
ˆˆ
ˆˆ⋅
⊗
=⋅
=
⋅⋅⋅
=
db
dg
dr
b
g
r
dbb
dgg
drr
dbb
dgg
drr
b
g
r
kkk
lll
klklkl
klklkl
III
=
θθθ
coscoscos
dbb
dgg
drr
b
g
r
klklkl
III
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 20
MGattass
Luz difusa mais ambiente:
( )Ln ˆˆ ⋅
⊗
=
db
dg
dr
b
g
r
b
g
r
kkk
lll
III
( )Ln ˆˆ ⋅
⊗
+
⊗
=
db
dg
dr
b
g
r
db
dg
dr
ab
ag
ar
b
g
r
kkk
lll
kkk
III
III
MGattass
Componente de reflexão especular
I, l, k ∈ [0 ,1 ]
Eq.2
n
L
rv Brilho
-1 -0,5 0 0,5 1
n=4n=1
n=8
( )nvr ˆˆ ⋅
α
α
( )( )( )
=
nsbb
nsgg
nsrr
especularb
g
r
klklkl
III
ααα
coscoscos
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 21
MGattass
Reflexão especular
( ) ( )n
sb
sg
sr
b
g
r
db
dg
dr
b
g
r
db
dg
dr
ab
ag
ar
b
g
r
kkk
lll
kkk
lll
kkk
III
III
vrLn ˆˆˆˆ ⋅
⊗
+⋅
⊗
+
⊗
=
MGattass
Reflexão especular
n
L
r v
ip
α
luzrefletida
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 22
MGattass
Cálculo da reflexão de um vetor sobre outros
( ) LnnLr ˆˆˆˆ2ˆ −⋅=
LLh −= n
h hLn
nnLL ˆ)ˆˆ( ⋅=n
hLr += nˆ
n
L r
MGattass
Distribuição da luz direta sobre um ponto
( ) ( )nsluzdifluzamb kCkCCC vrLn ˆˆˆˆ ⋅+⋅+= λλλ λλλ
nL
rv
ip
Ambient Diffuse Specular
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 23
MGattass
Modelo de várias luzes
( ) ( )∑
⋅
⊗
+⋅
⊗
+
⊗
=
luzes
n
sb
sg
sr
b
g
r
db
dg
dr
b
g
r
db
dg
dr
ab
ag
ar
b
g
r
kkk
lll
kkk
lll
kkk
III
III
vrLn ˆˆˆˆ
vnnvr ˆˆ)ˆˆ(2ˆ −⋅=r
( ) ( )∑
⋅
⊗
+⋅
⊗
+
⊗
=
luzes
n
r
sb
sg
sr
b
g
r
db
dg
dr
b
g
r
db
dg
dr
ab
ag
ar
b
g
r
kkk
lll
kkk
lll
kkk
III
III
LrLn ˆˆˆˆ
uma reflexão apenas
LnnLr ˆˆ)ˆˆ(2ˆ −⋅= para cada fonte de luz
MGattass
Sombra
A luz não chega a superfíce
ip
sr
si ttsombradeRaio rpp ˆ)(: +=
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 24
MGattass
Modelo de várias luzes e sombra
=contráriocasosombrase
fs 10
( ) ( )∑
⋅
⊗
+⋅
⊗
+
⊗
=
luzes
n
r
sb
sg
sr
b
g
r
db
dg
dr
b
g
r
s
db
dg
dr
ab
ag
ar
b
g
r
kkk
lll
kkk
lll
fkkk
III
III
LrLn ˆˆˆˆ
MGattass
Fontes de luz especiais: Onidirecional
Fonte: Mauricio Hofmam
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 25
MGattass
Fontes de luz especiais: Direcional
Fonte: Mauricio Hofmam
MGattass
Fontes de luz especiais: Farolete
Fonte: Mauricio Hofmam
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 26
MGattass
Uma revisão
MGattass
Reflexão de outros objetos
Superfície especular
nvθ
θ
iprr
ri ttrefletidoRaio rpp ˆ)(: +=
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 27
MGattass
Transparência
Objeto transparenteθ1
θ2
η1
η2
nv
ip
tr
ti ttrefratadoRaio rpp ˆ)(: +=
1
2
2
1
sinsin
θθ
ηη
=
lei de Snell
MGattass
n−
t
tt
vv
t 1ˆ =
Cálculo do Raio Refratado
θi
n vnnvv ˆˆ)ˆˆ( −⋅=t
v
ip
tr
nvtv
ti v=θsin
it
it θ
ηηθ sinsin =
tt θθ 2sin1cos −=
)ˆ(cosˆsin ntr −+= ttt θθ
ti ttrefratadoRaio rpp ˆ)(: +=
θt
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 28
MGattass
Iluminação considerando superfícies refletoras e objetos transparentes
redução datransparência
redução da reflexão
( ) ( )
−+
+
⋅
⊗
+⋅
⊗
+
⊗
=
∑)()()(
)1()()()(
ˆˆˆˆ
tb
tg
tr
rb
rg
rr
luzes
n
r
sb
sg
sr
b
g
r
db
dg
dr
b
g
r
s
db
dg
dr
ab
ag
ar
b
g
r
III
oIII
kkkk
lll
kkk
lll
fkkk
III
III
rrr
rrr
LrLn
MGattass
Natureza recursiva do algoritmo de Rastreamento de Raios
R1
T1
R2
T2
R3
L1L3
L2
R1
R2
L1
L3L2
T1
T2R3
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 29
MGattass
Resultado de curso
Alunos de CGI98
MGattass
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 ( 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 ( ray, 1);}
}
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 30
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.1) + componente especular (Eq.2)
} }
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.1) + componente especular (Eq.2)
} }
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;}
MGattass
Texturas
u
v
1.0
1.0
0 u1.0
1.0
0
v
u1.0
1.0
0
v
Texturas 2D = Imagens onde o domínio é u, v ∈[0,1]×[0,1] ⊂ R2
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 31
MGattass
Sistemas de coordenada de textura na caixa
uv
u
v
x
y
z
uv
(1,1)(0,0)
(0,0)
(0,0)face x=xmax
minmax
min
yyyyu−
−=
minmax
min
zzzzv−
−=
MGattass
Sistema de coordenada de textura na esfera
x
y
z
θ
φ
φθρφθρ
θρ
sinsincossin
cos
===
yxz
zyx
xy22
tan
/tan
+=
=
θ
φ
πθπ
φ
−=
+=
1
1
v
u
)1()1(
−=−=
wujhvi
i
j
ρ
x
y
z
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 32
MGattass
Sistema de coordenada de textura no triângulo
u
v
(u1,v1)
(u2,v2)
(u3,v3)
u1= u3 u2
v1= v2
v3
12
3
MGattass
Textura no triângulo e coordenadas baricêntricas
p1v12
v23v31
( )( )( ) 2/)(ˆ
2/)(ˆ2/)(ˆ
1123
3312
2231
ppvnppvnppvn
−×⋅=−×⋅=−×⋅=
i
i
i
AAA
A3
A1A2
321 AAAAT ++=
T
T
T
AALAALAAL
///
33
22
11
===
n
p2
p3
intip
+
+
=
3
33
2
22
1
11 v
uL
vu
Lvu
Lvu
i
i
)(1 213 LLL +−=
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 33
MGattass
Textura
MGattass
Texturas de rugosidade (bump textures) eTexturas de deslocamentos (displacement mapping)
Pertubar aleatóriamenteas normais dos objetos
n
),(ˆ'ˆ θφδ+= nn
Pertubar aleatóriamenteas posições dos pontos
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 34
MGattass
Textura ambiente (environment maps)
x yz
u
v
(0,0)
(1,1)face dos raios x>y e x>z
xxyu
2+
=
xxzv
2+
=
y=-x
y=x
z=-x
z=x
MGattass
Tratamento anti-alias
•Lance um raio para cada sub-pixel•Faça uma média dos valores obtidos
dx, dy = variáveis randômicas
dxdya sub-pixels
pixel
Computação Gráfica Interativa - Gattass 8/7/2005
Ray Tracing 35
MGattass
Anti-alias
(a) original (b) uniforme (c) “jittered”
pixel pixel pixel
MGattass
Refinamento Progresivo
subdivisão finalsegunda subdivisão
primeira subdivisãoamostragem inicial
pixels sendo visitados pixels já visitados