Cálculo Exato de Fatores-de-Forma Entre Áreas Diferencias e Áreas Finitas Utilizando Técnicas de CSG Isaac M. Barreto Creto Vidal Joaquim Bento Cavalcante-Neto Universidade Federal do Ceará, Departamento de Computação Fortaleza, Brazil {barreto, cvidal, joaquim}@lia.ufc.br Abstract Os métodos de Radiosidade estão entre as maiores métodos desenvolvidos para resolver o problema de iluminação global. A medida que esses métodos se desenvolvem, muitos subproblemas surgem da formulação inicial. O cálculo de relacionamentos geométricos entre áreas, chamados fatores-de-forma, é um exemplo. Nesse trabalho nós apresentamos um método que computa o fatorde-forma exato entre uma área diferencial e uma área finita, utilizando técnicas de CSG e de geração de sombras. 1 Introdução O problema de iluminação tem sido um tópico de pesquisa em computação gráfica há muito tempo. A necessidade de mostrar um ambiente realista, iluminado por uma ou mais fontes de luz, existe em várias aplicações. O cálculo e representação da função de iluminação em um ambiente é a solução do problema de iluminação, porém tal solução não é simples de encontrar e não existe, até hoje, um método que calcule a solução exata. A maioria dos modelos de iluminação são categorizados como locais ou globais, com exceção de alguns poucos modelos híbridos. Modelos locais consideram somente a iluminação direta, i.e., somente a energia luminosa proveniente das fontes de luz. O modelo de Phong[11], amplamente utilizado em motores gráficos, é um exemplo de modelo de iluminação global. Modelos globais, por sua vez, também consideram a iluminação indireta, i.e., a energia luminosa refletida pelas superfícies do ambiente. Métodos de Ray-Tracing e Radiosidade são os métodos mais conhecidos de modelos globais. Nosso trabalho é focado em Radiosidade. Para uma introdução à métodos de Ray-Tracing o leitor é direcionado à [7, 15]. O primeiro método de Radiosidade aplicado à computação gráfica foi proposto por Goral et al.[5]. Esse trabalho modela as reflexões difusas da energia luminosa entre superfícies do ambiente usando idéias da teoria de transferência de energia termal radiativa. O conceito de fator-de-forma é um ponto chave nessa teoria e em métodos de Radiosidade. Em resumo, o fator-de-forma entre duas áreas representa a porcentagem de energia que deixa uma área e chega na outra. Esse trabalho apresenta um método para calcular o fatorde-forma exato entre uma área finita e uma área diferencial. Tais fatores-de-forma são usados em métodos de Radiosidade progressiva, que são os métodos mais utilizados hoje em dia devido à sua capacidade de gerar uma solução aproximada nos estágios iniciais. A maioria dos métodos existentes para calcular esse tipo de fator-de-forma são aproximativos, devido à sua dependência em métodos de amostragem de visibilidade, ou exibem problemas de aliasing. O restante do trabalho está organizado da seguinte forma: apresentar uma parte da teoria necessária para entender o método proposto, Seção 2; revisar os métodos existentes para o cálculo desse tipo de fator-de-forma, Seção 3; descrever o método proposto e a implementação do mesmo, Seção 4; comparar o método proposto com os outros métodos existentes, Seção 5; e, apresentar a conclusão, Seção 6. 2 Teoria Base As premissas assumidas nos métodos de radiosidade clássica são: 1) o ambiente é composto somente de superfícies Lambertianas, i.e., refletores e emissores Lambertianos perfeitos; e 2) as superfícies são discretizadas em patches de radiosidade homogênea. Nesse contexto, a radiosidade de um patch é a soma da energia emitida por ele mesmo, caso ele seja um emissor, e a energia refletida de outros patches do ambiente. Portanto, para um ambiente fechado, discretizado em n patches, o seguinte conjunto de equações é gerado para garantir o equilíbrio de energia:
n B i A i = E i A i + ρ i B j F ji A j (1) j=1 onde B i é a radiosidade do patch i, A i é a área do patch i, E i é a energia emitida pelo patch i, ρ i é a reflectividade do patch i e F ji é a porcentagem de energia que deixa o patch j e chega no patch i, chamado de fator-de-forma. O coeficiente F ji é uma função dos relacionamentos geométricos, tais como a distância entre os patches e as suas orientações relativas. Uma vez que o foco desse trabalho é o cálculo dos fatores-de-forma, é apropriado nos aprofundarmos na teoria envolvida. Figura 1. Geometria do cálculo dos fatoresde-forma. Baseado na geometria mostrada na Figura 1, o fator-deforma entre duas áreas diferenciais da i e da j é calculado como: F dai da j = cosθ icosθ j πr 2. (2) Uma vez que métodos de radiosidade clássica operam em interações entre patches, esse fator-de-forma não tem muita utilidade, porém ele pode ser usado para derivar uma nova equação que calcula o fator-de-forma entre uma área diferencial da i e uma área finita A j integrando o fator-deforma entre áreas diferenciais sobre a área de A j : cosθ i cosθ j da j F dai A j = A j πr 2. (3) O método de Radiosidade clássica e outros métodos que operam em interações entre patches necessitam do fator-deforma entre duas áreas finitas, A i and A j. Tal fator-deforma pode ser obtido se integrarmos sobre a área de A i na Equação 3 e tomarmos a média na área. Essa equação é omitida aqui de propósito uma vez que o nosso foco é o cálculo do fator-de-forma entre uma área finita A i e uma área diferencial da j utilizado nos métodos de Radiosidade Progressiva[2]. Para Radiosidade Progressiva, a Equação 1 se torna: B dai = E dai + ρ dai n j=1 B j F j dai A j da i. (4) O fator-de-forma entre uma área finita A j e uma área diferencial da i é necessário para resolver esse conjunto de equações. Fatores-de-forma tem algumas propriedades matemáticas, mas uma delas tem uma importância especial para esse trabalho, a relação de reciprocidade: A i F ij = A j F ji. (5) Usando essa relação a seguinte equação pode ser derivada: da i F j dai = F dai j. (6) A j e substituindo essa relação na Equação 4 nós temos: B dai = E dai + ρ dai n j=1 B j F dai j. (7) A próxima seção descreve os métodos existentes para calcular F dai j e F j dai. 3 Trabalhos Relacionados Em 1985, Cohen et al.[3] apresentaram um método para calcular F dai j. Esse método funciona cercando a área diferencial da i com um semi-cubo discretizado em áreas delta, A, para as quais o fator de forma entre da i e essas A são conhecidos. Então, todos os patches do ambiente são projetados nesse semi-cubo e o fator de forma entre da i e o patch j é dado pela soma dos fatores-de-forma das áreas deltas em que o patch j foi projetado. Esse método sofre de alguns defeitos que o tornam não adequado para alguns cálculos de fator-de-forma. Primeiro, a precisão do fator-de-forma calculado depende do número de delta áreas que o semi-cubo é discretizado. Segundo, existe um problema de aliasing similar aos encontrados em algoritmos de visualização de imagens. E terceiro, o método é adequado para achar os fatores-de-forma entre um da i e todos os patches j, e os métodos de Radiosidade progressiva estão interessados em encontrar todos os fatoresde-forma entre um patch j e todos os vértices do ambiente. Outros métodos similares ao semi-cubo existem[10, 9, 12], porém eles sofrem dos mesmo defeitos que o método do semi-cubo. Baum et al.[1] analizaram os defeitos do algoritmo do semi-cubo e proporam um método alternativo para calcular F dai j. No seu método, o semi-cubo é mantido para a maioria dos cálculos de fator-de-forma e, quando o método falha, é usada uma técnica analítica (veja Figura 2) dada pela fórmula:
Figura 3. Áreas visíveis de j. Figura 2. Geometria do fator-de-forma analítico. F dai A j = 1 N i E k. (8) 2π k k i onde N i é a normal da área diferencial da i, E k é um vetor de magnitude igual ao ângulo γ k e direção dada pelo produto vetorial entre R k e R k+1 e k i é o conjunto de arestas do patch A j. Apesar desse método resolver a maioria dos defeitos do semi-cubo, ele continua sendo útil principalmente para encontrar os fatores-de-forma entre da i e todos os patches j, e, portanto não é muito útil para métodos de Radiosidade progressiva. Algoritmos de amostragem de área calculam o fator-deforma entre uma área finita e uma diferencial F j dai, pegando amostras do patch j e considerando a contribuição de cada amostra para o fator-de-forma total. Ambos Wallace et al.[14] e Wang et al.[8] apresentam um método de amostragem de área para o cálculo do fatorde-forma F j dai. Em [14], o fator-de-forma entre da i e a área amostrada é aproximado pelo fator-de-forma entre da i e um disco, e em [8], o método é aperfeiçoado utilizando um fator-de-forma analítico, como mostrado na Equação 8, sempre que as áreas estão muito próximas. Contudo, ambos os métodos sofrem do mesmo defeito, a precisão da visibilidade. Outros métodos, como o utilizado por Hanrahan et al.[6], simplesmente calculam o fator-de-forma F dai j, sem se preocupar com a visibilidade, e depois multiplicam esse fator-de-forma por um fator de visibilidade entre 0 e 1, an esperança que isso leve a uma boa aproximação. Infelizmente, o fator-de-forma é uma relação geométrica, e os fatores-de-forma entre da i e duas sub-áreas de j com o mesmo tamanha não são iguais na maioria dos casos. 4 Cálculo Exato do Fator-de-Forma O método que propomos consiste em determinar as áreas do patch j que são visíveis de uma área diferencial da i e somar a contribuição dessas áreas para o fator-de-forma total F dai j. As áreas visíveis de j podem ter forma arbitrária e conter buracos, como mostrado na Figura 3. O fator-de-forma entre uma área diferencial da i e uma área finita A j, considerando-se a oclusão de áreas de A j, pode ser calculado como a soma dos fatores-de-forma entre da i e as áreas visíveis de A j menos a soma dos fatoresde-forma entre da i e as áreas oclusas de A j. Portanto, a seguinte equação pode ser usada para calcular o fator-deforma exato F dai A j : F dai A j = v v i F an da i v h h i F an da i h (9) onde v i é o conjunto de áreas visíveis de j, h i é o conjunto de buracos nas áreas visíveis de j e F an é o fator-de-forma analítico calculado usando a Equação 8. Agora, o nosso problema consiste de determinar as áreas visíveis de j. Esse problema é similar à problemas de geração de sombras se da i for considerada uma fonte de luz pontual e o patch j o plano da imagem. De fato, algoritmos de geração de sombras podem ser utilizados para determinar essas áreas, mas nós usamos uma abordagem diferente. Nós usamos técnicas de geração de sombra para projetar os outros patches no plano de j. Depois, usamos operações booleanas CSG aos polígonos projetados e j para determinar as áreas visíveis. 4.1 Detalhes de Implementação Essa seção descreve em detalhes como nosso método é capaz de obter todas as áreas visíveis, v i, de j e seus respectivos buracos oclusos, h i. Primeiro, todos os patches k diferentes de j são projetados no plano de suporte de j. A Figura 4 demonstra tal projeção. Depois que todas as projeções forem feitas, nós
Tabela 1. Estatísticas da Cena 1 Erro Máx Erro Médio Tempo 4 Amostras 0,034366 0,001271 0.36s 16 Amostras 0,007293 0,000330 1.33s 64 Amostras 0,005988 0,000192 4.97s 256 Amostras 0,004542 0,000104 20.26s 1024 Amostras 0,003466 0,000058 80.42s Nosso método 28.14s Figura 4. Projeção do patch k em j. temos uma lista de polígonos planares tridimensionais P k, que, junto à j, estão no mesmo plano. Quando a fase de projeção termina, j e todos os polígonos projetados devem ser convertidos em polígonos bidimensionais. Para isso, nós precisamos de um sistema de coordenadas com uma origem e eixos u, v. Sem perda de generalidade, nós assumimos o primeiro vértice de j, V j0, como sendo a origem desse sistema de coordenadas, e definimos os eixos u e v, respectivamente, como: u = V j0 V j1 (10) v = N j u (11) onde N j é a normal do patch j. Depois da definição do eixo de coordenadas, todos os polígonos P k são convertidos em polígonos bidimensionais P k. Então, todos os polígonos são convertidos em uma representação CSG, usando um esquema como o descrito em [4], o que nos dá um conjunto de polígonos CSG Ψ k. Em seguida, um operador de diferença é aplicado à Ψ j e todos os outros Ψ k. Essas operações retornam um conjunto de polígonos CSG visíveis, Ψ vi, onde cada um pode conter buracos, Ψ hi. O método então procede à conversão desses polígonos de volta à polígonos B-Rep bidimensionsais, utilizando um esquema similar ao apresentado em [13], o que gera dois conjuntos de polígonos B-Rep bidimensionais, P vi e P hi. Finalmente, esses polígonos são convertidos de volta em polígonos planares tridimensionais, v i and h i, que são subconjuntos da área do patch j. Esses conjuntos são usados para calcular o fator-de-forma exato entre da i e j usando a Equação 9. 5 Resultados Experimentais O método descrito aqui, assim como os métodos de comparação, foram implementados em C++ usando OpenGL em um PC com 2.5Ghz Intel Core Duo, 1GByte de memória e uma placa de vídeo ATI Radeon X600XT com 128MByte de memória. Nós testamos nosso método contra um método de amostragem de área avaliando o erro e o tempo necessário para o cálculo dos fatores-de-forma. O algoritmo de amostragem de área usado é similar ao usado por Lee et al.[8], porém o emissor não é amostrado adaptativamente, ao invés disso nós fixamos um número de amostras. Duas cenas simples foram usadas como teste. Essas cenas foram escolhidas para explorar as principais fraquezas de métodos de fatores-deforma: aliasing e falha na detecção de pequenos oclusores. O método de amostragem de área foi testado com diferentes resoluções para comprar a eficiência contra a precisão. Os resultados completos dos testes para ambas as cenas são apresentados nas Tabelas 1 e 2. A primeira cena de teste foi desenvolvida para testar erros de aliasing. Nessa cena nós temos um oclusor diretamente abaixo da fonte de luz, que tem uma área de aproximadamente metade da área da fonte de luz. Também temos um plano simulando um piso onde a luz vai ser refletida. Todos os vértices do piso podem ver parte da fonte de luz, portanto sombras não suaves não devem ocorrer. Nossa segunda cena de teste tem o mesmo plano simulando o piso e fonte de luz da primeira cena, mas o oclusor agora é uma fita muito fina não paralela ao plano do piso. Essa cena testa a habilidade do método de detectar sombras causadas por oclusores muito pequenos. O resultado esperado é que as partes mais altas da fita criem uma sombra mais larga e suave, enquanto as partes mais baixas criam uma sombra fina e bem menos suave. Nós mostramos os resultados renderizados das duas cenas na Figura 5. 6 Conclusão e Trabalhos Futuros Nós apresentamos um método para calcular o fator-deforma exato entre uma área diferencial e uma área finita usando técnicas de geração de sombras e CSG. Os resultados visuais, como mostrados na Seção 5, são precisos, porém o tempo necessário para o cálculo foi alto. O motivo é que no algoritmo atual todos os patches do ambiente estão sendo testados para oclusão, mesmo quando claramente não existe oclusão. Ainda assim, para áreas em que a precisão
Tabela 2. Estatísticas da Cena 2 Erro Máx Erro Médio Tempo 4 Amostras 0,010829 0,000042 0.36s 16 Amostras 0,010836 0,000022 1.50s 64 Amostras 0,010138 0,000009 5.61s 256 Amostras 0,010189 0,000003 23.21s 1024 Amostras 0,010195 0,000001 90.78s Nosso método 25.56s é mais importante do que a performance, por exemplo, ao calcular fatores-de-forma com fontes de luz, o método proposto atua com excelência. Essa foi a primeira tentativa de integrar CSG com Radiosidade. Muitas melhorias podem ser incorporadas à esse método, algumas das quais nós descrevemos a seguir. Como mencionamos antes, não existe a necessidade de se usar o método proposto quando alta precisão não é necessária. Por exemplo, ao calcular os fatores-de-forma entre um vértice e um patch não emissor que não é ocluso, os métodos de amostragem de área vão ter performance superior. Portanto, o desenvolvimento de uma abordagem híbrida irá aumentar a performance do algoritmo significantemente. Se o ambiente for representado por uma árvore BSP, nós só precisamos testar por oclusão os patches que estão entre da i e j. Isso diminui a quantidade de operações booleanas CSG, que são a maior fonte de perda de performance. Nós podemos dimiuir mais ainda o número de patches testados por oclusão se considerarmos somente aqueles que intersectam o volume de sombra criado por da i e j. Técnicas de geração de sombra já implementam essa clipagem de polígonos, e podemos incorporar tais técnicas no nosso método. Concluindo, técnicas de CSG abrem uma vasta área de possibilidades para métodos de Radiosidade, não somente para cálculo de fatores-de-forma como também para a subdivisão adaptativa da malha. Referências [1] D. R. Baum, H. E. Rushmeier, and J. M. Winget. Improving radiosity solutions through the use of analytically determined form-factors. In SIGGRAPH 89: Proceedings of the 16th annual conference on Computer graphics and interactive techniques, pages 325 334, New York, NY, USA, 1989. [2] M. F. Cohen, S. E. Chen, J. R. Wallace, and D. P. Greenberg. A progressive refinement approach to fast radiosity image generation. In SIGGRAPH 88: Proceedings of the 15th annual conference on Computer graphics and interactive techniques, pages 75 84, New York, NY, USA, 1988. [3] M. F. Cohen and D. P. Greenberg. The hemi-cube: a radiosity solution for complex environments. In SIGGRAPH 85: Proceedings of the 12th annual conference on Computer graphics and interactive techniques, pages 31 40, New York, NY, USA, 1985. [4] D. Dobkin, L. Guibas, J. Hershberger, and J. Snoeyink. An efficient algorithm for finding the csg representation of a simple polygon. In SIGGRAPH 88: Proceedings of the 15th annual conference on Computer graphics and interactive techniques, pages 31 40, New York, NY, USA, 1988. [5] C. M. Goral, K. E. Torrance, D. P. Greenberg, and B. Battaile. Modeling the interaction of light between diffuse surfaces. In SIGGRAPH 84: Proceedings of the 11th annual conference on Computer graphics and interactive techniques, pages 213 222, New York, NY, USA, 1984. [6] P. Hanrahan, D. Salzman, and L. Aupperle. A rapid hierarchical radiosity algorithm. In SIGGRAPH 91: Proceedings of the 18th annual conference on Computer graphics and interactive techniques, pages 197 206, New York, NY, USA, 1991. [7] D. S. Kay and D. Greenberg. Transparency for computer synthesized images. In SIGGRAPH 79: Proceedings of the 6th annual conference on Computer graphics and interactive techniques, pages 158 164, New York, NY, USA, 1979. [8] W.-Y. Lee and J.-H. Chuang. Effective meshing and form factor calculation for accurate progressive radiosity. tpcg, 00:144 151, 2004. [9] T. J. Malley. A shading method for computer generated images. Master s thesis, Dept. of Computer Science, University of Utah, 1988. [10] M. G. Maxwell, J. M. Bailey, and W. V. Goldschmidt. Calculations of the radiation configuration factor using ray casting. Comput. Aided Des., 18(7):371 379, 1986. [11] B. T. Phong. Illumination for computer generated pictures. Commun. ACM, 18(6):311 317, 1975. [12] F. Sillion and C. Puech. A general two-pass method integrating specular and diffuse reflection. In SIGGRAPH 89: Proceedings of the 16th annual conference on Computer graphics and interactive techniques, pages 335 344, New York, NY, USA, 1989. [13] M. S. Tawfik. An efficient algorithm for csg to b-rep conversion. In SMA 91: Proceedings of the first ACM symposium on Solid modeling foundations and CAD/CAM applications, pages 99 108, New York, NY, USA, 1991. [14] J. R. Wallace, K. A. Elmquist, and E. A. Haines. A ray tracing algorithm for progressive radiosity. In SIGGRAPH 89: Proceedings of the 16th annual conference on Computer graphics and interactive techniques, pages 315 324, New York, NY, USA, 1989. [15] T. Whitted. An improved illumination model for shaded display. Commun. ACM, 23(6):343 349, 1980.
(a) Método proposto (b) Amostragem de área com 4 amostras (c) Amostragem de área com 16 amostras (d) Amostragem de área com 64 amostras (e) Amostragem de área com 256 amostras (f) Amostragem de área com 1024 amostras (g) Método proposto (h) Amostragem de área com 4 amostras (i) Amostragem de área com 16 amostras (j) Amostragem de área com 64 amostras (k) Amostragem de área com 256 amostras (l) Amostragem de área com 1024 amostras Figura 5. Renderização da Cena 1 (a-f) e da Cena 2(g-l).