Hardware assisted
rendering of csg models
Fabiano Segadaes Romeiro
Orientadores: Luiz Velho
Luiz Henrique de Figueiredo
Motivação
► CSG:
Modelagem
hierárquica de objetos
complexos
► Objetos gerados por
combinações
booleanas de
primitivos simples
Motivação
► Interatividade
importante:
é
 Facilita o processo de
design do objeto
 Permite visualização por
vários angulos.
► Porém
é difícil:
escalabilidade.
Abordagens anteriores
► Boundary
representations
► Depth-layering (Goldfeather)
► Recentemente: algoritmos que usam os
recursos da GPU (Wiegand, Rappoport,
Stewart, Guha, etc)
► Blist, Depth-peeling (Hable)
Abordagens anteriores
► Abordagens
mais recentes usando GPU são
bandwith limited
► Depth-peeling e depth-layering usam o
stencil buffer – limitação no número de
primitivos
Abordagem
► Superfícies
de objetos
CSG tem
representação local
simples
► Exceções são pontos
pertencentes a
interseção de
superfícies de 3 ou
mais primitivos
Abordagem
►
Dividir espacialmente o
objeto até que:
 Em cada célula a
representação seja simples
 Ou a célula corresponda a
menos de um determinado
número de pixels
►
Renderizar cada célula na
GPU por traçado de raios
Subdivisão Espacial
► Octree
é usada para obter células com
representação local simples
► Célula inicial: bounding box do objeto
► Cada célula da octree mantém a
representação local simplificada da restrição
do objeto à célula em questão
Subdivisão Espacial
► Subdivisão
em uma
dada célula pára
quando:
 Representação local é
simples o suficiente
 Célula não contém
superfície do objeto csg
 Célula ocupa menos de
determinado número de
pixels na tela
Subdivisão Espacial – Obtenção da
representação local simplificada
► Procedimento
recursivo simplifica a
representação em cada célula usando a
representação simplificada de sua célula pai
como ponto de partida
Subdivisão Espacial – Obtenção da
representação local simplificada
► Procedimento
testa interseção da célula
com primitivos na representação local
associada a ela.
► Seguindo uma série de regras de redução a
representação é simplificada.
Subdivisão Espacial
► Após
construída a octree ela é percorrida de
maneira front-to-back.
► Cada célula cuja representação simplificada
é não-nula e não contém mais de 3
primitivos tem o objeto csg formado pela
sua representação simplificada renderizada
na GPU
Traçado de raios na GPU
► Existem
diversas abordagens recentes para
o traçado de raios na GPU
► Extensão do traçado de raios de primitivos
de Toledo et al para traçado de raios de
operações booleanas entre dois primitivos
Traçado de raios na GPU - primitivos
► Bounding
box do primitivo é renderizada e vertex e
pixel shaders apropriados são carregados
► Em cada pixel das faces das bounding boxes o pixel
shader determina se o raio partindo da camera até
o pixel em questão intersecta ou não o primitivo.
► Caso afirmativo o cálculo do shading é realizado
Traçado de raios na GPU - primitivos
► Para
renderizar a restrição de primitivos a
uma determinada célula:
 Renderizada a restrição do bounding box do
primitivo à célula e para cada pixel
 Segmentos do raio que intersectam o primitivo
e a célula são intersectados para obter o
segmento determinante
 Dependendo do segmento resultante o pixel é
descartado ou renderizado após sua cor ser
calculada.
Traçado de raios na GPU –
operações booleanas de primitivos
► Modificações
primitivos:




em cima do algoritmo para
Complemento
Interseção
Diferença
União
Modelagem e visualização interativa
► Importante:
CAD e engenharia de partes
Modelagem e visualização interativa
►A
medida que o objeto CSG é visualizado
podem ocorrer:
► Mudanças de iluminação
► Mudanças no objeto CSG
► Mudanças na localização/direção da camera
Modelagem e visualização interativa
► No
caso em que o objeto se altera:
 Somente é necessário recalcular a octree nas partes em
que o objeto se alterou
 Renderizar novamente somente estas partes.
► Otimização:
verificar se células estão oclusas antes
de renderiza-las
► Dificuldade: realizar um occlusion query pode não
compensar tendo em vista que o mesmo introduz
stalls no pipeline da GPU. SOLUÇÃO: abordagem
hierarquica
Resultados
► Testes
realizados com objetos
representativos do uso comum de CSG
► Enfoque dado a performance da operação
mais complexa (diferença)
► Verificação de corretude - realizadas
comparações com o povray
► Escalabilidade testada usando-se modelos
de crescente complexidade
Resultados
Resultados
Resultados
► Performance
mostrou-se, como esperado,
dependente de dois fatores:
 Complexidade de profundidade
 Área ocupada pelo objeto na tela
Resultados – occlusion queries
Resultados – occlusion queries
Resultados – occlusion queries
Resultados – occlusion queries
Resultados – occlusion queries
► Mais
útil em determinados viewpoints
► Maior impacto em GPUs mais lentas
► Nível hierárquico ótimo em que testar para
oclusão varia – processo de otimização que
detecte nível ótimo geraria constante ganho
de performance independente de viewpoint.
Resultados - corretude
Resultados - corretude
Resultados - corretude
Resultados - corretude
► Quase
nenhum artefato visível
► Artefatos existem onde são esperados: nos
pontos pertencentes a superfícies de 3
primitivos diferentes
Conclusões
► Abordagem
mais dependente de instruction
throughput do que bandwidth em modelos
razoavelmente complexos
► Modelos muito complexos começam a ser
limitados pela CPU e pela CPU/GPU
bandwidth
Trabalhos futuros
► Inter-object
shadows
► rocedimento de otimização para occlusion
queries
► Volumetric rendering
► Mais primitivos
Download

ppt - Visgraf