29
Ray Tracing com Octree Fundamentos da Computação Gráfica Thiago Marques Toledo

Ray Tracing com Octree

Embed Size (px)

DESCRIPTION

Ray Tracing com Octree. Fundamentos da Computação Gráfica Thiago Marques Toledo. Objetivos. Implementar um ray tracer básico Tal como nos slides de aula Inteiramente em CPU Melhorar desempenho com uso de Octree. Ray Tracer Básico. Modelo Blinn-Phong Sombra Reflexão - PowerPoint PPT Presentation

Citation preview

Page 1: Ray Tracing com  Octree

Ray Tracing com Octree

Fundamentos da Computação GráficaThiago Marques Toledo

Page 2: Ray Tracing com  Octree

Objetivos

Implementar um ray tracer básicoTal como nos slides de aulaInteiramente em CPU

Melhorar desempenho com uso de Octree

Page 3: Ray Tracing com  Octree

Ray Tracer Básico

Modelo Blinn-PhongSombraReflexãoAplicação de TexturaSuporte a esferas e caixas alinhadas

Page 4: Ray Tracing com  Octree

Cena Básica com OpenGL

Page 5: Ray Tracing com  Octree

Cena Básica com Ray Tracing

Page 6: Ray Tracing com  Octree

Cena Básica com Ray Tracing

Page 7: Ray Tracing com  Octree

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

Page 8: Ray Tracing com  Octree

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

Page 9: Ray Tracing com  Octree

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

Page 10: Ray Tracing com  Octree

Experiências

Page 11: Ray Tracing com  Octree

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)

Page 12: Ray Tracing com  Octree

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

Page 13: Ray Tracing com  Octree

Octree (1 Nível)

Page 14: Ray Tracing com  Octree

Octree (2 Níveis)

Page 15: Ray Tracing com  Octree

Octree (3 Níveis)

Page 16: Ray Tracing com  Octree

Octree (4 Níveis)

Page 17: Ray Tracing com  Octree

Octree (5 Níveis)

Page 18: Ray Tracing com  Octree

Octree (6 Níveis)

Page 19: Ray Tracing com  Octree

Octree (7 Níveis)

Page 20: Ray Tracing com  Octree

Octree (8 Níveis)

Page 21: Ray Tracing com  Octree

Octree (8 Níveis)

Page 22: Ray Tracing com  Octree

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

Page 23: Ray Tracing com  Octree

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

Page 24: Ray Tracing com  Octree

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

Page 25: Ray Tracing com  Octree

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

)

Page 26: Ray Tracing com  Octree

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

)

Page 27: Ray Tracing com  Octree

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

Page 28: Ray Tracing com  Octree

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

Page 29: Ray Tracing com  Octree

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/