Visualização Interativa de Modelos Massivos de Engenharia na...

47
Visualização Interativa de Modelos Massivos de Engenharia na Indústria de Petróleo com o Algoritmo de Voxels Distantes Gustavo Wagner Marcelo Gattass Alberto Raposo

Transcript of Visualização Interativa de Modelos Massivos de Engenharia na...

Visualização Interativa de Modelos Massivos de Engenharia na Indústria de Petróleo com

o Algoritmo de Voxels Distantes

Gustavo WagnerMarcelo GattassAlberto Raposo

Desafio

P-50 (modelada no 3dsmax)1.2 milhões de triângulos

5 mil objetos

P-40 (modelada no 3dsmax)300 mil triângulos

2.3 mil objetos

P-50 (modelo de engenharia)30 milhões de triângulos1.2 milhões de objetos

P-40 (modelo de engenharia)22 milhões de triângulos

500 mil objetos

Desafio• Modelos de engenharia

• Muitos objetos• Alta complexidade geométrica

• P-50• 30 milhões de triângulos• 1.2 milhões de objetos

• Boeing 777• 350 milhões de triângulos

Desafio• Impossível manter os maiores modelos

por inteiro na memória principal• A memória da placa gráfica tem

capacidade ainda menor• Enviar toda a geometria para a placa é

muito ineficiente• Vértices demais para transformar• Muitas superfícies ocultas sendo

redesenhadas• Não é viável remover os detalhes do

modelo• Muitas vezes, estes são o objetivo da

visualização

Soluções• LOD

• Objetos que ocupam uma pequena menor na tela podem ser representados de forma simplificada sem grandes perdas de informação visual

• Técnicas de LOD já são estudadas a vários anos

• Mas se especializaram em simplificar um único objeto extremamente tesselado

Introduzir os Voxels Distantes• ...

HLOD com Voxels Distantes• Diferentes níveis de resolução estruturados em

uma hierarquia de níveis de detalhe (HLODs)• A raiz, que contém todo o modelo se subdivide

para formar nós mais detalhados• Nas folhas: geometria original do modelo• Nos outros nós: representações simplificadas usando

voxels

Nó raiz(Voxels)

100% do modelo

Nó intermediário(Voxels)

50% do modelo

Nó folha(Triângulos) 25% do modelo

Nó folha(Triângulos) 25% do modelo

Nó folha(Triângulos) 25% do modelo

Nó folha(Triângulos) 25% do modelo

Nó intermediário(Voxels)

50% do modelo

Geração da hierarquia•A hierarquia é gerada pela subdivisão sucessiva do modelo usando uma octree até que cada nó tenha um número máximo pré-definido de faces•Em alguns casos, é interessante deixar de dividir um nó em uma das direções para gerar nós com formas mais próximas às de um cubo *

Geração da hierarquia•A hierarquia é gerada pela subdivisão sucessiva do modelo usando uma octree até que cada nó tenha um número máximo pré-definido de faces•Em alguns casos, é interessante deixar de dividir um nó em uma das direções para gerar nós com formas mais próximas às de um cubo *

menormaior LL 2

maiorL

menorL

2maior

menor

menor

maior

LL

LL

22 2 menormaior LL

Disposição dos Voxels Distantes• Os voxels são dispostos numa grade 3D regular• Idealmente, cada voxel deve ocupar um pixel

quando projetado na tela• Essa condição só é violada quando:

• O carregamento em segundo plano atrasa• O usuário configura a aplicação para usar voxels de

tamanho maior

Voxels Distantes para superfícies planas• Voxels para superfícies planas (ou quase planas)

• Podem ser codificados com apenas uma cor difusa e uma normal (duas cores, caso a face oposta também seja visível)

• A cor e a normal do voxel é a média das cores e normais das superfícies visíveis contidas dentro dele

T

Voxels para superfícies complexas• Nem todas as superfícies são bem comportadas

• Alguns voxels podem ter normais ou cores que variem com a direção de visualização

• Para representá-los, usamos voxels que permitem cores e normais independentes para cada uma das 6 direções principais de visualização (±x, ±y, ±z)

• Quando vistos de direções intermediárias, esses dados são interpolados

(a) (b) (c)

Geração dos voxels - Traçado de raios (1)• Os voxels são gerados a partir de uma análise do modelo

CAD em pré-processamento• Cada voxel representa as superfícies visíveis contidas

dentro dele• As superfícies visíveis são determinadas por um algoritmo

de traçado de raios• Sem o traçado de raios, superfícies ocultas contribuiriam para

a formação da cor final do voxel

Geração dos voxels - Traçado de raios (2)• Para cada grade de voxels V a ser gerada, são traçados raios a

partir de uma superfície S afastada dmin de V• dmin é calculado como sendo a distância mínima que a câmera

estará de V durante a visualização• Apenas as superfícies que forem atingidas por raios serão

representadas• Superfícies internas, que nunca fiquem visíveis nessa

