Página Inicial

  Motivação

  Metodologia

  Resultados

  Download

  Links

 

Primeiramente serão apresentados os fundamentos teóricos e o trabalho original que serviu como base para a implementação do método de splatting utilizado.

Em seguida será descrita a forma obtenção da malha que forma o modelo a ser visualizado.

Será, então, apresentado como foi implementada a renderização do modelo original utilizando o próprio pipeline do OpenGL.

Posteriormente será demonstrado como foram gerados os splats, para, em seguida, ser apresentada a metodologia utilizada na técnica de splatting, para a renderização baseada em pontos.

 

FUNDAMENTOS

Em 1985, Marc Levoy e T. Whitted. [1], sugeriram uma abordagem para a visualização de modelos 3D através de uma visão que se baseava em pontos como sua primitiva universal, ao invés do uso de outras primitivas geométricas comumente utilizadas.

Muitos trabalhos sobre o tema vieram posteriormente, incluindo a contribuição de Zwicker et al, com a apresentação do conceito de Surfels [2], elementos de superfície que aproximam a superfície do objeto modelado, com atributos próprios e sem necessidade de informação topológica associada.

Posteriormente Zwicker, apresentou a técnica de Surface Splatting [3], utilizando um filtro EWA (Elliptical Wighted Avarage), proposto no técnica de reamostragem de textura de Heckbert [4], para a reamostragem dos valores para pixels na tela.

No Surface Splatting, splats são definidos como pontos do modelo, com uma normal e um raio associados, onde é aplicada uma função base Gaussiana radialmente simétrica, que quando projetada no plano na tela resulta em uma elipse. O objetivo da aplicação da função base Gaussiana é representar a influência do ponto conhecido ao longo da extensão do disco que representa um splat. É realizado, então, o produto de convolução entre a elipse obtida e um filtro Gaussiano de passa-baixas, gerando o filtro de reamostragem, cujas contribuições são acumuladas no espaço de tela. Este filtro de reamostragem permite que pontos originados pela função base, sejam amostrados para espaço da tela, baseando-se na fundamentação teórica da reconstrução de sinais, respeitando a freqüencia de Nyquist, para garantir a reamostragem mínima sem a ocorrência de perda de informação para a imagem final.

Jussi Räsänen, em sua tese de mestrado [5], revisou a abordagem apresentada por Zwicker, e implementou algumas alterações e melhorias, como a introdução de uma abordagem estocástica para a amostragem além da abordagem analítica inicialmente proposta, visando reduzir o tempo de processamento necessário neste passo, e tendo como contrapartida uma redução na qualidade do resultado final. Foi também introduzida uma alternativa para o problema do threshold definido pelo usuário e introduzido o uso de shading por splat, ao invés da técnica de deferred shading proposta originalmente.

O presente trabalho visa implementar a visualização de modelos baseados pontos, mostrando passos intermediários do processo, com o objetivo de ilustrar o conceito básico aplicado, no caso o uso da técnica de Surface Splatting proposta por Zwicker e revisada por Jussi Räsänen. Este trabalho implementa, entretanto, a abordagem analítica inicialmente proposta, no lugar nova abordagem estocástica introduzida por Jussi Räsänen.

Detalhes das técnicas utilizadas serão apresentados mais adiante.

 

OBTENÇÃO DO MODELO 3D

O modelo a ser visualizado pelo sistema deve estar em arquivos de extensão lwo (LightWave 3D Object), formato proprietário do software LightWave 3D, utilizado em jogos e aplicações 3D diversas.

Para ser compreendido pelo sistema o arquivo deve conter apenas malhas de triângulos, para representar a superfície do objeto em questão.

O sistema pode ser chamado passando como parâmetro o arquivo lwo desejado, porém, sempre são oferecidas as opções de visualização dos dois modelos disponibilizados junto como o sistema, a saber:

sphere.lwo Modelo de uma espera, formada por 5.120 triângulos.
venus.lwo Modelo da Vênus, com um total de 90.688 triângulos.

Como default é sempre lido o modelo sphere.lwo.

 

RENDERIZAÇÃO UTILIZANDO O PIPELINE DO OPENGL

Uma vez carregado o modelo, podemos utilizar seus triângulos lidos para a geração da renderização com o pipeline convencional do OpenGL.

As etapas de visualização que utilizam o pipeline do OpenGL, incluem a renderização inicial da malha de triângulos, a renderização dos pontos referentes às posições dos splats, a renderização dos pontos com as respectivas normais desenhadas, o desenho dos discos como representação dos splats em tamanho reduzido e o desenho dos círculos, representando os splats em seu tamanho final.

Para todas as etapas descritas acima, foi utilzada uma fonte de iluminação, com componentes difusa e ambiente iguais e posicionadas sempre à frente do objeto apresentado.

A malha, na primeira renderizção, foi desenhada com a primitiva GL_TRIANGLES, e após visualizada pode ser rotacionada para direita e esquerda, bem como aproximada ou afastada, utilizando para isso as quatro teclas de direção, no teclado.

 

GERAÇÃO DOS SPLATS

Após lida do arquivo e visualizada a malha refente ao modelo original, passo 1 no sistema, vamos então para o passo 2, onde são gerados os splats para a malha em questão, que servirão de base para o método de splatting, examinado em outro tópico.

Apesar de a geração dos splats, com todas as suas propriedades, ser realizada em um único momento, o sistema visualiza este processo graficamente em 3 etapas, descritas a seguir:

PASSO 2a: São definidas como posições para os splats, as posições originais dos vértices que formam a malha de entrada. Estas posições são visualizadas como pontos na tela.

PASSO 2b: São definidas como as normais dos splats, as normais dos dos vértices da malha, sendo estas visualizadas como segmentos de reta na tela, partindo dos pontos originais calculados.

