Otimização de Raytracing Ian Medeiros Joner Duarte Vanessa Leite
Raytracing O termo raytracing é usado livremente para designar uma infinidade de diferentes abordagens ao problema de rendering, desde que baseados no princípio de interseção de uma semireta (raio) com primitivas geométricas.
Raytracing: Complexidade O algoritmo usado para determinar a visibilidade ao longo de um raio requer que cada raio seja interseptado (testado) com TODAS as primitivas geométricas da cena O tempo para cada raio é, portanto, linear com o número de primitivas N:
Raytracing: Complexidade No entanto, cada raio não passa próximo da maioria das primitivas
Raytracing: otimizações iniciais Melhorias no código: Utilização de #define Mudança de código economizando uma chamada isInShadow Utilização de Paralelismo: OpenMP omp_set_num_threads(omp_get_num_procs()); #pragma omp parallel default(none) private(y,x, pixel, ray) shared(image, camera, scene, eye, width, yc, height) (...) #pragma omp for schedule(guided)
Raytracing: Estruturas de Aceleração O objetivo das estruturas de aceleração é diminuir o número de interseções por raio Isso pode ser feito utilizando-se dois critérios: Permitindo a rejeição rápida e simultânea de grupos de primitivas 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 interseção.
Raytracing: Estruturas de Aceleração Duas abordagens: Subdivisão do espaço: Grades regulares, Octrees, Kd-Ttrees – permitem aplicar os critérios 1 e 2 Subdivisão dos objetos: Bound Volume Hierarchy (BVH) – permite aplicar o critério 1.
Raytracing: Grade regular O espaço 3D é subdividido montando-se uma grade regular que o subdivide em espaços com mesma dimensão
Raytracing: Grade regular Vantagens: Construção muito rápida Desvantagens: Travessia pouco eficiente devido à má distribuição das primitivas pelos espaços
Raytracing: Octree O espaço é hierarquicamente e adaptativamente subdividido em 8 espaços Compromisso entre construção e travessia
Raytracing: KD-Tree O espaço é subdividido em dois por um plano Cada um dos subespaços resultantes é depois subdividido da mesma forma até atingir um critério de parada Travessia mais eficiente se um bom critério de subdivisão for utilizado (ex: SAH) Quanto mais sofisticado o critério de subdivisão maior é o tempo necessário para a construção da árvore.
Raytracing: KD-Tree (SAH) SAH (Surface Area Heuristic) é uma heurística que leva em consideração a probabilidade de um determinado objeto ser interceptado ou não por um raio. CustoDivisao = CustoTravessia + P[pedaçoEsquerda |Cena] C(pedaçoEsquerda) + P[pedaçoDireita| Cena] C(pedaçoDireita)
Raytracing: KD-Tree X tmin Z B X Y Z A B C D Y C D A tmax
Raytracing: Bounding Volume Hierarchy Os objetos são agrupados dentro de bounding volumes. Cada um desses grupos é depois subdividido hierarquicamente por outros volumes
Raytracing: Bounding Volume Hierarchy Não ordena o espaço Construção semelhante à KD-Tree Travessia ligeiramente inferior à KD-Tree
Raytracing: Complexidade 2 A complexidade do raytracing com a utilização de estruturas de aceleração é logaritmica com relação ao número de estruturas na cena: O tempo de construção depende do critério de subdivisão do espaço/agrupamento de primitivas
Raytracing: Complexidade 2 Critérios sofisticados (como o SAH para KD- Tree) resultam em travessias muito eficientes, entretanto exigem um tempo de construção muito elevado.
Raytracing: Comparação de Resultados Nome da cena/arquivo Tempo de execução algoritmo inicial (s) Tempo de execução c/ otimizações (s) 5balls 2.453 0.478 Bolas 4.547 0.285 Bunny 974.825 3.601 Cavalo 31.718 0.277 Esfera 0.763 0.074 Esfera_planos 0.964 0.094 Esferas 1.012 0.097 Espelho 0.977 0.166 Manual 0.888 0.082 Pessoa 2.013 0.143 Pool 9.275 0.499 Room 8.625 0.686 Wall 2.147 0.291
Referências Highly Parallel Fast KD-tree Construction for Interactive Ray Tracing of Dynamic Scenes - EUROGRAPHICS 2007 / D. Cohen-Or and P. Slavík Interactive k-D Tree GPU Raytracing (Daniel Reiter Horn, Jeremy Sugerman, Mike Houston, Pat Hanrahan – Stanford University) Construção eficiente de kd-trees para primitivas triangulares (Alessandro Ribeiro da Silva, Wallace Santos Lages - UFMG) Ray Tracing Interactivo: Estrutura de Aceleração - Ademar Gonçalves - Universidade do Minho, Braga, 2009