Algoritmo de Rastreamento de...

37
Computação Gráfica Interativa - Gattass 8/7/200 Ray Tracing 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ício 2. Aristótes (384-322 AC) – eclipse do sol 3. Alhazen de Basra (X DC) 4. Leonardo da Vince (XVI DC) ...

Transcript of Algoritmo de Rastreamento de...

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ˆ ++

−−−=

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

Computação Gráfica Interativa - Gattass 8/7/2005

Ray Tracing 36

Computação Gráfica Interativa - Gattass 8/7/2005

Ray Tracing 37

MGattass

Radiosidade e Ray Tracing

Klaus Mueller, Stony Brook University, Computer Science (CSE 564)

global illuminationstandard raytracing