Upload
internet
View
103
Download
0
Embed Size (px)
Citation preview
Traçado de Raios de Cenas Dinâmicas na GPU
Autor: Paulo Ivson Netto SantosOrientador: Waldemar Celes Filho
23 de Março de 2009
2
Sumário
Motivação Estado da Arte Contribuições do Trabalho Construção da Grade Uniforme Traçado de Raios Resultados Conclusão Trabalhos Futuros
Motivação
Por que o traçado de raios?
Por que usar a GPU?
4
Vantagens
Eficiência O(log(n)) na complexidade da cena Descarte de visibilidade e oclusão Instanciação
Imagens: [Wald et al. 2003]
5
Vantagens
Alta qualidade de imagem Efeitos de sombreamento Cálculos fisicamente corretos Iluminação Global
Imagens: [Wald et al. 2003]
6
Iluminação Global
Imagens: [Wald et al. 2003]
7
Placa Gráfica GPUs se tornaram eficientes e flexíveis
Centenas de processadores em paralelo Suporta precisão de 32-bits de ponto flutuante Oferece muitos GFLOPS
Placas gráficas em cada PC e estação de trabalho
GF
LOP
S
G80 = GeForce 8800 GTX
G71 = GeForce 7900 GTX
G70 = GeForce 7800 GTX
NV40 = GeForce 6800 Ultra
NV35 = GeForce FX 5950 Ultra
NV30 = GeForce FX 5800
Imagens: Nvidia
8
Desafios Constantes enormes
1 raio ~ 1.000 ciclos da CPU Precisa de muitos raios
~1M pixels/quadro 4x anti-serrilhamento 25 quadros/seg 10 raios/pixel Um bilhão de raios por segundo…
Sem hardware especializado Rasterização tem evoluído há 20 anos!
Sem API unificada OpenGL vs OpenRT
Estado da Arte
Como obter desempenho interativo
10
Explorar Paralelismo
Agrupar raios próximos Instruções SIMD Raios primários
Utilizar vários processadores Clusters de PCs Placas gráficas
11
Reduzir Interseções
Interseção com primitivas 90% do processamento
Estrutura de Aceleração (EA) Minimizar interseções
Trocar pelo custo de percorrer a estrutura Reduzir complexidade do algoritmo
O(n) → O(log(n))
12
Cenas Dinâmicas
Movimento de corpo rígido Transformar raio para espaço local do objeto
Animação estruturada Pré-construir EAs para cada quadro-chave Deformar volumes envolventes da EA
Não estruturada Reconstruir ou adaptar EA a cada quadro
13
Trabalhos Relacionados CPU
Ray Tracing Animated Scenes using Coherent Grid Traversal [Wald et al. 2006]
Ray Tracing Deformable Scenes using Dynamic Bounding Volume Hierarchies[Wald et al. 2007]
Highly Parallel Fast KD-Tree Construction for Interactive Ray Tracing of Dynamic Scenes[Shevtsov et al. 2007]
GPU Real-Time KD-Tree Construction on Graphics Hardware
[Zhou et al. 2008]
Contribuições do Trabalho
Solução proposta
15
Objetivos
Explorar paralelismo da GPU Cenas dinâmicas
Movimento de corpo rígido Deformações Movimento não-estruturado
Estrutura de Aceleração Grade Uniforme Reconstruir quando houver movimento
16
Algoritmos na GPU
Construção da Grade Uniforme em paralelo Percurso e interseção de raios Cálculo de sombreamento
Texturas Sombras Reflexões
17
Resumo da SoluçãoMateriais
Coords TexCena
Normais
Vértices
Configurargrade
Enviar dados para GPU
Reconstruir grade
Traçar raios
sim
não
Inicialização
Visualização
laçoprincipal
Novo quadro-chave?
Construção da Grade Uniforme
Implementação em paralelo
19
Algoritmo Básico
1. Encontrar AABB da cena
2. Determinar no. de células
3. Construir listas de triângulos contidos em cada célula
4. Construir índice ID célula → lista de primitivas
3
V
kNdxNx 3
V
kNdyNy 3
V
kNdzNz
Percurso de Raios
ID célula(1)
Início da lista atualInício da próx. lista
(2, 6)
ID primitivas(7, 1, 3, 9)
0 2 6 11 15
22
3 2 7 1 3
9 11 6 2 4
5 7 4 6 8
8 3 7 5 13
12 11 14 21 5
20
Desafios em Paralelo
Como paralelizar a construção das listas? Por primitiva
Conflitos de escrita na mesma célula Por célula
Inúmeros acessos a muitos dados
Como construir índice para as listas? Determinar início e tamanho de cada lista
21
Observação
Difícil Obter primitivas ocupadas por cada célula
Fácil Obter células ocupadas por cada primitiva
22
Idéia Fundamental
Escrever pares (ID célula, ID primitiva) Ordenados por ID primitiva Reordenar pares de acordo com ID célula
4 7 9 7 13
7 14 7 9 12
10 12 4 5 4
8 14 8 10 2
Ordenar por ID célula4 5 4 7 4
8 9 7 9 12
10 2 10 12 13
7 14 7 14 8
(ID célula, ID primitiva)
23
Algoritmo
1. Obter quantas células cada primitiva ocupa
2. Acumular valores da Etapa 1
3. Escrever pares (ID célula, ID primitiva) usando índices da Etapa 2
4. Ordenar pares da Etapa 3
5. Dado ID célula, encontrar sua lista dentre pares ordenados da Etapa 4
24
Etapa 1
Objetivos Obter quantas células cada primitiva ocupa
Implementação Fragment shader Estimativa pela AABB de cada triângulo Escrever total de células em cada pixel
Exemplo
25
Etapa 2
Objetivos Acumular valores da Etapa 1 Índices para listas de células ocupadas por primitiva
Implementação Soma de prefixos em paralelo CUDA Data-Parallel Primitives (CUDPP) Acumular um valor adicional no final
Exemplo
26
Etapa 3 – Considerações
Objetivos Escrever pares (ID célula, ID primitiva) Usar índices acumulados da Etapa 2
Uma operação de escrita
Várias operações de escrita
Uma passada Fragment shaderCUDA
Geometry shader
Várias passadas
Vertex shader -
27
Etapa 3 – Solução Proposta
Dado ID par na saída Obter ID célula e ID primitiva
Dentre os valores da Etapa 2 Busca binária pelo maior valor Vmáx menor que ID par
ID primitiva = índice de Vmáx na Etapa 2
ID célula = ID célula inicial + (ID par – Vmáx)
Exemplo
28
Etapa 4
Objetivos Ordenar pares da Etapa 3 de acordo com ID célula
Implementação CUDA Radix-sort
Exemplo
29
Etapa 5
Objetivos Construir índices para acessar listas da Etapa 4
Implementação Busca binária pelo ID célula nas listas ordenadas Obter início e tamanho de cada lista Fragment shader
Exemplo
30
Vantagens
Paralelismo Sem conflitos de escrita Sem múltiplos valores de saída
Banda de memória Poucos acessos a dados
Implementação eficiente na GPU Soma de prefixos Ordenação Busca binária
Traçado de Raios
Implementação na GPU
32
Algoritmo ConceitualEnviar dados
para GPU
Materiais
Coords Tex
Normais
Vértices
Reconstruir grade Dados da Grade
Índices da Grade
Inicializar percurso de
raios
Obter próx. célula não-
vazia
Obter interseção
mais próxima
Sombreamento
Cor de fundo
sombra, reflexão
sim
não
sim
não
não
sim
Novo quadro-chave?
Índices da Grade
Vértices
Dados da Grade
Materiais
Coords Tex
Normais
33
Rotinas Principais
Percurso de raios 3D-DDA [Amanatides and Woo 1987]
Interseção raio x triângulo Coordenadas baricêntricas [Möller and Trumbore 1997]
Sombreamento Phong + texturas Raios de sombra Raios de reflexão
34
Implementação na GPU
Várias etapas
Raiosprimários
Raios de
sombraSombreamento
interseçõesinterseções em sombra cor final
Reflexão: passada adicional com blend
Resultados
Análise de desempenho
36
Roteiro Construção da Grade Uniforme Cenas de Teste Desempenho
Cenas Estáticas Cenas Dinâmicas
Trabalhos Relacionados Etapas de Visualização
Configuração de testes Nvidia GeForce 8800 Ultra Resolução de 1024 x 1024
37
Construção da Grade Uniforme
De 2x a 3x mais rápido que CPU Lento para cenas pequenas (API gráfica)
Tempo para reconstrução (ms)
38
Cenas de Teste - CAD
Boat(50K tris)
MonoBR(112K tris)
P40(470K tris)
39
Cenas de Teste - Benchmarks
Ben(78K tris)
Hand(16K tris)
Wood-doll(5K tris)
40
Cenas de Teste - Benchmarks
Toys(11K tris)
Marbles(9K tris)
Forest(174K tris)
41
Cenas Estáticas - CAD
Resultados P-40 Escalabilidade Descarte por oclusão
Sombras Cerca de 50% mais lento
Reflexões Pior para modelos grandes
Quadros por segundo (fps)
42
Cenas Estáticas - Benchmarks
“Forest” é pior caso para Grade Uniforme “Teapot in a stadium”
Sombras Até 50% mais lento
Reflexões Até 85% mais lento “Forest” pior (modelo grande)
Quadros por segundo (fps)
43
Cenas Dinâmicas - Benchmarks
Reconstrução da Grade Uniforme Custo pequeno (-10%) Exceto “Forest” (-30%)
Quadros por segundo (fps)
44
Trabalhos Relacionados
Desempenho até 4x mais rápido que BVH e Grade na CPU “Toys”
Melhor que CPU kd-tree e pior que GPU kd-tree “Forest”
Pior que ambas pesquisas com kd-tree
Quadros por segundo (fps)
45
Etapas de Visualização
Enviar dados para GPU é rápido Construção da Grade mais rápida que CPU Kd-tree mais lenta para ser construída Gargalo: etapa de traçado de raios
Tempo de cada etapa (ms)
46
Demonstração
Vídeos
Conclusão
Revisão dos resultados e proposta inicial
48
Objetivos Atingidos
Construção da Grade Uniforme na GPU Implementação em paralelo Rápida e escalável
Traçado de raios de cenas dinâmicas Desempenho interativo Sombras, reflexões
49
Contribuições
Construção da Grade Uniforme na GPU Mais rápido que pesquisas similares na CPU
Traçado de raios na GPU Mais rápido que Grade e BVH na CPU Cenas esparsas
Mais lento que kd-tree na CPU e GPU Várias melhorias possíveis
Trabalhos Futuros
Melhorias e novas pesquisas
51
Próximos Passos
Grades hierárquicas Várias Grades (movimento de corpo rígido) Distância até próxima célula ocupada Outras estruturas na GPU (BIH, BVH) Traçar pacotes de raios Simulação física
52
Bibliografia AMANATIDES, J.; WOO, A. A fast voxel traversal algorithm for ray tracing. In: IN EUROGRAPHICS
'87, p. 3-10, 1987.
MOLLER, T. A.; TRUMBORE, B. Fast, minimum storage ray-triangle intersection. JGTOOLS: Journal of Graphics Tools, 2, 1997.
SHEVTSOV, M.; SOUPIKOV, A. ; KAPUSTIN, A. Highly parallel fast kd-tree construction for interactive ray tracing of dynamic scenes. Comput. Graph. Forum, 26(3):395-404, 2007.
WALD, I.; PURCELL, T. J.; SCHMITTLER, J.; BENTHIN, C. ; SLUSALLEK, P. Realtime Ray Tracing and its use for Interactive Global Illumination. In: Eurographics State of the Art Reports, 2003.
WALD, I.; IZE, T.; KENSLER, A.; KNOLL, A. ; PARKER, S. G. Ray Tracing Animated Scenes using Coherent Grid Traversal. ACM Transactions on Graphics, p. 485-493, 2006. (Proceedings of ACM SIGGRAPH 2006).
WALD, I.; BOULOS, S. ; SHIRLEY, P. Ray Tracing Deformable Scenes using Dynamic Bounding Volume Hierarchies. ACM Transactions on Graphics, 26(1), 2007.
ZHOU, K.; HOU, Q.; WANG, R. ; GUO, B. Real-time kd-tree construction on graphics hardware. In: SIGGRAPH ASIA '08: ACM SIGGRAPH ASIA 2008 PAPERS, p. 1-11, New York, NY, USA, 2008. ACM.