representação, não são representadas• Essa técnica é denominada “Oclusão ambiental” e conseguiu eliminar

57% dos voxels no nosso modelo mais pesado• Para aumentar ainda mais a eficiência dessa técnica, todas as

superfícies fora de V mas dentro de S são usadas no cálculo de oclusão

S

V

dmin

Percurso da cena• Durante a renderização, o visualizador deve

decidir se deve usar a representação existente em cada nó ou se deve continuar o percurso procurando nós mais detalhados

• Essa decisão é baseada no tamanho do voxel projetado na tela• Nós fora da pirâmide de visão são descartados sempre

que encontrados

Voxels

Voxels Voxels

Voxels Voxels Voxels Voxels

Triângulos Triângulos Triângulos Triângulos Triângulos Triângulos Triângulos Triângulos

Os voxels desse nó,quando projetados natela, são maiores que1 pixel?

Voxels

Voxels Voxels

Voxels Voxels Voxels

Paginação de dados• Durante o percurso, serão encontrados alguns

nós que ainda não estão carregados• Nesse momento, visualizador envia um pedido ao

carregador de dados, que está rodando em outra thread• Enquanto esse dado não é carregado, a

representação do pai terá que ser usada, mesmo estando com voxels maiores que um pixel• O tamanho projetado dos voxels do pai define a

prioridade com que os nós devem ser carregados

Testes de oclusão em hardware (1)• Testes de oclusão em hardware podem evitar que

partes invisíveis do modelo sejam desenhadas• Basta fazer uma consulta usando a caixa

envolvente dessa parte antes de desenhá-la• Isso exige que os objetos sejam desenhados do mais

próximo da câmera ao mais distante• Durante o percurso da cena, basta visitar os filhos de

cada nó por ordem de proximidade

Testes de oclusão em hardware (2)• Renderização em 2 etapas:

1. São renderizados todos os nós (de geometria ou de voxels)• Se ele estava visível no quadro anterior, renderizá-lo

normalmente, emitindo um teste de oclusão• Se ele estava invisível no quadro anterior, renderizar apenas a

sua caixa envolvente, também com teste de oclusão2. Os resultados dos testes são recolhidos

• Os resultados dos testes realizados na etapa anterior são recolhidos e guardados para serem usados no quadro seguinte

• Todos os nós que tiverem sido determinados como visíveis e ainda não tiverem sido desenhados, devem ser desenhados nesse momento

Testes de oclusão em hardware (2)• Renderização em 2 etapas:

1. São renderizados todos os nós (de geometria ou de voxels)• Se ele estava visível no quadro anterior, renderizá-lo

normalmente, emitindo um teste de oclusão• Se ele estava invisível no quadro anterior, renderizar apenas a

sua caixa envolvente, também com teste de oclusão2. Os resultados dos testes são recolhidos

• Os resultados dos testes realizados na etapa anterior são recolhidos e guardados para serem usados no quadro seguinte

• Todos os nós que tiverem sido determinados como visíveis e ainda não tiverem sido desenhados, devem ser desenhados nesse momento

Geração de VertexBufferObjects• VertexBufferObjects permitem que a

geometria renderizada não precise ser enviada à placa gráfica a cada quadro

• Um problema:• É necessário alocar a memória a ser usada na

placa gráfica na hora de criá-los• Sempre que não houver memória, devemos

enviar os dados da forma tradicional• Até que a memória necessária seja liberada

Voxels com filtro de anti-serrilhamento• Um defeito encontrado na técnica de

voxels é que objetos muito menores que um voxel acabam sendo “inchados” quando representados por estes

Voxels com filtro de anti-serrilhamento• O mesmo ocorre no modelo do

Boeing, mas nele existem poucos objetos desse tipo visíveis

...

Voxels com filtro de anti-serrilhamento• O mesmo ocorre no modelo do

Boeing, mas nele existem poucos objetos desse tipo visíveis

...

Voxels com filtro de anti-serrilhamento• O mesmo ocorre no modelo do

Boeing, mas nele existem poucos objetos desse tipo visíveis

...

Voxels com filtro de anti-serrilhamento• Solução: simular o anti-serrilhamento das

placas gráficas tornando os voxels com pequenos objetos semi-transparentes

• A transparência de cada voxel é definida pela visibilidade calculada durante o traçado de raios

• Se muitos raios atravessam um voxel sem atingir nenhuma superfície dentro dele, ele é um forte candidato a voxel que contém um objeto muito pequeno

Voxels com filtro de anti-serrilhamento• Numa situação ideal, teríamos:

• Para cada possível direção a percentagem de raios que atingiram superfícies dentro do voxel e que passaram através dele

• Essa percentagem corresponde à opacidade daquele voxel quando visto daquela direção

• Mas, é inviável guardar toda essa informação em memória de vídeo• Temos que aproximar o resultado

Voxels com filtro de anti-serrilhamento• A transparência do voxel pode ser aproximada com um

