Traçado de Raios para Superfícies de Convolução

Trabalho final do curso de I3D/2000

Nosso trabalho foi implementar a técnica de traçado de raios para superfícies de convolução descrita no artigo "Creating and Rendering Convolution Surfaces", de Jon McCormack e Andrei Sherstyuk [1]. Para maior clareza, vamos inicialmente definir o que é uma superfície de convolução e em seguida descrever como o traçado de raios pode ser usado para sua visualização.

Superfícies de Convolução

Superfícies de convolução podem ser pensadas como uma generalização das superfícies construídas com blobs (bolhas). Blobs são funções do tipo f(x)=K(||x-p||), onde p é o centro do blob e K é uma função real, geralmente simétrica e unimodal (ex.: uma gaussiana), chamada kernel do blob, que determina como os blobs "grudam-se" uns aos outros. Objetos podem ser modelados tomando-se uma isosuperfície da função

Conv.h1.jpg (1984 bytes)

ou seja, f é uma soma finita de blobs centrados nos pontos pi. Se imaginarmos que temos não um número finito, mas um continuum de pontos distribuídos sobre uma curva C=p([0,1]), o somatório acima "transforma-se" na integral

Conv.h2.jpg (2217 bytes)

Devido a semelhança dessa integral com a definição de convolução de funções, podemos escrever

Conv.h3.jpg (1520 bytes)

Finalmente, uma superfície de convolução é uma isosuperfície da função f acima. Superfícies de convolução foram introduzidas na Computação Gráfica por Jules Bloomenthal e Ken Shoemake [2].

Aproximação polinomial por partes

Como Sherstyuk demonstrou em [3], dependendo da curva C e do kernel K, é possível encontrar uma expressão analítica explícita para a função f. Mas devido a complexidade dessa expressão, mesmo para curvas simples tais como segmentos de reta e arcos de circunferência, os métodos clássicos para o cálculo da interseção de um raio r com a superfície de convolução são muito caros. A alternativa encontrada foi aproximar a restrição de f a r por uma função cúbica por partes, utilizando os chamados polinômios de Hermite. Essa aproximação leva em conta a derivada de f , sendo portanto de boa qualidade ( apesar da expressão analítica do gradiente de f  ser ainda mais complicada que a de f ). Também por questões de eficiência, leva-se em conta somente a restrição de f a um volume limitante que depende de C. O volume limitante do segmento, por exemplo, pode ser obtido através de operações CSG sobre um cilindro e duas esferas.

Implementação

Implementamos um traçador de raios estocástico simples em C, utilizando a biblioteca do curso de I3D, a qual acrescentamos as primitivas CSG torus, cylinder e hemi_space, as primitivas de animação motor_linear e oscilator, as primitivas de superfícies de convolução blend_point, blend_line e blend_arc ( usando apenas o kernel de Cauchy quadrático, o que não representa uma grande restrição) e  a primitiva blend_group, para permitir hieraquias. Para encontrar a interseção do raio com a superfície, desenvolvemos um algoritmo "preguiçoso" que avalia a função f e calcula os polinômios interpoladores apenas quando é necessário. Vale ainda ressaltar que o Mathematica, especialmente o pacote  para otimização de expressões Optimize.m de Mark Sofroniou, foi muito útil ao derivar as expressões do gradiente de f. A interface foi construída com o GTK, basicamente porque a biblioteca gp suporta apenas 256 cores.

Arquivo i3d.tgz

Resultados

Fig. 1 - Dois segmentos, com interpolação de cor.[codigo fonte]

Fig. 2 - Um arco, um segmento e dois blobs refratários.[codigo fonte]

Fig. 3 - Seis arcos e um blob.[codigo fonte]

i3d.jpg (25297 bytes)

Fig. 4 - I3D. Note o ruído proveniente do traçado de raios estocástico.[codigo fonte]

i3d_bound.jpg (6622 bytes)

Fig. 5 - Volumes limitantes do modelo anterior.

Fig. 6 - Espiral logarítmica de blobs. Clique para ver a animação.[codigo fonte]

Fig. 7 - Espiral logarítmica de segmentos. Clique para ver a animação.[codigo fonte]

Referências

[1]  McCormack J. and Sherstyuk A., "Creating and Rendering Convolution Surfaces", Computer Graphics Forum, 17(2) 1998.

[2]  Bloomenthal J. and Shoemake K., "Convolution Surfaces", SIGGRAPH Proceedings, Vol.25, No.4, July 1991, pp. 251-256.

[3]  Sherstyuk A., "Convolution Surfaces in Computer Graphics", Ph.D. dissertation, School of Computer Science and Software Engineering, Monash University, Australia.

Links

Home page de Andrei Sherstyuk