A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing.

Apresentações semelhantes


Apresentação em tema: "Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing."— Transcrição da apresentação:

1 Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing

2 Raster A técnica de rasterization tem como ciclo principal as primitivas geométricas do mundo DI-UM Computação Gráfica 08/09 2 ??? ? ?? ? ??. Para cada primitiva.. Iluminar os seus vértices.. Projectar no viewport.. Rasterization

3 Raster Pontos fracos –Todos os vértices são iluminados, mesmo que não sejam visíveis na imagem –A iluminação de cada vértice é independente de todos os outros objectos do mundo: Iluminação Local Pontos fortes –Disponibilidade de coprocessadores especializados (Graphics Processing Unit), exímios a realizar projecções e rasterização DI-UM Computação Gráfica 08/09 3

4 Ray tracing O ray tracing tem como ciclo principal os pixeis da imagem DI-UM Computação Gráfica 08/09 4 ??? ? ?? ? ??. Para cada pixel.. Determinar o ponto visível.. Iluminar esse ponto

5 Ray Tracing Pontos fracos –A iluminação de um ponto pode ser arbitrariamente complexa, impedindo eventualmente aplicações interactivas –Inexistência de coprocessadores especializados para implementar o ray tracing. Este algoritmo executa no CPU, resultando num tempo por pixel superior ao raster Pontos fortes –A iluminação de cada ponto é dependente de todos os outros objectos do mundo: Iluminação Global. O algoritmo de ray tracing incorpora naturalmente a grande maioria dos efeitos de transporte de luz DI-UM Computação Gráfica 08/09 5

6 Raster versus Ray Tracing DI-UM Computação Gráfica 08/09 6 [NVIDIA NVIRT 2009]

7 Introdução O conceito de ray tracing foi introduzido na Computação Gráfica em 1980 por Whitted O termo ray tracing é usado livremente para designar uma infinidade de diferentes abordagens ao problema de rendering, desde que baseados no princípio de intersecção de uma semirecta (raio) com primitivas geométricas Esta sessão debruça-se sobre o algoritmo clássico de ray tracing conforme apresentado por Whitted, logo determinístico, e aborda algumas questões essenciais associadas com a sua funcionalidade, implementação e desempenho DI-UM Computação Gráfica 08/09 7

8 Ray casting: definição Ray casting: Determina qual o ponto y visível ao longo de um raio com origem em x e direcção ψ. sendo A o conjunto de todos os objectos representados na cena. DI-UM Computação Gráfica 08/09 8 x Θ y=r(x,Θ)

9 Plano da imagem p Ray Tracing: Princípios DI-UM Computação Gráfica 08/09 9 Observador x Cena Fonte de luz L(xObs) Raio Primário Os raios primários determinam quais os objectos visíveis directamente pelo observador.

10 Ray Tracing: Algoritmo // ciclo principal computeImage (viewPoint) { para cada pixel p { raio = GerarRaio (viewPoint, p, PRIMARIO) radiance[p] = rad (raio) } rad (raio) { objecto, x = trace (raio) computeRad (x, raio, objecto) } DI-UM Computação Gráfica 08/09 10

11 Ray Tracing: Algoritmo // intersecção mais próxima da origem do raio trace (raio) { // p = r (origem, direcção) tmin = Max_dist Para todos os objectos da cena { x = intersect (raio, objecto) dist = distancia (raio.origem, x) if (dist < tmin) { tmin = dist p = x obj = objecto} } return (obj, p) } DI-UM Computação Gráfica 08/09 11

12 Ray Tracing: Raios Primários Os raios primários determinam quais os pontos visíveis directamente pelo observador. Diz-se que propagam importância, pois estes pontos passam a ser importantes para a imagem. O algoritmo pode parar por aqui atribuindo uma cor aos pontos: –Pseudo-cor – visualização científica –Em função da posição das fontes de luz sem verificar se são visíveis: iluminação local Inexistência de sombras As placas gráficas fazem isto, usando no entanto o algoritmo de profundidade para determinar a visibilidade (depth buffer ou Z-buffer) DI-UM Computação Gráfica 08/09 12

