traçado de raios e modelos de iluminação por marcelo gattass departamento de informática
DESCRIPTION
Traçado de Raios e Modelos de Iluminação por Marcelo Gattass Departamento de Informática. PUC-Rio. Pinturas: produção de imagens. Avercamp, Hendrick (1585-1634). Canaletto (Giovanni Antonio Canal) (1697-1768). Pin-Hole Camera. Câmara escura - Leonardo da Vinci -1545 - PowerPoint PPT PresentationTRANSCRIPT
Traçado de Raios e
Modelos de Iluminação
por
Marcelo Gattass
Departamento de Informática
PUC-Rio
Pinturas: produção de imagens
Avercamp, Hendrick (1585-1634).
Canaletto (Giovanni Antonio Canal) (1697-1768).
Pin-Hole Camera
Câmara escura - Leonardo da Vinci -1545Luis-Jacques-Mandé Daguerre (1789-1851)
Modelo de câmera
x
y
z
Iluminação
Objetos
Câmara
Traçado de raios: raios e objetos implícitos
x
y
z
x = x0 + t (x1 - x0 )y = y0 + t (y1 - y0 )z = z0 + t (z1 - z0 )
(x-xc )2 + (y-yc )2 + (z-zc )2 = R2
-b ± b2 - 4ac2a
t =
Interseção com a esfera
0
0)(2
)(:
)(:
2
22
2
22
22
ctbta
rCOCOtCODtDD
rDtCODtCO
rCDtO
rCtPEsfera
tDOtPRaio
ii
ii
ii
i
i
OD
ti
P0
P1
x = x0 + t (x1 - x0 )y = y0 + t (y1 - y0 )z = z0 + t (z1 - z0 )
z
xy
Ax + By + Cz + D = 0
0 1
3
A0
A3
A1
L0 = A0 / AT
L1 = A1 / AT
L2 = A2 / AT
Li [0 ,1 ]
P é interior se e somente se
Raios e objetos descritos pela fronteira
Interseção com o plano do triângulo
OD
P(ti)
0
0
0
1
1
1
NVONDt
NVDtO
NVPP
i
i
V1
N
ND
NOVti
1
DtOP i
Ponto no interior de um triângulo
V1
V2
V3
Pi
Pe
a12
a23
a31
)(
)(
)(
3313
2232
1121
VPat
VPat
VPat
N P é interior se t1, t2 e t3 tem o mesmo sentido,ou seja:
0
0
31
21
tt
tt 0
0
31
21
tt
ttou
Coordenadas baricêntricas
V1
V2
V3
Pi
Pe
a12
a23
a31
2/)(
2/)(
2/)(
3123
2312
1231
VPaA
VPaA
VPaA
NP é interior se L1, L2 e L3 [0..1]
A3
A1A2
321 AAAAT
T
T
T
AAL
AAL
AAL
/
/
/
33
22
11
3
3
3
3
2
2
2
2
1
1
1
1
z
y
x
L
z
y
x
L
z
y
x
L
z
y
x
i
i
i
Mais ainda:
Coordenadas baricêntricas como interpolantes
V1
V2
V3
Pi
A3
A1A2
1
1
1
L1
L2
L3
1321 LLL
3
3
3
3
2
2
2
2
1
1
1
1
z
y
x
L
z
y
x
L
z
y
x
L
z
y
x
i
i
i
Interpolação com coordenadas baricêntricas
V1
V2
V3
Pi
A3
A1A2
3
3
3
3
2
2
2
2
1
1
1
1
b
g
r
L
b
g
r
L
b
g
r
L
b
g
r
i
i
i
ou:
C1
C2
C3
U1
U2
U3
3
33
2
22
1
11 v
uL
v
uL
v
uL
v
u
i
i
Exemplo: uma esfera e duas paredes
z
xy
#SURFACE20. 20. 100. 160. 160. 60.#LIGHT40. 120. 0. 255 255 255#SPHERE0 25.0 0.0 20.0 0.0#BOX1 -80. -50. -50. 50. -45. 50.1 -80. -50. -60. 50. 50. -50.
Componente de reflexão difusa
NL
N
N
L
L
LN
kl
kl
kl
LN
k
k
k
l
l
l
I
I
I
dbb
dgg
drr
db
dg
dr
b
g
r
b
g
r
I, l, k [0 ,1 ]
Componente de reflexão especular
NR
V
L
Brilho
n
sbb
sgg
srrn
sb
sg
sr
b
g
r
b
g
r
VR
kl
kl
kl
VR
k
k
k
l
l
l
I
I
I
-1 -0,5 0 0,5 1
n=4n=1
n=8
I, l, k [0 ,1 ]
Cálculo do vetor R
N
L R1
L’
L’ = L / (L*N)
H
H = N - L’
HR’
R’ = N + H
LNL
NR
)(
12
R = unitário (R’)
Luz direta sobre um ponto
N
R
V
nsdifluzamb VRkLNkCCC )(
Modelo de várias luzes
luzes
n
sb
sg
sr
b
g
r
db
dg
dr
b
g
r
ab
ag
ar
b
g
r
VR
k
k
k
l
l
l
LN
k
k
k
l
l
l
I
I
I
I
I
I
ab
ag
ar
I
I
I
Luz Ambiente
Sombra
A luz não chega a superfíce
Uma revisão
Reflexão de outros objetos
N V
Superfície especular
Transparência
NV
Superfície transparente
=sin
sin
Lei de Snell:
Iluminação considerando R e T
)(
)(
)(
)1(
)(
)(
)(
TI
TI
TI
o
RI
RI
RI
cVR
k
k
k
l
l
l
LN
k
k
k
l
l
l
I
I
I
I
I
I
b
g
r
b
g
r
rluzes
n
sb
sg
sr
b
g
r
db
dg
dr
b
g
r
ab
ag
ar
b
g
r
transparênciaredução da reflexão
Traçado de Raios Recursivo
R1
T1
R2
T2
R3
L1
L3
L2
R1
R2
L1
L3L2
T1
T2R3
Resultado de curso
Alunos de CGI98
Algoritmo de traçado de raios
rtColor trace ( rtRay ray, int depth){ determine a interseção mais próxima com um objeto if (intercepta objeto) { calcule a normal no ponto de interseção return ( shade ( object, ray, intersection, normal, depth); } return BACKGOUND;}
rtColor trace ( rtRay ray, int depth){ determine a interseção mais próxima com um objeto if (intercepta objeto) { calcule a normal no ponto de interseção return ( shade ( object, ray, intersection, normal, depth); } return BACKGOUND;}
selecione o centro de projeção 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 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); }}
rtColor shade ( rtObject object, rtRay ray, int depth, rtPoint point, rtNormal normal, int depth){ rtColor color, rColor, sColor; rtRay rRay, tRay, sRay; color = termo ambiente;for (cada luz) { sRay = raio para o ponto de luz; if (sRay • normal>0) { calcule quanto de luz é bloqueada por superfícies opacas e transparentes e use para computar as componentes difusa e especular } }
if (depth >= maxDepth) return color;
if (objeto é refletor) { rRay = raio na direção de refleção; rColor = trace( rRay, depth+1); reduza rColor pelo coeficente de refleção especular e some a color; }
if (objeto é transparente) { tRay = raio na direção de refração; if (reflexão total não ocorre} { tColor = trace( tRay, depth+1); reduza tColor pelo coeficente de refração especular e some a color; } }
return color;}
rtColor shade ( rtObject object, rtRay ray, int depth, rtPoint point, rtNormal normal, int depth){ rtColor color, rColor, sColor; rtRay rRay, tRay, sRay; color = termo ambiente;for (cada luz) { sRay = raio para o ponto de luz; if (sRay • normal>0) { calcule quanto de luz é bloqueada por superfícies opacas e transparentes e use para computar as componentes difusa e especular } }
if (depth >= maxDepth) return color;
if (objeto é refletor) { rRay = raio na direção de refleção; rColor = trace( rRay, depth+1); reduza rColor pelo coeficente de refleção especular e some a color; }
if (objeto é transparente) { tRay = raio na direção de refração; if (reflexão total não ocorre} { tColor = trace( tRay, depth+1); reduza tColor pelo coeficente de refração especular e some a color; } }
return color;}
Tratamento anti-alias
Pixel
•Lance um raio para cada sub-pixel•Faça uma média dos valores obtidos
Sub-Pixels
...
dxdy
dx, dy = variáveis randômicas
Normal e cor
Pertubar aleatóriamenteas normais dos objetos
N
N’
A cor de um ponto depende de sua posição
num mapa de textura
Textura na esfera
x
y
z
sinsin
cossin
cos
y
x
z
z
yx
xy
22
tan
/tan
1
1
v
u
)1(
)1(
wuj
hvi
i
j
Refinamento Progresivo
subdivisão finalsegunda subdivisão
primeira subdivisãoamostragem inicial
pixels sendo visitados pixels já visitados
Modelo da câmera
Dados: eye, ref, vup (definem o sistema de coordenadas do olho)abertura do campo fixa de 900
eye
ref
vup
Coordenadas dosObjetos eye
ref
45o45o
Vista de cima
Calcula o sistema - xe ye ze
ref
ze
eye
vup
z0
y0
x0
view
ze = – view / ||view||ze = – view / ||view||
vup
ref
eye
z0
y0
x0
view
dados:eye, ref, vupabertura da câmera
dados:eye, ref, vupabertura da câmera
view =ref-eyeview =ref-eye
Calcula o sistema - xe ye ze
xe = (vup x ze) / ||vup x ze||xe = (vup x ze) / ||vup x ze||
ref
eye
vup
z0
y0
x0
view
zexe
ye = ze x xeye = ze x xe
ref
eye
vup
z0
y0
x0
view
zexe
ye
eye
vup ze
xe
ye
view
Canto inferior da janela no plano de projeção
eye
z0
y0
x0
A
zexe
ye
B
C
Pll = eye + A + B + C
Pll = eye - ze - ye - xe
Pll
Se o ângulo de abertura for 900
, d=1 e w = h:A = - xe
B = - ye
C = - xe
Lançamento de Raios
Pll dx = 2 xe / w
dy = 2 ye / h
Pll dx = 2 xe / w
dy = 2 ye / h P0 P
P0 = Pu + dx/2 + dy/2;for (i=0; i<=w; i++) { P = P0 ; for (j=0; j<=h; j++) { P = P + dx; trace o raio (eye, P); } P0 = P0 + dy;}
Modelo de Lente e Obturador
tela (pixels) lente e obturador cena
Focalização
imagem lente focalização
Luz de vários objetos chegam no mesmo ponto confusão
di df
d df
Obtenção dos raios
plano daimagem lente plano de
focalização
P
A
Radiosidade e Ray Tracing