Post on 30-Dec-2015
description
Ray Tracing com Octree
Fundamentos da Computação GráficaThiago Marques Toledo
Objetivos
Implementar um ray tracer básicoTal como nos slides de aulaInteiramente em CPU
Melhorar desempenho com uso de Octree
Ray Tracer Básico
Modelo Blinn-PhongSombraReflexãoAplicação de TexturaSuporte a esferas e caixas alinhadas
Cena Básica com OpenGL
Cena Básica com Ray Tracing
Cena Básica com Ray Tracing
Experiências
Estruturas CríticasRaio e VetorDevem ser tão pequenos quanto possívelCriação de cópias deve ser evitada
Impacto MUITO grande no desempenhoUso de referências constantes na passagem de funçõesCálculos com vetores durante tratamento de colisão deve ser feito com cuidado
Experiências
Tratamento de InterseçõesNormalmente a primeira implementação é ingênuaNem sempre é necessário saber ponto de colisão e normal relacionada
Testes de raio contra hierarquias de volumePodem existir otimizações
Há muita pesquisa em algoritmos de colisãoSe não é o objeto de pesquisa, procure o mais recente!
É o bottleneck do Ray Tracer
Experiências
Tratamento de InterseçõesRaio x Esfera
Tal como nos slides de aulaAvalia uma equação de segundo grauHá algoritmos mais eficientes
Raio x AABB (avaliando ponto de contato)Método desenvolvido por Kay e KayjiaAvaliação por Slabs (espaço entre dois planos paralelos)Calcula Interseção do Raio com slabs XYZ (pontos T1 e T2)Se o maior T1 (T-Near) for menor que o menor T2 (T-Far)
Há interseção
Experiências
Octree
Hierarquia de AABBsEspaço é dividido em 8 AABBs sucessivamente
Nível da árvore definido por usuárioNão é necessário descer um nível numa região em que não há objetos
Testes de interseção são feitos a partir da raizSe não houver interseção, toda a área é descartada (filhos não precisam ser testados)
Octree
Pode-se considerar um volume envolvente representando o objeto na construção da árvoreFalso positivo no teste de intreseção não é um problema
Octree (1 Nível)
Octree (2 Níveis)
Octree (3 Níveis)
Octree (4 Níveis)
Octree (5 Níveis)
Octree (6 Níveis)
Octree (7 Níveis)
Octree (8 Níveis)
Octree (8 Níveis)
Octree
OpenGLFrustum CullingNão é necessário enviar para renderização objetos fora do campo de visãoObjetos podem ser referenciados em mais de um nó na hierarquiaNecessário identificar objetos que já foram renderizados
Frame Par/Frame ÍmparNão há ganho quando todos os objetos estão visíveis
Octree
Ray TracerObjetos fora do frustrum podem influenciar renderizaçãoGanho em diminuir o número de testes de interseção de raioRaio pode cruzar vários nós contendo um mesmo objeto, que deve ser testado uma única vez
Objeto armazena ID e resultado do último raioFalso positivo não é um problema, já que raio precisa sempre ser testado contra objetoPode haver ganho mesmo que todos os objetos estejam visíveis
Octree
Interseção Raio x AABBNão é necessário ponto de contatoÉ crítico para o desempenhoAlgoritmo proposto por EisemannUso de Slabs, mas com pré-processamento para classificação do raioMais rápido que o método anterior, mas não identifica ponto de contato
Comparação de Tempo
0 1 2 3 4 5 6 7 80.0
50.0
100.0
150.0
200.0
250.0 229.8
117.4
27.96.9 4.1 4.7 6.3 8.2 10.5
Cena 640x480 com 9261 Esferas
Níveis da Octree
Tem
po (s
)
Comparação de Tempo
0 1 2 3 4 5 6 7 80.0
50.0
100.0
150.0
200.0
250.0
144.7
80.5
20.85.9 3.4 3.5 4.4 4.8 5.3
Cena 640x480 com 9261 AABBs
Níveis da Octree
Tem
po (s
)
Comparação de Tempo
Diferença grande entre esferas e AABBs229,8s x 144,7sSuperfícies não exatamente do mesmo tamanho…Maior diferença está na eficiência do tratamento de interseçãoAlgoritmo para Esfera é caro
Existem outros melhoresAlgoritmo para AABB tem boa performance
Comparação de Tempo
Ganho máximo em torno de 97,5% em relação à renderização sem OctreeHá um número de níveis a partir do qual é melhor testar todos os objetos
Depende da cena, de tamanho dos objetos, etc.Nas cenas testadas, melhor resultado foi com 4 níveis
Referências
Slides de aulaReal Time Rendering
T. Akenine-Möller, E. Haines, N. HoffmanChapter 16: Intersection Test Methods
http://www.siggraph.org/education/materials/HyperGraph/raytrace/rtinter3.htmhttp://jgt.akpeters.com/papers/EisemannEtAl07/