mgattass algoritmo de rastreamento de raios. mgattass registros da camera obscura (latim) 1.mo-ti (v...

Post on 17-Apr-2015

104 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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) ...

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

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

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

MGattass

Definição de uma câmera

w pixels largura b

h pi

xels

a

ltur

a a

janela

ocentro de projeção janela

eixoóptico

centro óptico

oeye

ah

wb

plano de projeção

centro de projeção

Projeção cônica

MGattass

Abertura de uma câmera

f1f2

fov1

fov2a

2tan

2

fov

f

a

2tan2

fovfa

MGattass

Eixos de uma câmera

eixo óptico

v

u

eye

xe

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

hto1 x0

y0

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

ah

wb

Primários: Derivados:

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

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

xeye

center

MGattass

Um modelo de câmera

zo

xoeyeo

eyepd xy

yo

xe

ye

ze

u

v

o1

eyep

xy

dop ttraio )(:

d

MGattass

Lançamento de Raios

vuop ˆ)(ˆ)(1 yvxuxy

bw

xxu )(

ah

yyv )(

o1

pxy

10 2 x3

h-1

uw-1

v

1

2

y

w pixels em b

h pi

xels

em

a

eexy h

ya

w

xb yxop ˆˆ1

MGattass

Canto inferior esquerdo da janela no plano near (ou far)

nearf

ef z

)2

tan(2fovy

fa

e

ay

2

ah

wb

e

bx

2

eye

z0

y0

x0

zexe

ye

plano near

canto inferior esquerdo

1o

eee

baf xyzeyeo ˆ

2ˆ1

eeeeexy h

ya

w

xbbaf yxxyzeyep ˆˆˆ

eee w

xb

h

yaf xyzd ˆ

2

2

MGattass

Resultando

zo

xo

eyeo yo

xe

ye

ze

u

v

o1

eyep

xy

dop ttraio )(:

d

eee w

xb

h

yaf xyzd ˆ

2

2

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 );

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

h

wb

Dados: fov, w, h, near, far, eye, center, up

eee w

xb

h

yaf xyzd ˆ

2

2

MGattass

Modelagem dos Objetos

Implícita: Por fronteira:

r cp

p

dados:

centro c raio r

p1

p2p3

MGattass

Interseção de um raio com uma esfera

02 ctbta ii

o d

ti

