Fundamentos da Computação Gráfica PUC-Rio – Pontifícia Universidade Católica do Rio de Janeiro DI – Departamento de Informática Mestrado em Informática Disciplina: Fundamentos da Computação Gráfica Professor: Marcelo Gattass Pedro Nuno de Souza Moura Apresentação Esta apresentação tem por objetivo demonstrar os algoritmos implementados e os resultados obtidos na otimização do Ray Tracing. Agenda Otimizações no Código Interseção com Primitivas Estruturas de Dados Espaciais Otimizações no Código Durante os lançamentos dos raios e, principalmente, no cálculo das interseções, um número muito grande de chamadas às funções da bibilioteca “algebra.h” é feito. Excessivo número de passagens por valor do TAD Vetor. Utilizou-se a diretiva de compilador #define para tentar otimizar. Visualizou-se um ganho de tempo considerável. Otimizações no Código A renderização é realizada pixel a pixel, causando um excessivo número de interrupções. Alteração para renderização linha a linha. Interseções com Primitivas Para a esfera, verificou-se que é o método mais eficiente constante na literatura. Para o triângulo, o método constante no código era o de Badouel, em que se determina a interseção do raio com o plano e, então, verifica-se se o ponto está contido no triângulo. O método estudado foi o de Möller e Trumbore [2]. Interseções com Primitivas Um triângulo é escrito nas coordenadas baricêntricas: T (u, v) (1 u v)V0 u V1 v V2 A interseção entre o raio e o triângulo é obtido através da resolução da seguinte igualdade: O tD (1 u v)V0 u V1 v V2 Cuja fórmula fechada pode ser reescrita da seguinte forma: t 1 u (D E ) E 2 1 v (T E1 ) E2 (D E ) T 1 2 PE 1 (T E1 ) D Q E2 P T Q D Comparação Antes e depois das otimizações feitas. Comparação Antes e depois das otimizações feitas. Comparação Média de 36,17 % sobre todas as cenas. Anteriores (s) Novos (s) Diferença Melhoria 5,0780 3,1250 1,9530 38,46% 8,7810 4,5150 4,2660 48,58% 1,2190 0,9210 0,2980 24,45% 1,5000 1,1090 0,3910 26,07% 1,7040 1,2350 0,4690 27,52% 1,5310 1,0780 0,4530 29,59% 1,3440 1,0000 0,3440 25,60% 3,2970 2,1720 1,1250 34,12% 15,3440 6,7340 8,6100 56,11% 14,9060 12,0000 2,9060 19,50% 3,5000 1,1250 2,3750 67,86% 5,2913 3,1831 2,1082 36,17% Estruturas de Dados Espaciais Possibilidades para diminuição do número de raios lançados: Uso de estruturas espaciais para particionamento do espaço, tais como Octree e Kdtree. Uso de Bounding Box e Hierarquia de Volumes Limitantes, para diminuir o tempo de cálculo de interseções. Referências Bibliográficas [1] GLASSNER, Andrew. An Introduction to Ray Tracing. [2] MÖLLER, Tomas; TRUMBORE, Ben. Fast, Minimum Storage Ray/Triangle Intersection. [3] KOMATSU, Kazuhiko; et al. A Fast Ray Frustum-Triangle Intersection Intersection Algorithm with Precomputation and Early Termination. In: IPSJ Online Transactions Vol. 1, 2003. [4] SEGURA, Rafael; FEITO, Francisco. Algorithms to Test RayTriangle Intersection: Comparative Study. Departamento de Informática, Universidade de Jaén.