INF 2063 Tópicos em CG II Visualização de Modelos Massivos Peter Dam Paper Asynchronous BVH Construction for Ray Tracing Dynamic Scenes on Parallel Multi-Core Architectures Thiago Ize, Ingo Wald, Steven G. Parker Eurographics 2007 História (Ray Tracing x Hardware) • O ray tracing (traçado de raios) data dos anos 90, com o uso de grandes supercomputadores para atingir tempo interativo • Só recentemente ray tracing foi considerado como possivelmente viável para cenas complexas em tempo real • Multi-cores, GPUs programáveis e hardware dedicado a ray tracing vêm aumentando o desempenho significativamente História (Ray Tracing x Algoritmos) • Para driblar as limitações de hardware algumas técnicas de aceleração e otimização foram estudadas • Uso de estruturas de aceleração espaciais Estruturas de Aceleração KD-Tree • Até 2005 quase todas as implementações de ray tracing usavam kd-tree. • Aceleração de renderização ótima • Custo de construção é altamente proibitivo • Construído geralmente em préprocessamento • Problemas para cenas dinâmicas Estruturas de Aceleração Grid • Aceleração da renderização média • Custo de construção ótima • Geralmente reconstruído a cada quadro para cenas dinâmicas, já que tem custo linear • Bom para cenas dinâmicas, mas o ganho de desempenho não é muito grande Estruturas de Aceleração BVH • Aceleração da renderização boa • Custo de construção média • Tradicionalmente lenta para construir, então a KD-Tree seria uma opção melhor que BVH • Com as técnias demonstradas no paper a construção é feita em tempo aceitável, fazendo com que o BVH tenha o melhor desempenho para cenas dinâmicas Atualizando a BVH Refitting • Atualiza a BVH para a nova configuração da cena • Só funciona para cenas que não mudam a quantidade de triângulos ou conectividade de vértices • BVH fica correto, porém não necessariamente eficiente • Gradativamente diminui desempenho Atualizando a BVH Rebuild • Segundo Lauterbach, uma cena funciona bem com “refitting” durante uma certa quantidade de quadros • Usa-se uma heurística para avaliar a eficiência da BVH atual (atualizada com “refitting”) • Se a eficiência está abaixo de um limite, constrói uma nova BVH Atualizando a BVH Asynchronous Rebuild • Mantém uma thread construindo nova BVH • Enquanto a thread construtora trabalha, todas as outras fazem o render e manutenção (refitting) da BVH atual • Quando a nova BVH estiver pronta, muda para esta nova e descarta a antiga, disparando a construção de uma nova BVH Métodos de Construção • O algoritmo assíncrono de atualização independe do método de construção • Pode demorar quanto tempo quiser para reconstruir a BVH, mas a estrutura estará defasada exatamente o tempo de construção • Encontrar método de construção que equilibre tempo de construção com qualidade da estrutura Cenas Cena: “Bart Museum” Dados: 262K triângulos; gerado para testes de estresse; grandes deformações Cena: “Fairy Forest 2” Dados: 394K triângulos; animações com keyframes; quase todos os triângulos deformam a cada quadro; cena semelhante à de um jogo Resultados • Todos os testes feitos com render em tamanho 1024 x 1024 • Não foram lançados raios secundários (sombra, reflexão, etc.) pois a técnica trata da construção da estrutura de aceleração e estes raios só impactam no tempo de renderização, e não de construção da estrutura • Tempo de construção na cena BART: 170ms • Tempo de construção na cena Fairy Forest: 230ms Resultados FPS x Tempo de execução - Somente usando técnica de “refit” - Rebuild usando heurística de Lauterbach - Rebuild assíncrono Resultados • Dependente da quantidade de núcleos do sistema • Quanto mais núcleos, mais visível é a vantagem desta técnica • Com poucos (menos de 4) núcleos a técnica até mesmo reduz a velocidade Resultados FPS x Tempo de execução - Somente usando técnica de “refit” - Rebuild usando heurística de Lauterbach - Rebuild assíncrono Resultados FPS x Tempo de execução - Método “sweep-build” (BVH melhor, mas demora mais para construir) - Método “approximate build” (BVH pior, mas bem mais rápido para construir) Diferença entre os métodos de construção. Como a técnica de “sweep-build” demora mais, há um número maior de quadros renderizados usando a BVH “refitted”, resultando em um desempenho pior. Além disso, quando a nova BVH fica pronta ela já está desatualizada. Conclusão • Para cenas que deformam pouco, somente usar o método “refitting” pode ser melhor • Para cenas pequenas onde reconstruir completamente a estrutura a cada quadro é possível este método também é desnecessário • Não há queda abrupta de desempenho para reconstruir BVH • Ótima escalabilidade