Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouSophia Parras Alterado mais de 10 anos atrás
1
MGattass Algoritmo de Rastreamento de Raios
2
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)...
3
MGattass A Câmera Pinhole
4
MGattass Princípios da câmera Pin-Hole caixa filme objeto pinhole raios de luz imagem Câmera plano de projeção centro de projeção Projeção cônica
5
MGattass Síntese de imagens xoxo zozo Objetos Pixel (RGB) Luz Iluminação yoyo Câmara xexe yeye zeze eye
6
MGattass Algoritmo básico Para cada pixel da tela Lance 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ção Câmara xexe yeye zeze
7
Definição de uma câmera A largura do plano de projeção b e a altura a são proporcionais à razão w/h MGattass w pixels largura b h pixels altura a janela o centro de projeção janela eixo óptico centro óptico o eye plano de projeção centro de projeção Projeção cônica
8
MGattass Abertura de uma câmera f1f1 f2f2 fov 1 fov 2 a A largura do plano de projeção aumenta de acordo com a sua distância
9
MGattass Eixos de uma câmera eixo óptico v u eye xexe yeye zeze eixo horizontal eixo vertical Esta câmera usa os mesmos eixos do OpenGL
10
MGattass Parâmetros de funções do OpenGL Void glPerspective(GLdouble fovy,GLdouble aspect,GLdouble near_,GLdouble far_); aspect = w/h xexe yeye zeze near far w h yeye zeze fovy void glViewport(GLint x0, GLint y0, GLsizei width, GLsizei height ); u v width height o1o1 x0x0 y0y0
11
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_ ); yeye zeze v near u xexe xexe zeze leftright far
12
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 Primários:Derivados:
13
MGattass Posicionamento da câmera (parâmetros externos ou extrínsecos) eye = centro óptico center = ponto de visada, up = direção para cima Coordenadas dos Objetos eye center fovy vista lateral up eye center up x0x0 z0z0 y0y0 near far
14
MGattass Calculo do sistema do olho - x e y e z e center zeze eye up z0z0 y0y0 x0x0 view up center eye z0z0 y0y0 x0x0 dados: eye, center, up dados: eye, center, up view = center - eye
15
MGattass Calculo do sistema do olho - x e y e z e center eye vup z0z0 y0y0 x0x0 view zeze xexe center eye up z0z0 y0y0 x0x0 view zeze xexe yeye eye up zeze xexe yeye center
16
MGattass Um modelo de câmera (para traçado de raios) zozo xoxo yoyo xexe yeye zeze u v o1o1 eye p xy d Direção do raio Eq. do raio
17
MGattass Lançamento de Raios o1o1 p xy 1 0 2 x 3 h-1 u w-1 v 1 2 y w pixels em b h pixels em a Ponto no plano de projeção Vetores unitários que definem o plano
18
MGattass Canto inferior esquerdo da janela no plano near (ou far) eye z0z0 y0y0 x0x0 zeze xexe yeye plano near canto inferior esquerdo
19
MGattass Resultando zozo xoxo yoyo xexe yeye zeze u v o1o1 eye p xy d Ponto no plano de projeção
20
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 );
21
MGattass Objeto câmera Inicialização (pré-processamento): Lançamento de raios: o + td Dados: fov, w, h, near, far, eye, center, up
22
MGattass Modelagem dos Objetos Implícita: Por fronteira: p dados: centro c raio r p1p1 p2p2 p3p3
23
MGattass Interseção de um raio com uma esfera o d titi
24
MGattass Objeto esfera: métodos Interseção: se t i > 0 : c pipi Normal: Resolver eq. de segundo grau com esses coeficientes
25
MGattass Interseção com o plano do triângulo o d p1p1 n p2p2 p3p3 Distância do olho ao plano Projeção de d na direção da normal do plano
26
MGattass Ponto interno a triângulo p1p1 p2p2 p3p3 v 31 v 12 v 23
27
MGattass Coordenadas baricêntricas p1p1 v 12 v 23 v 31 p i é interior se L 1, L 2 e L 3 [0..1] A3A3 A1A1 A2A2 p2p2 p3p3 Áreas dos triângulos
28
Coordenadas baricêntricas como funções interpolantes A coordenada do ponto p i pode ser encontrada através da foruma acima MGattass p1p1 pipi A3A3 A1A1 A2A2 1 1 1 L1L1 L2L2 L3L3 p3p3 p2p2
29
Interpolação de cor e coordenada de textura através das coordenadas baricêntricas ou: p1p1 pipi A3A3 A1A1 A2A2 p3p3 p2p2 c1c1 u1u1 c2c2 u2u2 c3c3 u3u3 Assim como ocorre com coordenadas, também é possível descobrir coordenadas de textura ou cores interpoladas dentro do triângulo
30
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: p 0 = (-80,-50,-50), p 1 = (50,-45,50) e cor amarela = (0.7,0.7,0) p 0 = (-80,-50,-60), p 1 = (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)
31
MGattass O que conseguiriamos se simplesmente atribuissemos aos pixels a cor dos objetos?
32
MGattass Área aparente energia luminosa energia luminosa I (lumens)
33
MGattass Modelo de reflexão de superfíces Lambertianas luz incidente 1.Reflete igualmente em todas as direções 2.A intensidade é proporcional ao co-seno
34
MGattass Componente de reflexão difusa - /2 0 /2 1
35
MGattass Outras maneiras de se escrever: I, l, k [0,1 ] Eq. 1
36
MGattass Luz difusa mais ambiente:
37
MGattass Componente de reflexão especular I, l, k [0,1 ] Eq.2 Brilho -0,500,51 n=4 n=1 n=8
38
MGattass Reflexão especular
39
MGattass Reflexão especular luz refletida
40
MGattass Cálculo da reflexão de um vetor sobre outros hh LnLn
41
MGattass Distribuição da luz direta sobre um ponto AmbientDiffuse Specular
42
MGattass Modelo de várias luzes uma reflexão apenas para cada fonte de luz
43
MGattass Sombra A luz não chega a superfíce
44
MGattass Modelo de várias luzes e sombra
45
MGattass Fontes de luz especiais: Onidirecional Fonte: Mauricio Hofmam
46
MGattass Fontes de luz especiais: Direcional Fonte: Mauricio Hofmam
47
MGattass Fontes de luz especiais: Farolete Fonte: Mauricio Hofmam
48
MGattass Uma revisão
49
MGattass Reflexão de outros objetos Superfície especular
50
MGattass Transparência Objeto transparente lei de Snell
51
MGattass Cálculo do Raio Refratado i t
52
MGattass Advertência: Refração não é simples!
53
MGattass Iluminação considerando superfícies refletoras e objetos transparentes redução da transparência redução da reflexão
54
MGattass Natureza recursiva do algoritmo de Rastreamento de Raios R1R1 T1T1 R2R2 T2T2 R3R3 L1L1 L3L3 L2L2 R1R1 R2R2 L1L1 L3L3 L2L2 T1T1 T2T2 R3R3
55
MGattass Resultado de curso Alunos de CGI98
56
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ção for (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ção for (cada pixel da tela) { determine o raio ray que vai do centro de projeção ao pixel; pixel = trace ( ray, 1); }
57
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; }
58
MGattass Texturas u v 1.0 0 u 0 v u 0 v Texturas 2D = Imagens onde o domínio é u, v [0,1]×[0,1] R 2
59
MGattass Sistemas de coordenada de textura na caixa u v u v x y z u v (1,1) (0,0) face x=x max
60
MGattass Sistema de coordenada de textura na esfera x y z i j x
61
MGattass Sistema de coordenada de textura no triângulo u v (u 1,v 1 ) (u 2,v 2 ) (u 3,v 3 ) u1= u3u1= u3 u2u2 v1= v2v1= v2 v3v3 1 2 3
62
MGattass Textura no triângulo e coordenadas baricêntricas p1p1 v 12 v 23 v 31 A3A3 A1A1 A2A2 p2p2 p3p3
63
MGattass Textura
64
MGattass Texturas de rugosidade (bump textures) e Texturas de deslocamentos (displacement mapping) Pertubar aleatóriamente as normais dos objetos Pertubar aleatóriamente as posições dos pontos
65
MGattass Textura ambiente (environment maps) x y z u v (0,0) (1,1) face dos raios x>y e x>z y=-x y=x z=-x z=x
66
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 dx dy a sub-pixels pixel
67
MGattass Anti-alias (a) original (b) uniforme(c) jittered pixel
68
MGattass Refinamento Progresivo subdivisão final segunda subdivisão primeira subdivisão amostragem inicial pixels sendo visitados pixels já visitados
72
MGattass Radiosidade e Ray Tracing Klaus Mueller, Stony Brook University, Computer Science (CSE 564) global illumination standard raytracing
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.