13 A radiância reflectida por um ponto p ao longo de uma direcção Θ, L r (p Θ), devido a radiância incidente em p ao longo da direcção Ψ, L i (p Ψ), é dada por: f r (p, Θ Ψ) – Bidirectional Reflectance Distribution Function (BRDF), caracteriza o material; indica a fracção da radiância incidente ao longo de Ψ que é reflectida ao longo de Θ (por comprimento de onda) cos (N, Ψ) – cosseno entre a direcção de incidência e a normal da superfície do objecto no ponto I Ray Tracing: Radiância reflectida DI-UM Computação Gráfica 08/09 13 NL r (p Θ)L i (p Ψ)

14 Ray Tracing: Iluminação Directa DI-UM Computação Gráfica 08/09 14 A radiância reflectida pode ser dividida em 2 integrais: –iluminação directa oriunda das fontes de luz –iluminação indirecta, oriunda de todas as outras direcções A iluminação directa é tão importante que quase todos os algoritmos de ray tracing a calculam dipsrando raios na direcção das fontes de luz Estes raios (shadow rays) determinam apenas se a fonte de luz é visível a partir de p ou não

15 Ray Tracing: Iluminação Directa A maioria dos ray tracers clássicos permite aproximar as fontes de luz como fontes ideais: pontos que emitem com igual intensidade em todas as direcções. –Um raio disparado na direcção de p para L i basta para determinar se a fonte pontual L i é visível a partir do ponto p (chamemos a esta direcção ψ i ) A BRDF para este ponto e este par de direcções, f r (p,Θ ψ i ), indica a percentagem de radiância incidente ao longo de ψ i que é reflectida na direcção Θ. DI-UM Computação Gráfica 08/09 15

16 Ray Tracing: Iluminação Directa V(x,y) é a função de visibilidade: V(x,y) é avaliada disparando um raio de x para y Se nenhum objecto for intersectado por este raio a uma distância da origem menor do que a distância da fonte de luz então V(x,y)=1, senão V(x,y)=0 Estes raios são designados por shadow rays ou shadow feelers DI-UM Computação Gráfica 08/09 16

17 Ray Tracing: Iluminação Directa DI-UM Computação Gráfica 08/09 17 Plano da imagem p Observador x Cena Fonte de luz L(xObs) Raio Primário Fonte de luz

18 Ray Tracing: Iluminação Directa computeRad (x, raio, objecto) { radiance = directIllum (x, raio.dir, objecto) return (radiance) } directIllum (x, dir, objecto) { rad = 0; para cada fonte de luz l { raio = GerarRaio (x, l, SHADOW) if (visibilidade (raio, l)) rad += brdf (x, dir, dir_l)* Ll * cos (Nx, dir_l) } return (rad) } DI-UM Computação Gráfica 08/09 18

19 Ray Tracing: Iluminação Directa // visibilidade da fonte de luz visibilidade (raio,l) { // V(x,y) tmin = distancia (raio.origem,l) Para todos os objectos da cena { p = intersect (raio, objecto) dist = distancia (raio.origem, p) if (dist < tmin) return (0) } return 1 } DI-UM Computação Gráfica 08/09 19

20 Ray Tracing: Iluminação Indirecta DI-UM Computação Gráfica 08/09 20 Quais as direcções a considerar para a iluminação indirecta? O ray tracing clássico sugere que se amostre as direcções especulares, pois estas correspondem a máximos da BRDF reflexão especular : aproximada pela direcção R transmissão especular : aproximada pela direcção T

21 Ray Tracing: Iluminação Indirecta DI-UM Computação Gráfica 08/09 21 Reflexão especular Transmissão especular (lei de Snell) θiθi θtθt θrθr V N R T

22 Ray Tracing: Iluminação Indirecta Para calcular a radiância incidente em x ao longo de cada uma das direcções R e T devem ser enviados raios secundários ao longo de cada uma destas direcções. O processamento dos raios secundários é em tudo equivalente aos raios primários, fazendo do ray tracing um algoritmo recursivo que gera uma árvore de raios. É necessário um critério de paragem para que a árvore não tenha profundidade infinita: –Terminar ao atingir uma determinada profundidade –Terminar quando a contribuição de um raio for inferior a um determinado limite –Decidir de forma estocástica (Roleta Russa) DI-UM Computação Gráfica 08/09 22