dop ttRaio )(:

22)(: rtEsfera i cp

22rti cdo

2rtt ii dcodco

0)(2 22 rtt ii cococoddd

a

acbbt

2

42

MGattass

Objeto esfera: métodos

Interseção:

2rc coco

dda

)(2 cod b

042 acbse

a

bt

a

bt

2

2

2

1

),min( 21 ttti

se ti > 0 :

dopp iii tt )(

cpcp

n

ii

i

c

piin

Normal:

MGattass

Interseção com o plano do triângulo

o

d

01 npondit p1

n

nd

nop

1it

0)(: 1 npp itPlano

dop ttRaio )(:

01 npdo it

dopp iii tt )(

p2

p3

)( itp

2312

2312ˆpppp

ppppn

MGattass

Ponto interno a triângulo

p1

0)( 112 ppvn int

i

p2

p3

2312 vvn

v31

v12

v23 0)( 112 pppn exti

extip

int

ip

MGattass

Coordenadas baricêntricas

p1

v12

v23

v31

2/)(ˆ

2/)(ˆ

2/)(ˆ

1123

3312

2231

ppvn

ppvn

ppvn

i

i

i

A

A

A

pi é interior se L1, L2 e L3 [0..1]

A3

A1A2

321 AAAAT

T

T

T

AAL

AAL

AAL

/

/

/

33

22

11

n

p2

p3

extip

intip

3112ˆ vvn unit

MGattass

Coordenadas baricêntricas como funçõ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

z

y

x

L

z

y

x

L

z

y

x

L

z

y

x

i

i

ip3

p2

MGattass

Interpolação de cor e coordenada de textura através das coordenadas baricêntricas

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:

3

33

2

22

1

11 v

uL

v

uL

v

uL

v

u

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

0

0

zzd

yyd

xxd

z

y

x

MGattass

Motivação: Uma cena simples

Camera:eye = (100,40,40), center = (0,0,0), up=(0,1,0), fov=90º, 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?

MGattass

Área aparente

energialuminosa

energialuminosa

A

cos' A

A

I (lumens)

I (lumens)

2/ mlumensA

Ii

2/cos' mlumensA

Ii

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

MGattass

Componente de reflexão difusa

cos

cos

cos

dbb

dgg

drr

b

g

r

kl

kl

kl

I

I

I

- /2 0 /2

cos

1

n

L

ip

MGattass

Outras maneiras de se escrever:

I, l, k [0 ,1 ]

Eq. 1

LnLn

Ln

Ln

Lnˆˆˆˆ

ˆˆ

ˆˆ

ˆˆ

db

dg

dr

b

g

r

dbb

dgg

drr

dbb

dgg

drr

b

g

r

k

k

k

l

l

l

kl

kl

kl

kl

kl

kl

I

I

I

cos

cos

cos

dbb

dgg

drr

b

g

r

kl

kl

kl

I

I

I

MGattass

Luz difusa mais ambiente:

Ln ˆˆ

db

dg

dr

b

g

r

b

g

r

k

k

k

l

l

l

I

I

I

Ln ˆˆ

db

dg

dr

b

g

r

db

dg

dr

ab

ag

ar

b

g

r

k

k

k

l

l

l

k

k

k

I

I

I

I

I

I

MGattass

Componente de reflexão especular

I, l, k [0 ,1 ]

Eq.2

n

L

r

v Brilho

-1 -0,5 0 0,5 1

n=4n=1

n=8

nvr ˆˆ

nsbb

nsgg

nsrr

especularb

g

r

kl

kl

kl

I

I

I

cos

cos

cos

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

k

k

k

l

l

l

k

k

k

l

l

l

k

k

k

I

I

I

I

I

I

vrLn ˆˆˆˆ

MGattass

Reflexão especular

n

L

r v

ip

luzrefletida

MGattass

Cálculo da reflexão de um vetor sobre outros

LnnLr ˆˆˆˆ2ˆ

LLh n

h h

Ln

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

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

k

k

k

l

l

l

k

k

k

l

l

l

k

k

k

I

I

I

I

I

I

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

k

k

k

l

l

l

k

k

k

l

l

l

k

k

k

I

I

I

I

I

I

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 ˆ)(:

MGattass

Modelo de várias luzes e sombra

contráriocaso

sombrasef s 1

0

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

k

k

k

l

l

l

k

k

k

l

l

l

f

k

k

k

I

I

I

I

I

I

LrLn ˆˆˆˆ

MGattass

Fontes de luz especiais: Onidirecional

Fonte: Mauricio Hofmam

MGattass

Fontes de luz especiais: Direcional

Fonte: Mauricio Hofmam

MGattass

Fontes de luz especiais: Farolete

Fonte: Mauricio Hofmam

MGattass

Uma revisão

MGattass

Reflexão de outros objetos

Superfície especular

n

v

iprr

ri ttrefletidoRaio rpp ˆ)(:

MGattass

Transparência

Objeto transparente

nv

ip

tr

ti ttrefratadoRaio rpp ˆ)(:

1

2

2

1

sin

sin

lei de Snell

MGattass

n

t

tt

vv

t1ˆ

Cálculo do Raio Refratado

i

n vnnvv ˆˆ)ˆˆ( t

v

ip

tr

nvtv

ti vsin

it

it

sinsin

tt 2sin1cos

)ˆ(cosˆsin ntr ttt

ti ttrefratadoRaio rpp ˆ)(:

t

MGattass

Advertência: Refração não é simples!

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

I

I

I

o

I

I

I

k

k

k

k

l

l

l

k

k

k

l

l

l

f

k

k

k

I

I

I

I

I

I

r

r

r

r

r

r

LrLn

MGattass

Natureza recursiva do algoritmo de Rastreamento de Raios

R1

T1

R2

T2

R3

L1

L3

L2

R1

R2

L1

L3L2

T1

T2R3

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 objeto if (intercepta objeto) { calcule a normal no ponto de interseção return ( 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 objeto if (intercepta objeto) { calcule a normal no ponto de interseção return ( 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); }}

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

MGattass

Sistemas de coordenada de textura na caixa

u

v

u

v

x

y

z

uv

(1,1)(0,0)

(0,0)

(0,0)face x=xmax

minmax

min

yy

yyu

minmax

min

zz

zzv

MGattass

Sistema de coordenada de 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

x

MGattass

Sistema de coordenada de textura no triângulo

u

v

(u1,v1)

(u2,v2)

(u3,v3)

u1= u3 u2

v1= v2

v3

1

2

3

MGattass

Textura no triângulo e coordenadas baricêntricas

p1

v12

v23

v31

2/)(ˆ

2/)(ˆ

2/)(ˆ

1123

3312

2231

ppvn

ppvn

ppvn

i

i

i

A

A

A

A3

A1A2

321 AAAAT

T

T

T

AAL

AAL

AAL

/

/

/

33

22

11

n

p2

p3

intip

3

33

2

22

1

11 v

uL

v

uL

v

uL

v

u

i

i

)(1 213 LLL

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

MGattass

Textura ambiente (environment maps)

x y

z

u

v

(0,0)

(1,1)face dos raios x>y e x>z

x

xyu

2

x

xzv

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

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

MGattass

Radiosidade e Ray Tracing

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

global illuminationstandard raytracing

top related