Traçado de Raios de Cenas Dinâmicas na GPU Autor: Paulo Ivson Netto Santos Orientador: Waldemar...

Post on 17-Apr-2015

102 views 0 download

Transcript of Traçado de Raios de Cenas Dinâmicas na GPU Autor: Paulo Ivson Netto Santos Orientador: Waldemar...

Traçado de Raios de Cenas Dinâmicas na GPU

Autor: Paulo Ivson Netto SantosOrientador: Waldemar Celes Filho

23 de Março de 2009

psantos@tecgraf.puc-rio.br

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.