23 Ray Tracing: Iluminação Indirecta computeRad (x, raio, objecto, depth) { rad = directIllum (x, raio.dir, objecto) if (depth < MAX_DEPTH) { if (ksg > 0) { // reflexão especular raioR = GerarRaio (x, Rg, REFLEXAO) objR, p = trace (raioR) rad += ksg*cos(N,raioR)*computeRad (p,raioR,objR, depth++)} if (ktg > 0) { // transmissão especular raioT = GerarRaio (x, Tg, TRANSMISSAO) objT, p = trace (raioT) rad += ktg*cos(N,raioT)*computeRad (p,raioT,objT, depth++)} } return (rad) } DI-UM Computação Gráfica 08/09 23

24 Ray Tracing: Imagens DI-UM Computação Gráfica 08/09 24 [Turner Whitted, 1980]

25 Ray Tracing: Imagens DI-UM Computação Gráfica 08/09 25 [Utah Teapot, 1980]

26 Ray Tracing Images DI-UM Computação Gráfica 08/09 26 [NVidia, 2009] [Henrik Wann Jensen, 2000]

27 Ray Tracing Images DI-UM Computação Gráfica 08/09 27 [NVidia, 2009]

28 Ray Tracing: Complexidade O algoritmo usado para determinar a visibilidade ao longo de um raio requer que cada raio seja intersectado com TODAS as primitivas geométricas da cena. O tempo para cada raio é, portanto, linear com o número de primitivas N: No entanto, cada raio não passa na proximidade da maioria das primitivas DI-UM Computação Gráfica 08/09 28

29 Ray Tracing: Estruturas de Aceleração O objectivo das estruturas de aceleração é diminuir o número de intersecções por raio. Isto é conseguido: 1.Permitindo a rejeição rápida e simultânea de grupos de primitivas 2.Se possível, ordenando o processo de procura (intersecções), tal que as primitivas mais próximas da origem do raio sejam processadas primeiro, evitando processar as mais distantes se for encontrada uma intersecção Abordagens: –SUBDIVISÃO DO ESPAÇO: grelhas regulares, octrees, kd-tree Permitem aplicar os critérios 1 e 2 –SUBDIVISÃO DOS OBJECTOS: bounding volume hierarchy (BVH) Permitem aplicar apenas o critério 1 DI-UM Computação Gráfica 08/09 29

30 Ray Tracing: Grelha Regular O espaço 3D é particionado impondo uma grelha regular que o subdivide em voxels (volume elements). Todos os voxels têm a mesma dimensão. DI-UM Computação Gráfica 08/09 30 Construção muito rápida Travessia pouco eficiente devido à má distribuição das primitivas pelos voxels

31 Ray Tracing: Octree O espaço é hierarquicamente e adaptativamente subdividido em 8 voxels DI-UM Computação Gráfica 08/09 31 Compromisso entre tempo de construção e eficiência da travessia

32 Ray Tracing: Kd-tree O espaço é subdividido em 2 por um plano. Cada um dos sub-espaços resultantes é depois subdividido da mesma forma, até atingir um determinado critério de paragem DI-UM Computação Gráfica 08/09 32 Travessia mais eficiente se o critério de subdivisão for apropriado (e.g., SAH) Quanto mais sofisticado for o critério de subdivisão maior o tempo necessário para a construir

33 Ray Tracing: Bounding Volume Hierarchy Os objectos são agrupados dentro de Bounding Volumes. Cada um destes grupos é depois hierarquicamente subdividido por outros volumes DI-UM Computação Gráfica 08/09 33 Não ordena o espaço Construção semelhante à kd-tree Travessia ligeiramente inferior à kd-tree

34 Ray Tracing: Geometria Dinâmica Qual a estrutura mais indicada se a geometria se move? DI-UM Computação Gráfica 08/09 34 Reaproveitamento da hierarquia (topologia da árvore), com ajustamento das dimensões dos volumes Com grandes deformações da geometria a hierarquia inicial deixa de ser apropriada para a distribuição das primitivas, exigindo uma reconstrução completa da BVH

35 Ray Tracing: Complexidade A complexidade do ray tracing com uma estrura de aceleração apropriada é logarítmica com o número de primitivas geométricas N: O tempo de construção depende do critério de subdivisão do espaço / agrupamento das primitivas Critérios sofisticados (e.g., SAH) resultam em travessias eficientes, mas exigem tempos de construção muito elevados O tempo de reconstrução/reajustamento de uma estrutura de aceleração pode impedir a sua utilização em contextos interactivos. DI-UM Computação Gráfica 08/09 35

36 Ray Tracing: Aliasing O resultado de um ray tracer é uma grelha bidimensional discreta com valores de radiância incidente no plano da imagem Mas a radiância incidente é na realidade uma função contínua definida sobre este plano A estratégia de amostragem (distribuição) e a sua densidade (frequência) afectam a qualidade do resultado DI-UM Computação Gráfica 08/09 36 Se a distribuição da amostragem é uniforme e a frequência é inadequada são introduzidos artefactos na imagem, fenómeno vulgarmente designado por aliasing

37 Teoria da amostragem Selecção de pontos de amostragem de funções contínuas e utilização das amostras para construir novas funções semelhantes à original DI-UM Computação Gráfica 08/ função contínua - Posição da amostra- amostra - filtro reconstrução- função reconstruída

38 Limite de Nyquist DI-UM Computação Gráfica 08/09 38 Limite de Nyquist Se a frequência de amostragem, f s, é maior ou igual ao dobro da maior frequência presente no sinal (função contínua), f max, então é possível reconstruir perfeitamente o sinal original.

39 Ray Tracing: Aliasing DI-UM Computação Gráfica 08/09 39 Um ray tracer amostra a radiância incidente no plano da imagem com uma dada frequência de amostragem ( frequentemente determinada pela resolução do plano da imagem) Para que não surjam fenómenos de aliasing a frequência de amostragem deve ser maior ou igual ao limite de Nyquist Qualquer função que tenha descontinuidades não é limitada em banda, isto é, não tem uma frequência máxima As imagens têm descontinuidades (p. ex.: limites geométricos, contornos de sombras ou reflexões) logo não são limitadas em banda Os fenómenos de aliasing são portanto inevitáveis com distribuições uniformes

40 Antialiasing: Sobreamostragem A frequência de amostragem pode aumentar disparando mais do que um raio primário por pixel DI-UM Computação Gráfica 08/ seg6.0 seg

41 Antialiasing: Sobreamostragem adaptativa Para evitar o aumento linear do tempo de execução aumenta-se a frequência de amostragem apenas quando a diferença entre 2 amostras vizinhas ultrapassa um determinado limite DI-UM Computação Gráfica 08/09 41 Uma vez que uma imagem com descontinuidades não é limitada em banda, o aumento da frequência de amostragem nunca elimina o fenómeno de aliasing, apenas reduz o erro Esta redução pode resultar num erro abaixo do limite percepcionável pelo Sistema Visual Humano

42 Antialiasing: Amostragem não uniforme O impacto visual de aliasing pode ser reduzido variando o espaçamento entre amostras –Por exemplo seleccionando o ponto de amostragem estocasticamente O sinal reconstruído continua a ser incorrecto, mas é percepcionado como ruído e não como aliasing O ruído é a variância introduzida pelas variáveis aleatórias usadas no processo de selecção das amostras O sistema visual humano é mais tolerante a ruído aleatório do que a aliasing estruturado DI-UM Computação Gráfica 08/09 42

43 Antialiasing: Amostragem não uniforme DI-UM Computação Gráfica 08/09 43 Pseudo-aleatório EstratificadoJittered ξ 1 e ξ 2 são variáveis aleatórias com distribuição uniforme no domínio [0.. 1[

44 Antialiasing: Amostragem não uniforme DI-UM Computação Gráfica 08/09 44 Uniform (1spp) – 1.6 seg Jittered (1spp) – 1.6 seg O aliasing é removido introduzindo jittering e mantendo 1 amostra por pixel (spp: samples per pixel) É introduzido ruído no resultado O tempo de execução mantém-se constante

45 Antialiasing: Amostragem não uniforme DI-UM Computação Gráfica 08/09 45 A utilização de distribuições de amostragem apropriadas permite obter melhores resultados (menor variância) com o mesmo número de raios Imagens obtidas com o mesmo número de raios e diferentes distribuições [Pharr & Humphreys, 2004]

46 Fontes de luz As fontes de luz constituídas apenas por um ponto que emite potência radiante com igual intensidade em todas as direcções não têm equivalente na realidade As imagens resultantes de usar estes fontes de luz têm sombras com contornos muito definidos devido ao determinismo do algoritmo DI-UM Computação Gráfica 08/09 46

47 Fontes de luz As fontes de luz com área permitem suportar sombras com diferentes gradações, isto é, umbra e penumbra DI-UM Computação Gráfica 08/09 47 Como se trata de uma área são utilizados vários raios para amostrar a fonte de luz. O ponto na área da fonte de luz que é amostrado por cada raio é escolhido aleatoriamente. Esta aleatoriedade evita o aliasing, mas introduz ruído!

48 DI-UM Computação Gráfica 08/09 48 Trajectos de luz Sendo o transporte de luz aproximado pela óptica geométrica, podemos conceber que cada fotão percorre um trajecto desde a fonte de luz até ao seu destino final Este trajecto é composto por segmentos de recta direccionais, representando os extremos interacções do fotão com um objecto. A interacção pode ser difusa (D) ou especular (S) O conjunto de interacções é representado por uma string com origem na fonte de luz (L) e a terminar no ponto onde o fotão é absorvido ou no observador (E)

49 DI-UM Computação Gráfica 08/09 49 Trajectos de luz Material Difuso Material Especular a a a a - LSDE b b b b - LDSE c c c c - LDDE

50 DI-UM Computação Gráfica 08/09 50 Trajectos de luz A árvore de raios gerada pelo ray tracing de Whitted começa no observador e termina sempre que encontrar um material difuso. Os trajectos simulados são portanto sempre do tipo L[D][S*]E Os caminhos a e c do acetato anterior não são simulados O caminho a resultaria na projecção pelo espelho do reflexo da fonte de luz no chão difuso. O ray tracing clássico não modela este fenómeno.

51 Trajectos de luz: Whitted ray tracing DI-UM Computação Gráfica 08/09 51 E L D S LDSE D LDE LDSSE

52 Path Tracing O ray tracing clássico é perfeitamente determinístico. Para cada ponto: –Disparar raios na direcção das fontes de luz –Se o material é um reflector especular dispara um raio na direcção R –Se o material é um transmissor especular dispara um raio na direcção T Como as restantes direcções não são amostradas por raios, os fenómenos difusos globais não são simulados: –Interreflexões difusas e color bleeding – exemplo: iluminação do tecto da Cornell Box por luz reflectida pelas paredes difusas –Cáusticas – exemplo: luz transmitida pela esfera transparente é ficada no chão e parede da Cornell Box Estas limitações são ultrapassadas recorrendo a algoritmos estocásticos DI-UM Computação Gráfica 08/09 52

53 Path Tracing Este algoritmo selecciona estocasticamente (isto é, de forma aleatória) qual a direcção ao longo da qual é disparado o próximo raio Como a selecção é estocástica qualquer direcção pode ser seleccionada –Como qualquer direcção pode ser seleccionada qualquer fenómeno modelável pela óptica geométrica pode ser simulado A introdução de probabilidades introduz ruído nas imagens O ruído pode ser reduzido disparando vários (muitos) raios primários por pixel. DI-UM Computação Gráfica 08/09 53

54 Path Tracing: Exemplo DI-UM Computação Gráfica 08/09 54 Plano da imagem p Observador x Cena Fonte de luz Raio Primário 1 Nota: Os shadow rays são disparados em todas as intersecções. Não estão representados para simplificar a animação. Raio Primário 2

55 Path Tracing: Cornell Box DI-UM Computação Gráfica 08/ samples per pixel: 16 s 64 samples per pixel: 4 m

56 Path Tracing: Cornell Box DI-UM Computação Gráfica 08/ samples per pixel: 1h10m 4096 samples per pixel: 4h05m

57 Trajectos de luz: path tracing DI-UM Computação Gráfica 08/09 57 E L S S D LSSDE D D LDDE Os trajectos de luz – seguidos a partir do observador – não terminam em materiais difusos. Podem continuar pois é sempre seleccionada uma direcção para amostrar.


Carregar ppt "Luís Paulo Santos - Computação Gráfica 08/09 Computação Gráfica Ray Tracing."

Apresentações semelhantes


Anúncios Google