PASSO 2c: São definidos os tamanhos dos splats, calculando-se para isso a distância máxima entre cada splat e seus vizinhos. O sistema apresenta este dado em duas passagens. Primeiro mostra os splats como discos com o tamanho de 1/3 do tamanho efetivamente calculado para cada splat visando apresentar os splats sem intersecções e seu comportamento na superfície. Em seguida os splats são mostrados como círculos em seu tamanho final, permitindo a visualização das sobreposições e seu papel na cobertura da superfície a ser apresentada.

 

RENDERIZAÇÃO UTILIZANDO O MÉTODO DE SPLATTING

Na implementação do método de splatting, primeiramente é aplicado o back-face culling, utilizado para descartar os splats cujas faces não estão direcionadas para o observador.

Em seguida, a etapa de transformação gera os splats nas coordenadas do objeto e, então, efetua a transformação para coordenadas da câmera. A transformação é feita de forma análoga a que o próprio OpenGL utiliza, e não será apresentada neste resumo teórico.

Logo em seguida é efetuado um frustum culling, onde os splats que estão situados fora do campos de visão do frustum são eliminados. Para isso, cada plano, se voltado para o observador, é validado em relação aos seis planos que compõem o frustum, utilizando um algoritmo de intersecção entre planos e cônicas.

Após o frustum culling, realizamos o splat setup, gerando a matriz de mapeamento inverso da tela para o plano de splats, calculando a aproximação afim do mapeamento projetivo da Gaussiana, construindo o filtro de reamostragem e calculando a interpolação de profundidades.

O próximo passo é processo de iluminação. Apesar de Zwicker utilizar originalmente deferred shading, em seu trabalho, Jussi Räsänen propôs a utilização de uma abordagem de iluminação por splat, que é potencialmente mais rápido que o deferred shading, embora resultado possa parecer borrado, caso os splats estejam grandes na imagem. A iluminação é, então, seguida pela rasterização, encerrando a primeira passada no método de splatting analítico implementado.

A segunda passada é composta pela reconstrução da superfície. Zwicker utiliza em seu algoritmo a abordagem z-threshold para a reconstrução de superfície, onde dois fragmentos são considerados pertencendo a mesma superfície se eles estão mais próximos um do outro do que uma constante previamente especificada.

Jussi Räsänen propõem, por sua vez, a utilização da abordagem de comparação de z-ranges, que foi utilizada na implementação do sistema, onde são combinados fragmentos que pertencem a splats que se sobrepõem. Esta abordagem evita parâmetros definidos pelo desenvolvedor ou usuário.

Com a recostrução da superfície é encerrado o algoritmo analítico de splatting implementado neste trabalho, que compõe a última etapa da visualização no sistema.

Abaixo apresento a seqüência de passos utilizados na implementação da técnica de Surface Splatting no sistema, com links para o trecho correspondente no código fonte:

  1. São criados os splats em coordenadas do objeto (implementação).
  2. São definidos os referentes à câmera e iluminação (implementação).
  3. São calculadas as matrizes de transformação necessárias ao processo (tela para objeto, objeto para tela, câmera para objeto e objeto para câmera) (implementação).
  4. São calculados os planos de corte, baseados no frustum defindo (implementação).
  5. Para cada splat é feito o back face culling da seguinte forma:
    O splat está voltado para a câmera se: , onde é a normal do splat, sua posição e a posição do observador. Caso o splat não esteja voltado para a câmera é ignorado no processo (implementação).
  6. É calculada a matriz cônica (implementação).
  7. Os vetores tangentes e o centro dos splats são transformados para coordenadas de tela (implementação).
  8. É feito o viewport culling utilizando os planos de corte calculados e os splats transformados (implementação).
  9. É calculada a matriz de transformação do plano da tela para o plano do splat. Se a matriz é singular o splat é descartado (implementação).
  10. É calculada a aproximação afim do mapeamento projetivo da Gaussiana (implementação).
  11. É calculado o filtro de reamostragem (implementação).
  12. Calcula o zmin, zmax e o gradiente de profundidade (implementação).
  13. Calcula a iluminação difusa e especular de cada splat (implementação).
  14. É efetuada a rasterização, acumulando em um abuffer as contribuições ponderadas para cada fragmento (implementação).
  15. É gerado o frame buffer a partir do conteúdo do abuffer (implementação).
  16. É criada uma textura a partir do buffer gerado (implementação).
  17. É desenhado um retângulo na área de visualização (a partir de um triangle fan) mapeando nele a textura gerada pelo processo de Surface Splatting (implementação).

BIBLIOGRAFIA

[1] M. Levoy e T. Whitted. The Use of Points as Display Primitives. Technical Report TR 85-022, The University of North Carolina at Chapel Hill, Department of Computer Science, 1985.

[2] Hanspeter Pfister, Matthias Zwicker, Jeroen van Baar, e Markus Gross. Surfels: Surface Elements as Rendering Primitives. Em Computer Graphics, SIGGRAPH 2000 Proceedings, páginas 335–342. Los Angeles, CA, 2000.

[3] Matthias Zwicker, Hanspeter Pfister, Jeroen van Baar, e Markus Gross. Surface splatting. Em Proceedings of ACM SIGGRAPH 2001, Computer Graphics Proceedings, Annual Conference Series, pages 371–378. ACM Press / ACM SIGGRAPH, August 2001.

[4] P. Heckbert. Fundamentals of Texture Mapping and Image Warping. Tese de Mestrado, University of California at Berkeley, Department of Electrical Engineering and Computer Science, 1989.

[5] Jussi Räsänen. Surface Splatting: Theory, Extensions and Implementation. Tese de Mestrado, Helsinki University of Technology, Department of Computer Science, 2002.

Próximo: [Resultados]

[topo]