valor para todas as direções de onde ele é visualizado• Para voxels que tenham uma transparência semelhante

quando vistos das várias direções• Ou pode ser aproximada por 6 valores armazenados para

as 6 direções alinhadas com os eixos (±x, ±y, ±z)• Quando vistos de direções que não são alinhadas, a

transparência é interpolada• Representação semelhante à dos voxels com múltiplas

cores/normais• É necessário cuidado antes de tornar um voxel

transparente• Partes de objetos grandes também podem ficar transparentes

Voxels com filtro de anti-serrilhamento• No OpenGL, objetos transparentes devem ser

renderizados:• Após toda a geometria opaca• Do mais distante ao mais próximo

• Não queremos ter que ordenar os voxels transparentes a cada quadro• Evitar operações que manipulem dados por primitiva

• Solução:• Podemos renderizar os voxels transparentes após todos

os voxels opacos terem sido renderizados• Como eles são pouco numerosos e estão bem espalhados,

quase não notamos as falhas causadas• Apenas quanto tempos muitos voxels transparentes

próximos uns dos outros• Para reduzir o efeito causado, podemos reordenar os

voxels transparentes de forma aleatória • Mesmo que ocorram falhas por causa da ordenação, ela não

vai tornar todos os voxels de um grupo transparentes

Voxels com filtro de anti-serrilhamento

(anti-serrilhamento sem randomização de voxels)

(anti-serrilhamento com randomização de voxels)

Voxels com filtro de anti-serrilhamento

Testes de Desempenho•Os testes foram realizados num computador com a seguinte configuação:

•Processador: Athlon X2 64 4200+•Memória: 4 GB•Placa 3D: nVidia GeForce 8800 GTX (768 MB)

Modelo Faces Vértices

P-38 8 milhões 10 milhões

P-40 22 milhões 19 milhões

P-50 30 milhões 38 milhões

Testes de Desempenho – P-38

Testes de Desempenho – P-38• Com o desenho desabilitado, houve

ganho de performance• Isso indica que a CPU não estava

limitando o desempenho

Testes de Desempenho – P-38• Com a iluminação desabilitada (tanto

nos voxels quanto na geometria), houve ganho de desempenho• O estágio de vértices está limitando o

desempenho

Testes de Desempenho – P-38• Com o anti-serrilhamento em

hardware desabilitado, não houve ganho de desempenho• O gargalo não está na rasterização

Testes de Desempenho – P-40

Testes de Desempenho – P-40• Com o desenho desabilitado, houve

ganho de performance• Isso indica que a CPU não estava

limitando o desempenho

Testes de Desempenho – P-40• Com a iluminação desabilitada (tanto

nos voxels quanto na geometria), houve ganho de desempenho• O estágio de vértices está limitando o

desempenho

Testes de Desempenho – P-40• Com o anti-serrilhamento em hardware

desabilitado, houve bastante ganho de desempenho• O gargalo está na rasterização

• (além de estar na transformação de vértices, como visto no slide anterior)

Testes de Desempenho – P-50

Testes de Desempenho – P-50• Na maior parte da navegação, houve ganho ao

desabilitarmos o desenho• O desempenho não estava limitado pela CPU

• Entre os instantes 80 e 105, não houve ganho de desempenho com o desenho desabilitado• Nesses instantes, a CPU estava limitando o

desempenho

Testes de Desempenho – P-50• Não houve ganho de desempenho

com o anti-serrilhamento em hardware desabilitado• A rasterização não é o gargalo

Testes de Desempenho – P-50• O teste realizado com a iluminação desabilitada o gargalo na CPU

entre os tempos 80 e 105• Nesse trecho, não houve ganho de desempenho ao diminuirmos a

carga na etapa de transformação de vértices• Entre os instantes 30 e 55 temos um resultado inesperado:

• O visualizador não está limitado pela CPU• O visualizador não está limitado pelo estágio de vértices• O visualizador não está limitado pela rasterização

• Isso pode indicar que o desempenho está sendo limitado por alguma operação que não foi medida nesses testes

• Por exemplo: A transferência de geometria recém carregada para a placa gráfica

Testes de Desempenho – Voxels Anti-serrilhados

• A perda de desempenho com o uso do anti-serrilhamento de voxels foi pequena• Esses voxels são pouco numerosos• Não foi criado um aumento significativo no

processamento em CPU necessário para tratá-los

Testes de Desempenho – Múltiplas P-50s

Testes de Desempenho – Múltiplos Modelos

Conclusões e Trabalhos Futuros• O visualizador desenvolvido contribuiu

para melhorar o desempenho nos modelos que precisamos visualizar

• Ainda há o que melhorar• Diminuir o uso de CPU durante o percurso da

cena para evitar que ela se torne um gargalo• Procurar formas de representar os dados

enviados à GPU usando menos memória• Facilita a transferência• Permite colocar mais dados na GPU

• Melhorar a representação de voxels para reduzir ainda menos os defeitos visuais

• Ou procurar uma representação alternativa