http://valcar.net


Conteúdo

1 - Introdução

2 - Faça-se a luz

3 - Elaboração poligonal e por traçagem de raios
3.1 - Restituição poligonal
3.2 - Restituição por traçagem de raios

4 - Objetos
4.1 - Objetos poligonais
4.2 - Objetos CSG

5 - Modelos de iluminação
5.1 - Modelo da reflexão ambiente
5.2 - Modelo da reflexão difusa
5.3 - Modelo de Phong para o brilho especular

6 - Luzes

7 - Cores, normais e texturas
7.1 - Perturbação da normal
7.2 - Aplicação de texturas bidimensionais
7.3 - Texturas tridimensionais

8 - Radiosidade
8.1 - Radiosidade em superfícies poligonais
8.1.1 - Intensidade de irradiação
8.1.2 - Fator de forma
8.1.3 - Cálculo da radiosidade
8.1.4 - Cálculo dos fatores de forma
8.1.4.1 - Superfícies diferenciais
8.1.4.2 - Projeção no hemicubo
8.2 - Radiosidade em objetos CSG

9 - Fótons

Bibliografia

Glossário


1 - Introdução

Este tutor visa apresentar os conceitos envolvidos no processo de geração de imagens tridimensionais pelo computador, ou Computação Gráfica 3D. Não se pretende, aqui, ensinar o uso de um programa gráfico específico, mas sim mostrar as técnicas comuns a todos eles. Desta forma, uma vez assimilado os conceitos, o leitor poderá aplicá-los a qualquer programa gráfico e não apenas a um programa particular. O assunto tratado aqui admite que o leitor esteja razoavelmente informado sobre Computação Gráfica, e tenha um nível de escolaridade compatível com o assunto (desejável que esteja cursando nível superior na área de exatas).

Durante a exposição, será utilizado o programa POV (Persistence of Vision) raytracer, para a geração das imagens dos exemplos. Este programa utiliza uma linguagem própria para descrever a cena, o que dificulta a sua utilização por pessoas não familiarizadas com programação. Contudo, pode-se utilizar o programa Moray (shareware) para compor os objetos da cena, sem a necessidade do conhecimento da linguagem do POV. O Moray faz uma tradução automática dos objetos editados nele para a linguagem POV, e também automaticamente aciona o POV para elaborar a imagem.

Sumário


2 - Faça-se a luz

Para gerar uma imagem tridimensional no computador são necessárias 3 condições:

  1. Um objeto ou vários objetos que possam ser vistos, e cujas superfícies tenham cor ou textura.
  2. Uma ou mais fontes de luz, para iluminar os objetos
  3. Uma câmera que indica onde está posicionado o observador, e para onde o observador está olhando.

Um exemplo de composição de uma cena utilizando o Moray é mostrado na Figura 2.1. A tela é separada em 4 partes: as três primeiras mostram a vista frontal, lateral e de cima (planta), enquanto que a quarta parte mostra a cena vista pela câmera.


Fig. 2.1 - Telas de edição de objetos do Moray.

Nesta cena, existe um objeto (uma esfera), uma câmera cujo campo de vista é indicado pela pirâmide vista nos três primeiros quadros e uma fonte de luz, indicada pela estrela.

A Figura 2.2 mostra o resultado do processo de elaboração (rendering) da imagem, realizado pelo computador


Fig. 2.2 - Um objeto, uma luz, uma câmera.

Nota-se, nesta imagem, que:

  1. O fundo é totalmente negro. Isto se deve ao fato de que nesta cena existe apenas um objeto (a esfera), e não foram feitos nem o chão, nem as paredes, nem o céu. A esfera está, portanto imersa no espaço vazio (que é negro). Para mudar esta condição, deve-se completar a cena com paredes, céu, chão, ou então utilizar um recurso existente na maioria dos programas gráficos, que permite estabelecer a cor de fundo (background).
  2. Certas partes da esfera não sofrem iluminação direta da luz (estão no lado da sombra), e mesmo assim a silhueta da esfera pode ser vista (inclusive a sua cor). Isto deve-se à utilização do recurso de iluminação ambiente, que é definido em conjunto com a cor e a textura do objeto. Este recurso permite que objetos que não são iluminados pela luz (e, portanto, seriam completamente negros) possam ser vistos.
  3. A fonte de luz, embora situada no campo de visão do observador, não é observada na imagem. De fato, a maioria dos programas gráficos utiliza a fonte de luz como geradora de iluminação, e não como um objeto a ser visto. Caso deseje-se visualizar a fonte de luz, deve-se colocar um objeto transparente ao redor dela. O Moray/Pov utilizado neste exemplo permite o recurso de visualização da fonte de luz.

O próximo exemplo, na Figura 2.3, mostra a mesma esfera, agora com alteração na cor de fundo, com eliminação da iluminação ambiente e com visualização da fonte de luz:


Fig. 2.3 - Esfera sem iluminação ambiente, com cor de fundo e visualização da luz.

Percebe-se agora, claramente, que sem a iluminação ambiente na esfera, suas partes na sombra ficam totalmente escuras.

Sumário


3 - Elaboração poligonal e por traçagem de raios

Existem diversas técnicas para gerar uma imagem 3D no computador. Duas técnicas destacam-se das demais, embora existam técnicas que misturam ambas. São elas a restituição ou elaboração poligonal e a restituição por traçagem de raios (raytracing). São várias as diferenças entre os dois métodos, mas pode-se dizer que a principal delas deve-se à finalidade de utilização de cada uma delas. A restituição poligonal tem como premissa a velocidade na elaboração da imagem (alguns décimos de segundo para cada cena), enquanto que a traçagem de raios procura gerar imagens com alto grau de realismo (denominado de fotorealismo). Logo, a restituição poligonal permite, devido à sua alta velocidade, fazer animações em tempo-real, isto é, gerar a seqüência de quadros simultâneamente à apresentação na tela.

3.1 - Restituição poligonal

As animações em tempo-real permitem interatividade, isto é, pode-se interagir com a animação de forma a dirigir os resultados, pois as imagens são geradas rapidamente. Justamente por causa desta interatividade, a elaboração poligonal é largamente utilizada em jogos e simuladores tridimensionais. A interatividade, porém, cobra seu custo: em geral as cenas são pobres de objetos, possuem pouca qualidade de iluminação, e só conseguem alta velocidade em resoluções relativamente baixas. Embora a elaboração poligonal permita a composição de sombras de um objeto em outro, além de aceitar objetos transparentes e reflexivos (como o vidro, por exemplo), estes recursos, quando utilizados, reduzem significativamente a velocidade da animação. Em virtude deste aspecto, geralmente não são empregados sombras e objetos transparentes em jogos e simuladores, exceto quando estes efeitos são produzidos de forma a criar uma ilusão, usando recursos extras de programação. Um exemplo disso é a aplicação de uma textura que já contenha o efeito desejado, como o reflexo de um objeto ou a sombra de outro.

O princípio de funcionamento da elaboração poligonal pode ser colocado na forma:

  1. Para cada polígono que forma um objeto (em geral, triângulos), projetam-se seus vértices na tela.
  2. Calcula-se o matiz (isto é, o grau de iluminação e a cor) de cada um destes vértices, com base na iluminação e nas características da superfície (cor e grau de rugosidade). Em geral não se analisa, neste processo, se o vértice está na sombra de um outro objeto ou não, pois esta análise é bastante demorada em termos computacionais, o que inviabilizaria a possibilidade de fazer animações em tempo real. Isto não quer dizer que é impossível gerar sombras na elaboração poligonal, mas sim que o processo de geração de sombras pode ser muito lento.
  3. Faz-se um preenchimento do polígono em coordenadas da tela, interpolando-se as tonalidades (matiz) de cada vértice. Durante este processo, interpola-se também a distância dos pontos do polígono até o observador. Esta distância é armazenada numa região da memória conhecida como Z-buffer. Em geral utiliza-se um ou dois bytes para cada pixel da tela no Z-buffer , ou seja, cada pixel da tela possui um endereço no Z-buffer. O pixel conterá a cor interpolada do polígono somente se sua distância interpolada for menor do que a distância armazenada no Z-buffer. Neste caso, a coordenada correspondente no Z-buffer será atualizada com a distância calculada. Neste processo, conhecido como eliminação das superfícies ocultas, os objetos que se encontram atrás de outros (do ponto de vista do observador) não são visualizados.

Na figura 3.1 é mostrado um exemplo de elaboração poligonal, composta por uma mesa com textura de mármore, uma esfera polida, um cone azul e um cilindro semi-transparente. Nota-se nesta cena que:

  1. devido à utilização de elementos poligonais, a esfera possui um contorno "quebrado", evidenciando os polígonos individuais. O reflexo das luzes na esfera também mostra os polígonos que a formam.
  2. A transparência do cilindro é pobre. Mal se consegue perceber que este cilindro deveria ser parcialmente transparente. O cone não aparece por detrás do cilindro, porém a mesa aparece.
  3. Não há sombras nesta cena, o que faz com que os objetos pareçam flutuar sobre a mesa.


Fig. 3.1 - Resultado da elaboração poligonal

3.2 - Restituição por traçagem de raios

A restituição por traçagem de raios, ao contrário da poligonal, consegue tratar muito bem as sombras, reflexos e as transparências, conforme mostrado na Figura 3.2.


Fig. 3.2 - Resultado da elaboração por traçagem de raios (raytracing).

Nesta figura foram utilizados 4 objetos: uma mesa de mármore, uma esfera cromada, um cone azul e um cilindro de vidro. Utilizou-se também paredes amarelas, e duas fontes de luz. Nota-se que a esfera reflete o ambiente (o cone, o vidro, a mesa), e que todas as sombras estão bem definidas. Contudo esta cena, com resolução de 400 por 300 pixels, levou cerca de 3 minutos num Pentium II 800 para ser gerada. Já a cena da restituição poligonal levou menos do que 0.1 s para completar. Atualmente, devido ao crescente aumento de velocidade dos computadores, já existem projetos para desenvolver placas de vídeo que operam com raytracing, visando aplicações em tempo real (interativas).

Para cada pixel da imagem, o programa que elabora a imagem verifica qual o objeto que se encontra mais perto do observador, visto a partir da direção do pixel. Este processo é conhecido como traçagem de raios, porque geometricamente consiste de retas que partem do observador (câmera), e se dirigem à cena passando pelas coordenadas de um determinado pixel. Uma vez detectado este objeto, o programa de raytracing inicia 3 processos:

  1. Verifica quais as fontes de luz estão iluminando este ponto do objeto. Para cada fonte de luz, o programa calcula o grau de iluminação com base nas características da superfície do objeto. Caso não haja fonte de luz iluminando este ponto, então ele está na sombra. Neste caso, o grau de iluminação reduz-se à iluminação ambiente. Durante este processo, verifica-se se não há um outro objeto interpondo-se entre o ponto em análise e a fonte de luz. Se houver, então o ponto está na sombra do segundo objeto.
  2. Se a superfície for refletora (isto é, espelhada, como a esfera da imagem acima), então o programa gera um novo raio, agora a partir do ponto observado, e na direção contrária ao reflexo. Para este novo raio, o programa verifica qual o objeto se encontra mais próximo do ponto de partida, de maneira análoga ao realizado no passo anterior. O novo ponto de interseção será também analisado pelo programa quanto à sua iluminação e característica da superfície.
  3. Se a superfície for transparente (como o vidro do exemplo anterior), então é gerado um novo raio que segue na direção de refração (segundo a lei de Snell-Descartes). Também para este novo raio o processo é repetido, até que se encontre o objeto mais próximo.
Os processos 2 e 3 são recursivos, isto é, uma vez obtida a interseção com os objetos a partir do novo raio gerado, todos os processos (1, 2 e 3) são novamente repetidos para este raio. Os programas gráficos, em geral, permitem o ajuste do limite de recursividade (Maximum trace recursion level), ou seja, limitam o número reflexões e refrações que são geradas ao elaborar a imagem. Na Figura 3.2, utilizou-se um nível de recursividade de 10. As imagens mostradas nas Figuras 3.3 a 3.7 fornecem um exemplo de como o ajuste da recursividade afeta o resultado.

Fig. 3.3 - Nível de recursividade igual a 1. A esfera não reflete o ambiente, e o vidro não é transparente.
Fig. 3.4 - Nível de recursividade igual a 2. A esfera passa a refletir o ambiente, mas o vidro ainda não é transparente, pois o raio precisa entrar e sair do vidro (neste exemplo ele apenas entra).
Fig. 3.5 - Nível de recursividade igual a 3. O vidro torna-se transparente, mas o reflexo do vidro na esfera ainda não é transparente.
Fig. 3.6 - Nível de recursividade igual a 4. O reflexo do vidro na esfera torna-se também transparente. Duplas ou triplas reflexões no interior do vidro fazem com que sua parte superior ainda não esteja completa.
Fig. 3.7 - Nível de recursividade igual a 5. A cena está praticamente completa.

Sumário


4 - Objetos

Como foi dito, na elaboração poligonal os objetos são formados por polígonos planos. Isto significa que as superfícies curvas (como a superfície de uma esfera ou de um cilindro) devem ser aproximadas por elementos poligonais. No entanto, esta não é a única forma de representar objetos tridimensionais, muito embora seja a mais utilizada porque consegue representar praticamente qualquer estrutura.

4.1 - Objetos poligonais

Quando os objetos são formados por um conjunto de polígonos (em geral triangulares), quanto maior o número destes polígonos que formam uma dada superfície curva, mais perfeita e lisa ela parecerá. Porém o tempo de elaboração da imagem aumenta proporcionalmente. Os editores gráficos que trabalham com elaboração poligonal possuem recursos para a divisão de sólidos geométricos simples (esfera, cone, cilindro) em um certo número de polígonos que pode, inclusive, ser ajustado externamente. Embora seja possível representar praticamente qualquer objeto (exceto os fractais) por polígonos, na prática objetos que possuem superfícies curvas e planas, como por exemplo uma garrafa, são penosos de se gerar. Existem diversas ferramentas computacionais para auxílio no desenho de objetos poligonais, e uma das mais poderosas é o "NURBS" (non-uniform rational B-splines). NURBS são superfícies paramétricas, isto é, que interpolam superfícies curvas entre vértices que definem uma superfície poligonal. Desta forma, com poucos pontos consegue-se definir superfícies complexas. É claro que, na elaboração poligonal da imagem, as superfícies NURBS têm que ser convertidas em elementos poligonais. Isto, porém, é realizado pela própria ferramenta, que permite também selecionar o grau de subdivisão realizado.

4.2 - Objetos CSG

Existem várias outras formas de definição de objetos, mas particularmente interessante aqui são os objetos CSG (Constructive Solid Geometry). Os objetos, neste caso, não são formados por polígonos, mas sim por equações matemáticas que definem seu contorno. Por exemplo, uma esfera é definida por sua equação:

O algoritmo de raytracing detecta interseções da reta que passa pelo pixel corrente com todos os objetos da cena, resolvendo um sistema de equações:

nas incógnitas x, y, z. Resolvendo o sistema de 3 equações resulta um ou mais pontos de interseção da reta com a superfície. O ponto mais próximo do observador será o ponto visível. Consegue-se, assim, que a superfície curva tenha aparência curva também na imagem, e não formada por elementos planos. De fato, embora o método de elaboração raytracing trate as superfícies poligonais sem maiores problemas, a vantagem do realismo gráfico fica realmente evidente ao trabalhar também com objetos CSG. Basta comparar as imagens geradas na seção anterior, para perceber que uma esfera, em raytracing, é realmente uma esfera e não uma aproximação. Há ainda uma outra vantagem do uso de objetos CSG: a possibilidade de realizar operações booleanas com eles. De fato, pode-se facilmente combinar dois ou mais objetos segundo as regras simples de operações booleanas, como mostra a Figura 4.1.


Fig. 4.1 - Operações booleanas em objetos CSG.

No exemplo acima, uma esfera e e um cilindro c definidos como CSG foram combinados de várias formas: na primeira delas, há uma união entre ambos ou seja: uma operação de ou lógico. O segundo e terceiro exemplos mostram a operação de diferença. No segundo exemplo, o cilindro é retirado da esfera, enquanto que no terceiro ocorre o contrário: a esfera é retirada do cilindro. No quarto exemplo, somente o volume que pertence a ambos é considerado. Esta é uma operação de interseção (ou e lógico). Esta técnica pode ser aplicada também a objetos já formados por operações booleanas. Consegue-se assim compor com relativa facilidade objetos de complexidade elevada. Ela é ineficaz, porém, para representar objetos da natureza como árvores, animais, faces de pessoas, montanhas, nuvens, etc. Contudo, pode-se, sempre que possível, recorrer aos objetos poligonais. Convém assinalar que enquanto o método de raytracing trata indistintamente tanto objetos definidos por CSG quanto objetos poligonais, a restituição poligonal é restrita a objetos poligonais.

Sumário


5 - Modelos de iluminação

O alto grau de realismo alcançado hoje na Computação Gráfica deve-se, em grande parte, às diferentes formas de representar as superfícies dos objetos, e aos diversos modelos matemáticas que traduzem os efeitos físicos da interação da luz com as superfícies dos objetos. Pode-se separar o problema da aparência que uma superfície apresenta no computador em dois grupos: aqueles relacionados com a iluminação e aqueles relacionados com a textura da superfície.

Num ambiente físico qualquer, os objetos não são iluminados apenas pela lâmpada que acende no teto, nem tampouco apenas pela iluminação que entra pela janela durante o dia. Tanto a iluminação da lâmpada quanto a iluminação da janela iluminam os objetos, mas uma vez iluminados, estes objetos passam a refletir a luz em outros objetos, e estes, por sua vez iluminam outros e assim por diante. O fenômeno da iluminação real é, portanto, bastante complexo. Ademais, as superfícies parecem refletir mais ou menos a luz em função do seu grau de polimento. Medidas efetuadas em laboratório indicam que a luz refletida por uma superfície depende:

  1. do ângulo de incidência da luz, tanto na direção normal quanto tangencial.
  2. da composição espectral da luz incidente.
  3. da direção na qual a luz refletida está sendo medida.

Modelos matemáticos simplificados foram feitos para aproximar os resultados encontrados em laboratório, de forma que pode-se estabelecer que a luz que incide numa superfície divide-se em:

  1. Uma parcela ka que é absorvida pelo corpo.
  2. Uma parte kd que é refletida sem direção preferencial, conhecida como reflexão difusa. O espectro da reflexão difusa dá a cor característica ao objeto.
  3. Uma parte ke que é refletida (ou apenas um pouco espalhada) na direção do reflexo. Esta direção faz com a normal à superfície um ângulo igual ao ângulo de incidência da luz, e é conhecida como reflexão especular.
  4. Se a superfície for transparente ou parcialmente transparente, uma parte kr da luz sofrerá uma refração na superfície, propagando-se através do meio transparente de tal forma que existe uma relação matemática entre o ângulo de refração e o ângulo de incidência (lei de Snell-Descartes).

Como a quantidade de luz que incide na superfície deve ser igual àquela que a deixa, então vale a relação:

ka + kd + ke + kr = 1.

Logo, superficies opacas possuem um alto valor de kd, enquanto que superfícies refletoras ou espelhadas possuem valores elevados de ke. Vidros e objetos transparentes possuem um alto valor de kr, e materiais escuros, como carvão ou piche, possuem valores grandes de ka. Contudo, a maioria dos programas de Computação Gráfica 3D não seguem esta relação física, ficando a critério do utilizador seguí-la ou não. De fato, pode-se conseguir efeitos artísticos interessantes (porém desprovidos de realidade física), desobedecendo-se propositadamente esta regra.

Para compor as cores das superfícies, o modelamento matemático é aplicado às 3 componentes das cores primárias. Desta forma, o coeficiente de reflexão difusa kd, por exemplo, passa a ser representado pelo trio kdr, kdg e kdb, para as cores vermelho, verde e azul, respectivamente. O mesmo vale para os demais coeficientes, inclusive para a iluminação ambiente ou reflexão ambiente, o que permite ajustar reflexões de cores distintas de forma a evidenciar a diferença na composição espectral entre a fonte de luz e a iluminação ambiente. A Figura 5.1 mostra 3 esferas que ilustram, da esquerda para a direita, a reflexão difusa, a reflexão especular e a transparência ou refração.


Fig. 5.1 - Iluminação local em esferas CSG com elaboração por raytracing.

Contudo, mesmo estes modelos não são totalmente realísticos. Os seguintes problemas ocorrem:

  1. No modelo da reflexão difusa, as partes não iluminadas ficam totalmente negras. Para compensar este efeito introduz-se um efeito de reflexão ou iluminação "ambiente" nos objetos, que simula uma iluminação uniforme em toda a superfície do objeto. Além de ser uma aproximação, o fenômeno físico real (onde um objeto ilumina o outro) não fica corretamente representado.
  2. Na reflexão especular, a fonte de luz não aparece refletida na superfície. Para simular o efeito de "brilho" no objeto, o modelo da reflexão especular é dividido em duas partes: a primeira reflete os objetos da cena, enquanto que a segunda (denominada de modelo Phong) reflete apenas a fonte de luz. Na esfera refletora utilizou-se os dois efeitos, que podem ser selecionados distintamente no programa gráfico.
  3. Se a superfície refletora for ligeiramente rugosa, então o reflexo será também ligeiramente fosco. Este efeito é difícil de modelar, porém alguns programas gráficos, como o MegaPov, possuem esse recurso.
  4. A refração não produz o efeito de cáustica. Este efeito é obtido quando a luz, ao atravessar uma lente convergente, por exemplo, cria um ponto altamente luminoso num anteparo colocado logo após a lente. Há, também neste caso, alguns programas gráficos que conseguem representar razoavelmente bem este efeito (MegaPov, por exemplo).
Justamente por estas limitações, este modelo de iluminação é conhecido como iluminação local, pois a característica de cada objeto depende apenas da fonte de luz, e não dos outros objetos ao seu redor, conforme pode ser visto no esquema mostrado na Figura 5.2. Infelizmente, não existe ainda modelos "globais" que sejam completos. Existem, na verdade, modelos que se aplicam a um ou outro fenômeno isoladamente.


Fig. 5.2 - Modelo de iluminação local.

Para considerar os efeitos de iluminação de um objeto no outro, deve-se considerar que as superfícies podem ser difusas ou especulares. O efeito da reflexão entre objetos opacos (ou pela parcela difusa da reflexão), pode ser modelado pela técnica da radiosidade. Por sua vez, a iluminação provocada pelo reflexo da luz em objetos especulares é modelada pelo mapeamento de fótons, conforme mostra a Figura 5.3.


Figura 5.3 - Interações de luz modeladas pela radiosidade e por mapa de fótons.

5.1 - Modelo da reflexão ambiente

A reflexão ou iluminação ambiente é um artifício introduzido no equacionamento matemático da iluminação que tenta simular as reflexões mútuas entre os objetos. A formulação deste efeito faz com que os objetos adquiram uma luz própria, isto é, passem a emitir luz. Contudo, esta "luz emitida" não possui a propriedade de iluminar outros objetos. A intensidade da iluminação ambiente num objeto é dada por:

,

onde Ia é denominado de luz ambiente e é comum para todos os objetos. Em geral os programas gráficos permitem configurar a iluminação ambiente tanto em intensidade quanto em cor. O coeficiente de reflexão ambiente, ka, tanto pode ser um escalar (muda apenas a intensidade mas não a cor da iluminação) quanto um vetor que permite ajustar tanto a cor quanto a intensidade da iluminação ambiente em cada objeto.

5.2 - Modelo da reflexão difusa

Superfícies que refletem de forma perfeitamente difusa seguem a lei de Lambert, que afirma que a intensidade da radiação refletida por unidade de área independe da direção de reflexão. Na prática, poucas superfícies comportam-se idealmente, mas ainda assim aproximam-se bastante da lei de Lambert. A reflexão difusa é dada por:

,

onde Il é a intensidade da l-ésima fonte de luz, e ql é o ângulo de incidência desta luz com relação à normal à superfície. O valor do cosseno pode ser obtido pelo produto escalar entre o vetor normal à superfície, N, e a direção da fonte de luz Ll no ponto do objeto onde se deseja calcular a iluminação:

.

É claro que a direção Ll varia nos pontos do objeto, a menos que a fonte de luz esteja no infinito.

Objetos metálicos polidos não seguem exatamente a lei de Lambert, mas sim uma variação dela. Nestes objetos, a intensidade do reflexo cai rapidamente com o aumento do ângulo de incidência. Pode-se modelar este efeito introduzindo-se um expoente b denominado de "brilhança" no produto escalar:

.

Quando b for unitário tem-se as superfícies lambertianas. Metais polidos e pintura metálica possuem valores da brilhança situados entre 1 e 2. A intensidade de reflexão difusa é calculada apenas em superfícies que estejam orientadas na direção da luz, ou seja, a intensidade é nula quando a superfície está na sombra. O modelo fica então:

5.3 - Modelo de Phong para o brilho especular

Superfícies lisas ou brilhantes refletem a fonte de luz e causam um espalhamento da luz ao redor do reflexo. Este efeito é simulado pelo modelo de Phong, que, devido às suas características, torna as superfícies com aparência de material plástico. O espalhamento é conseguido por um aumento na intensidade de luz em direções próximas da reflexão especular Rl, conforme mostra a Figura 5.4. A intensidade depende da posição V do observador, e é máxima na direção de Rl.

A direção da reflexão especular Rl é obtida a partir da direção de incidência de luz Ll:


Fig. 5.4 - Modelo para o brilho de reflexão Phong.

Consegue-se bons resultados em termos de realismo com o expoente m situado entre 5 e 100. Veja-se que o produto escalar entre Rl e V corresponde ao cosseno do ângulo j entre esses vetores. Em geral o brilho de Phong tem a mesma composição espectral da luz incidente, isto é, se a luz for azul o brilho também será azul, e, nesse caso, kp é apenas um escalar. Alguns programas, contudo, admitem que o brilho de Phong possa ter uma composição diferente da luz incidente, e portanto o coeficiente kp passa a ter três valores.

Embora o modelo de Phong seja ainda bastante utilizado, ele apresenta problemas, principalmente em ângulos de incidência rasantes. Foram então desenvolvidos diversos outros modelos, como por exemplo os modelos de Blinn e de Cook e Torrance, que se baseiam em fenômenos físicos e não apenas na aparência. Contudo, eles são pouco utilizados, devido principalmente à dificuldade de ajuste de certos parâmetros que fazem parte do modelo.

A intensidade resultante do modelo de reflexão será então dada por:

Veja-se contudo que este modelo não obedece a lei de conservação de energia, pois os coeficientes podem ser tais que a superfície reflete mais energia do que recebe.

Sumário


6 - Luzes

A energia luminosa de uma fonte de luz cai conforme a fonte se afasta do observador. Por isso visualiza-se uma luz ao longe como sendo muito mais fraca do que uma luz próxima. Na verdade a potência luminosa cai com o quadrado da distância d da fonte ao observador (ou ao objeto iluminado pela luz), ou seja:

.

Entretanto, os modelos matemáticos propostos para a atenuação luminosa em geral levam em conta que em certas circustâncias o decaimento da potência luminosa não segue exatamente esta regra, como por exemplo num túnel com paredes claras. (Na verdade, a luz continua enfraquecendo com o quadrado da distância. Porém, o reflexo da luz nas paredes do túnel dá uma ilusão de redução no decaimento). Um modelo bastante empregado em programas gráficos tem a forma polinomial:

Escolhendo-se adequadamente os coeficientes a1, a2 e a3 pode-se tanto tornar a energia luminosa independente da distância, tal como ocorreria se a fonte de luz estivesse muito longe (como o Sol), ou apresentar um decaimento linear, como ocorre, de forma aproximada, num túnel, ou ainda o decaimento quadrático. Pode-se também utilizar um decaimento na forma:

,

que apresenta a vantagem de fornecer atenuações maiores do que a quadrática, que ocorrem, por exemplo, no interior de uma neblina, ou em meios parcialmente transparentes como o vidro escuro. Os programas permitem selecionar o número de luzes presentes na cena e o tipo de luz (se pontual ou espalhada, se não-direcional ou direcional do tipo spot). Também oferecem possibilidade de ajustar a intensidade da luz (valor de I0), além da composição espectral, isto é, a cor da fonte de luz, em termos da relação entre as intensidades de vermelho, verde e azul.

Sumário


7 - Cores, normais e texturas

As primeiras imagens tridimensionais geradas no computador utilizavam apenas a iluminação local para compor o matiz das superfícies. A iluminação local e o modelo Phong deixam, contudo, todas as superfícies com aparência de plástico, com óbvias limitações (ver esfera vermelha da Figura 5.1). Diversas técnicas foram desenvolvidas para contornar essa limitação e dar maior realismo aos objetos. Entre elas, cita-se as perturbações na normal, e a aplicação de texturas tanto bidimensionais quanto tridimensionais.

7.1 - Perturbação da normal

Para conseguir a aparência de uma superfície áspera, pode-se pensar em dividir a superfície em polígonos minúsculos, com diferentes orientações, como se fosse um vale de montanhas em miniatura. Esta solução, porém, é ainda impraticável, pois com o grande número de polígonos tornaria o tempo de elaboração da imagem extremamente longo. Uma aproximação mais efetiva consiste em perturbar a normal à superfície pelo uso de ferramentas da matemática. Assim como a normal à superfície num terreno pedregoso varia constantemente, em virtude das saliências e reentrâncias, a simples perturbação da normal à superfície (mas sem perturbar a superfície), cria a ilusão da aspereza desejada. O ajuste da função de perturbação bem como sua amplitude permite simular um grande número de texturas encontradas em objetos reais. A perturbação da normal é algumas vezes confundida com bump mapping. Na verdade, bump mapping consiste da aplicação de um mapa (imagem) bidimensional de contraste na perturbação da normal. Melhores efeitos podem ser conseguidos ao utilizar-se funções tridimensionais semelhantes àquelas empregadas em texturas 3D. A Figura 7.1 ilustra a aplicação de perturbação da normal em 3 esferas por meio de funções tridimensionais, simulando uma laranja, um bombom de chocolate e uma pedra arredondada.


Fig. 7.1 - Perturbação da normal à superfície.

Nota-se na figura, contudo, que o perfil dos objetos é perfeitamente esférico. Como foi dito, este efeito produz a ilusão de rugosidade, sem contudo perturbar a superfície, que continua esférica. A aplicação deste efeito num objeto transparente cria a ilusão de gelo. Atualmente existem programas, como o Pov 3.5, que conseguem perturbar a superfície e junto com ela também a normal. Com isso o perfil do objeto passa a conter as saliências da superfície.

7.2 - Aplicação de texturas bidimensionais

Somente a aplicação de funções ou de mapas de rugosidade, contudo, não consegue reproduzir todos as características e efeitos encontrados nas superfícies reais. Nestas situações recorre-se à aplicação de texturas bidimensionais, que na maior parte das vezes são, na verdade, fotos de objetos ou imagens de detalhes de objetos. Consgue-se assim, criar a ilusão de grande realidade em cenas que contém, em essência, poucos objetos. Além disso, a aplicação de texturas bidimensionais é significativamente mais rápida em termos computacionais do que a perturbação da normal ou texturas tridimensionais, viabilizando seu emprego na restituição poligonal.

O principal problema na aplicação de texturas consiste em como associar um ponto da superfície de um objeto tridimensional com um mapa bidimensional de modo unívoco (Figura 7.2). Colocando de outra forma, para cada ponto da superfície do objeto deve-se ter um único ponto do mapa de texturas. Este problema é semelhante a tentar embrulhar um objeto esférico com uma folha de jornal. O papel não consegue entrar em contacto com todos os pontos da superfície da esfera sem dobrar. Matematicamente o problema é resolvido através de projeções, mas estas sempre introduzem distorções na imagem projetada. Por outro lado, existem inúmeras formas de se projetar um plano numa superfície curva. Nas aplicações da Computação Gráfica, 3 destas projeções se destacam: a projeção plana, a projeção esférica e a projeção cilíndrica. Na projeção esférica a textura é inicialmente aplicada a uma esfera por meio de equações de projeção cartográfica. Em seguida o objeto é colocado na região central do interior da esfera, e para cada ponto da sua superfície, traça-se uma reta que passa pelo centro da esfera e por este ponto, até encontrar a textura aplicada na esfera. A cor associada ao ponto da superfície do objeto será dado pela cor da textura onde a reta encontrou a esfera. A projeção cilíndrica segue o mesmo princípio, exceto que a textura é aplicada na superfície de um cilindro e não numa esfera. A projeção plana projeta a imagem no objeto como se fosse um projetor de slides. A Figura 7.3 mostra o efeito destas 3 projeções numa esfera. A imagem superior mostra a frente da esfera, enquanto que a imagem inferior mostra o outro lado. Na projeção plana, o lado posterior é igual ao anterior, porém a imagem é reversa. Nas demais projeções a imagem envolve a esfera, porém nota-se o efeito de distorção.


Fig. 7.2 - Um ponto da superfície do objeto 3D deve estar associado a um ponto da textura.


Fig. 7.3 - Mapeamento de texturas.

Devido à simplicidade dos métodos de texturização, aliado ao realismo alcançado com texturas fotográficas, é freqüênte seu uso em jogos e simuladores. O exemplo da Figura 7.4 foi extraído do jogo Grand Prix Legends. O programa usa extensivamente mapeamento de texturas nas árvores, na pista, na grama, no público, no veículos. De fato, pode-se perceber que as figuras do público são planas (não possuem espessura), e repetem-se após poucos indivíduos.


Fig. 7.4 - Simulador de corrida automobilística.

7.3 - Texturas tridimensionais

Como foi dito, o mapeamento de texturas provoca distorções na imagem, em virtude da transformação de uma figura bidimensional numa outra tridimensional. Uma forma de evitar esse inconveniente consiste na utilização de texturas tridimensionais, ou texturas procedurais, que nada mais são do que funções que a cada ponto do espaço atribuem uma cor específica. Escolhendo-se apropriadamente estas funções, podem ser obtidas várias texturas, que simulam materiais da natureza como madeira, pedra, mármore, granito, grama, ondas na água, etc.

Uma das formas de se gerar texturas procedurais consiste no uso de uma matriz tridimensional cujo conteúdo é armazenado previamente com valores aleatórios. Dado uma posição no espaço, busca-se na matriz os 8 pontos (valores inteiros) correspondentes a um cubo que encerra o ponto dado, e interpolam-se tridimensionalmente os pontos. Outra forma consiste na utilização de séries de Fourier, expandidas com poucos termos.

A grande vantagem no uso destas texturas consiste na continuidade da textura no espaço 3D. Quanto um objeto é cortado (por uma operação booleana CSG, por exemplo) a textura permanece contínua na região de corte. A melhor forma de compreender este resultado é imaginar um bloco de mármore no qual é esculpido uma estátua. Os veios do mármore já estavam presentes antes da estátua ser esculpida; no entanto eles só são revelados quando o mármore for cortado. Os exemplos da Figura 7.5 foram compostos com texturas tridimensionais. Percebe-se claramente a continuidade dos veios da madeira e do mármore.


Fig. 7.4 - As texturas procedurais são usadas para simular madeira e mármore.

Sumário


8 - Radiosidade

Um dos grandes problemas da traçagem de raios é que a iluminação dos objetos em geral não é muito realista. De fato, pessoas que trabalham com computação gráfica são avaliadas principalmente pela capacidade de iluminar adequadamente os ambientes virtuais. Este problema de iluminação decorre do fato de que o raytracing usa "iluminação local" ao contrário da "iluminação global". A diferença básica entre elas é que, num ambiente real, os objetos refletem a luz uns nos outros, e a traçagem de raios não leva isso em conta. Uma forma de compensar este efeito negativo é com a introdução da iluminação ambiente, porém mesmo assim os resultados obtidos ficam longe do real. Além disso, o ajuste cuidadoso da iluminação ambiente, das fontes de luz e das refletividades das superfícies são tão exaustivos, que só a experiência, a inspiração e principalmente a transpiração conseguem resolver.

Em virtude do cálculo da radiosidade ser baseado na troca de energia entre superfícies planas elementares, a descrição da cena por meio de polígonos é mais vantajosa. Pode-se argumentar que é sempre possível efetuar uma transformação de objetos CSG para objetos poligonais, mas as operações booleanas que caracterizam os objetos CSG são mais difíceis de serem realizadas em objetos poligonais. Em geral os programas capazes de calcular a radiosidade usam superfícies poligonais na descrição dos objetos. Alguns implementam traçagem de raios após um cálculo prévio da radiosidade. Porém a radiosidade não fica restrita aos objetos poligonais: pode também ser efetuada na traçagem de raios, porém com outra formulação, como será visto mais adiante.

8.1 - Radiosidade em superfícies poligonais

A troca de energia luminosa entre as superfícies depende da quantidade de luz que incide nelas, do espectro dessa luz, das características direcionais e refletoras das superfícies, da distância entre elas, da orientação relativa e das áreas. O problema a ser resolvido é bastante complexo, e certas simplificações devem ser feitas para resolvê-lo. Admite-se então que as superfícies são totalmente difusas (não refletem de forma especular), de tal forma que as equações desenvolvidas anteriormente para aplicação na termodinâmica podem ser igualmente empregadas na troca de luz. Estas equações levam em conta "fatores de forma" que nada mais são do que integrais duplas que permitem avaliar a fração da energia total emitida pela superfície que atinge a outra. Para cada elemento de área plano da superfície devem ser calculados todos os fatores de forma com relação a todos os outros elementos de área que são avistados pelo primeiro.

8.1.1 - Intensidade de irradiação

A quantidade de energia emitida (ou refletida) por um elemento elemento plano de área A por unidade de tempo é conhecida como intensidade de radiação emitida ou intensidade de irradiação. Esta intensidade depende da direção de emissão, e vale (Kreith, 1977):

onde q é o fluxo de energia por unidade de tempo (refletida ou emitida na forma difusa), que deixa a superfície subentendida num ângulo sólido dw, conforme a Figura 8.1. A área na qual a energia é medida deve ser normal à direção de emissão, e por isso aparece multiplicada por cosq. No sistema de coordenadas fixo ao elemento radiante, o ângulo sólido é dado por:

.


Fig. 8.1 - Ângulo sólido no qual a energia é emitida ou refletida pela superfície dA.

Disto resulta que a energia por unidade de área Q será dada por:

.

Quando a intensidade I não depende da direção de emissão, diz-se que a superfície é difusa, e que ela está de acordo com a lei do co-seno de Lambert. Neste caso a intensidade resulta:

.

8.1.2 - Fator de forma

Considere-se agora duas superfícies Ai e Aj trocando radiação entre si, conforme mostra a Figura 8.2. A fração da radiação difusa que deixa a superfície Ai e atinge a superfície Aj é conhecida como fator de forma Fi-j. O primeiro índice indica a superfície emissora e o segundo indica a superfície receptora da radiação. A radiação emitida pela superfície Ai que atinge Aj fica então dada por:

Analogamente, a quantidade de radiação que deixa Aj que atinge Ai vale:

Numa situação de equilíbrio, a energia trocada por ambas deve ser igual, e, a menos que uma delas seja uma fonte de luz, então a quantidade de radiação por unidade de área também é igual, o que leva ao teorema da reciprocidade:

Em ambientes fechados, o equilíbrio no espectro visível é atingido apenas alguns microsegundos depois de acesa a luz.


Fig. 8.2 - Troca de radiação entre dois elementos de área.

Para calcular o fator de forma, considera-se agora duas superfícies diferenciais dAi e dAj pertencentes aos elementos Ai e Aj respectivamente, e separados pela distância ri-j. A quantidade de radiação emitida pela primeira e recebida pela segunda fica então:

,

ou ainda:

.

Fazendo a integração, chega-se a:

,

de onde conclui-se que:

.

8.1.3 - Cálculo da radiosidade

Num caso geral, as superfícies podem gerar radiação e também refletir a radiação provinda da reflexão em outras superfícies. Neste caso, a radiosidade é definida como sendo a energia emitida adicionada da energia refletida. Esta, por sua vez, consiste do somatório da contribuição da radiosidade de todas as outras superfícies que emitem na direção da primeira. A radiosidade Qi para uma superfície Ai vale portanto (Watt, 1997):

,

onde Ei é a energia por unidade de área emitida pela superfície i, e kdi é o coeficiente de reflexão difusa, isto é, a fração da radiação incidente que é refletida na forma difusa. Se a superfície não emitir luz, isto é, se a superfície não for uma fonte de iluminação, então Ei é nulo. No caso mais geral, a somatória da equação acima deve ser substituída pela integral realizada em todo o hemisfério visível pela superfície i. Aplicando o teorema da reciprocidade na equação da radiosidade, e admitindo-se a existência de n superfícies refletoras (ou emissoras), tem-se:

,

que pode ser posta na forma matricial:

,

ou resumidamente:

Nota-se que Fi-i = 0 em superfícies planas ou convexas. Caso uma ou mais superfícies seja côncava, a equação acima deve ser modificada convenientemente. A matriz F é conhecida, já que são conhecidos ou podem ser calculados os fatores de forma e as refletividades para todas as superfícies. O vetor E também é conhecido, pois sabe-se quais são os elementos que fornecem luz ao ambiente. O vetor de radiosidades pode ser então calculado por:

.

Contudo, a inversão da matriz F é ser bastante trabalhosa, pois pode haver 10000 ou mais elementos na cena. Embora existam métodos matemáticos para resolver este sistema, em geral utilizam-se técnicas iterativas, que aproximam o resultado a cada iteração. Outra grande vantagem dos métodos iterativos consiste na possibilidade de visualização da evolução da radiosidade na cena. Estes métodos podem ser aplicados de duas formas distintas. Na primeira delas, denominada de coleção (gathering), a radiosidade de cada elemento é atualizada com base na radiosidade atual dos demais elementos da cena. A atualização pode ser feita no instante de cálculo ou ao final de cada interação. Este método é direto e utiliza a própria equação da radiosidade para resolvê-la de forma interativa:

, com i = 1, ..., n.

Este método é inicializado com = 0, ou então igual ao valor da iluminação ambiente.

O segundo método é denominado refinamento progressivo ou de distribuição (shooting), e consiste de atualizar a radiosidade de todos os elementos da cena com base na radiosidade de um deles:

, com j = 1, ..., n,

e com a inicialização .

8.1.4 - Cálculo dos fatores de forma

A melhor solução para o cálculo dos fatores de forma das superfícies que constituem uma cena seria proceder a integração analítica de todos os seus elementos. Esta tarefa, contudo, é impraticável em virtude da grande quantidade de superfícies elementares de uma cena ainda que simples. Integrais numéricas, embora possam ser consideradas, devem ser evitadas em virtude dos seguintes problemas:

  1. Numa cena é comum que certos objetos obstruam outros em determinadas direções. Isto significa que fatores de forma são influenciados pela obstrução de uma superfície com relação a outra. Testes de visibilidade mútua devem ser empregados ao se calcular os fatores de forma.
  2. A radiosidade obtida na solução do sistema de equações é a mesma em todos os pontos do elemento de área considerado. Em certas situações, contudo, a iluminação cresce ou decresce rapidamente de um ponto ao outro (como na sombra projetada, por exemplo). A radiosidade, neste caso, apresenta descontinuidades nas junções dos polígonos que são facilmente visíveis.

8.1.4.1 - Superfícies diferenciais

Duas soluções foram propostas para solucionar estes problemas. A primeira delas admite que todas as superfícies presentes na cena são diferenciais, e portanto não é necessário calcular o fator de forma, pois pode-se utilizar a sua própria definição:

.

Esta é, sem dúvida, a solução mais simples. Contudo esta solução apresenta erros significativos em superfícies que formam cantos, em virtude da proximidade entre elas. Para contornar o problema, costuma-se subdividir a superfície i em elementos menores sempre que for atingida a condição:

onde e é um valor fornecido previamente, e está relacionado com o erro admissível na radiosidade. Esta condição, porém, pode levar a um grau de subdivisão infinito, principalmente em cantos, como mostra a Figura 8.3. Em virtude deste aspecto, limita-se a área a um valor mínimo, na qual o processo de subdivisão é interrompido.


Fig. 8.3 - Método de subdivisão de superfícies.

Outro problema a ser analisado refere-se à ocultação de superfícies por outras. Pode-se, simplesmente, ignorar a possibilidade de ocultação, o que invariavelmente levará a erros em cenas com um número razoável de objetos, ou então considerá-las de forma aproximada. O teste mais comum a ser efetuado consiste na verificação da presença de objetos na linha que une os centros dos polígonos i e j conforme mostra a Figura 8.4. Esta linha passa pelo centro das duas superfícies, e, se também passar por dentro de algum outro polígono numa distância intermediária, então o fator de forma entre elas será nulo.


Fig. 8.4 - Ocultação das superfícies diferenciais.

É claro que este método não é muito preciso, principalmente se as dimensões das superfícies forem grandes. Uma sofisticação natural consiste na projeção da superfície intermediária Ak no plano da superfície Ai e remoção da fração sombreada no cálculo do fator de forma. Ainda assim o cálculo é apenas aproximado, visto que a área de Ai, vista a partir do elemento j, depende do ponto considerado. Cada vértice de Aj, por exemplo, projeta uma área diferente no plano de Ai. O melhor a fazer, nestas circustâncias, é subdividir uma das superfícies quando um problema de ocultação ocorrer. Na prática, adota-se um critério de subdivisão baseado não na ocultação, mas sim na diferença da solução da radiosidade de um polígono com relação aos polígonos vizinhos. Sempre que esta diferença for significativa (o que ocorre, por exemplo, nas superfícies que passam da região iluminada para a região de sombra) subdivide-se as áreas afetadas. Normalmente grandes diferenças na radiosidade estão associadas a problemas de ocultação (sombra), e assim não é necessário investigar as ocultações no processo de subdivisão.

A radiosidade substitui o modelo de iluminação ambiente, conforme mostrado anteriormente. No instante de elaboração, o matiz do polígono é calculado com base na soma da solução da radiosidade e no modelo de iluminação local (reflexão difusa e especular). Contudo, a solução da radiosidade gera descontinuidades no matiz entre duas superfícies vizinhas. Para eliminar este inconveniente, calcula-se o matiz nos vértices dos polígonos, com base na média das radiosidades dos polígonos que compartilham o vértice. Usa-se, em seguida, uma suavização de Gouraud para interpolar o matiz entre os vértices.

8.1.4.2 - Projeção no hemicubo

O segundo método de cálculo dos fatores de forma gera resultados melhores, a um custo maior de processamento. Este método parte da suposição de que o elemento i possui área diferencial (muito pequena), quando comparado com o elemento j. Deve-se mencionar, contudo, que esta hipótese viabiliza uma solução, mas em geral não a torna válida, já que os elementos não podem ser considerados tão pequenos a ponto da sua dimensão poder ser desprezada. Nota-se que quanto menor for o número de superfícies na cena, mais rápido será o cálculo da radiosidade, porém maior será o erro cometido. Os fatores de forma para o elemento i podem ser computados, então, usando o seguinte método. Fixa-se um hemicubo cujo centro coincide com o centro geométrico da superfície, conforme indica a Figura 8.5. Neste hemicubo é fixado uma grade com um certo número de divisões, na qual são projetados todos os polígonos que constituem a cena. Um vetor ou uma matriz armazena, para cada pixel da grade, o índice j do elemento de área que está sendo projetado e a distância interpolada do polígono até o elemento i. Desta forma, este método funciona como se fosse um Z-buffer , onde apenas o polígono (ou parte dele) mais próxima de Ai é atualizado na matriz. A posição do pixel com relação ao centro do hemicubo fornece um fator de forma elementar do pixel, que depende apenas da sua posição na grade. Pode-se mostrar que o somatório dos fatores de forma dos pixels preenchidos aproxima com determinada precisão o fator de forma Fi-j (e, pelo teorema da reciprocidade, também Fj-i). A vantagem desse sistema para o cálculo dos fatores de forma são:

  1. O processo é calculado apenas uma vez para toda a cena. Para cada polígono, são projetados todos os outros polígonos do hemicubo, gerando uma linha de uma matriz n ´ n de fatores de forma.
  2. Este processo permite a composição de polígonos que são parcialmente encobertos por outros.
  3. O ajuste da precisão é efetuado pelo número de pixels que compõem a grade.
Contudo, o método falha ao supor que o elemento Ai possui área desprezível, o que em geral não ocorre. Em virtude deste aspecto, pode-se aumentar a precisão da solução subdividindo-se a superfície i em sub-elementos, de tal forma que, se a superfície for plana, vale a relação:

,

onde p representa o número de subdivisões da superfície Ai, e Aiq representa o q-ésimo sub-elemento. Nota-se, contudo, que o fator de forma Fj-i permanece inalterado, a menos que também a superfície j seja subdividida. Portanto a adoção deste método implica em aumentar a dimensão da solução para m ´ n, onde m é o número total de sub-elementos.


Fig. 8.5 - Cálculo do fator de forma por projeção no hemicubo.

8.2 - Radiosidade em objetos CSG

O grande problema de aplicar a teoria desenvolvida para superfícies poligonais em objetos descritos pelas equações constituintes é a inexistência, nestes objetos, de elementos de superfície. Como foi dito, pode-se transformar os objetos CSG em objetos poligonais, mas as operações booleanas em polígonos ainda são complexas e demoradas. Em virtude deste aspecto, desenvolveu-se técnicas estatísticas, que avaliam a radiosidade de maneira aproximada. Quando um objeto é formado por polígonos, admite-se que cada polígono possua radiosidade uniforme. Já no caso de um objeto CSG, não há como armazenar a radiosidade nos seus elementos, pois o objeto constitui um elemento apenas. Uma esfera CSG, por exemplo, é apenas uma entidade mas cada ponto da sua superfície pode ter uma radiosidade distinta. Os pontos constituintes da esfera, contudo, não podem ser discretizados. Para contornar este problema, a informação da radiosidade não é armazenada nos objetos, mas sim nos "pixels" que constituem a cena. A radiosidade é calculada antes do processo de elaboração da imagem, de forma recursiva. O algoritmo verifica qual objeto é observado através de um determinado pixel, e dispara, da superfície do objeto, vários raios (de 50 a 200) em direções aleatórias. Determina-se, em seguida, os objetos interceptados por esses raios, e verifica-se o grau de iluminação (cor e intensidade) de cada um dos pontos de interseção, num processo conhecido como coleção (gathering). Este grau de iluminação é baseado apenas nas características da iluminação local e ambiente, que devem ser previamente estabelecidas. O processo não dispensa, portanto, a necessidade da iluminação ambiente, porém obtém um resultado mais próximo da radiosidade real. Realiza-se, a seguir, uma média das contribuições dos raios enviados, e armazena-se o resultado numa matriz, na posição correspondente ao pixel da imagem. Devido ao caráter recursivo do algoritmo, pode-se gerar novos raios a cada ponto de interseção, o que melhora sensivelmente a solução da radiosidade. Contudo, como o número de raios gerados a cada nova iteração é muito grande, este processo acaba sendo extremamente lento. Para acelerar o cálculo, admite-se que a solução da radiosidade não se altera de um ponto (pixel) ao outro, e com isso consegue-se uma estimativa média para vários pixels.

Esta solução apresenta vários inconvenientes. Ela é extremamente lenta quando deseja-se um maior realismo ou imperfeita quando a velocidade passa a ser importante. Além disso, apresenta manchas mesmo em superfícies lisas, em virtude do processo de envio de raios em direções aleatórias. Ao se aumentar o número deles, para evitar este inconveniente, a velocidade na elaboração da imagem fica comprometida. Alguns exemplos de radiosidade em conjunto com objetos CSG são mostrados nas Figuras 8.6 a 8.9. Percebe-se, nestes exemplos, que a iluminação ambiente não é necessária para o cálculo da radiosidade. Porém, devido ao limite de 2 níveis de recursão da radiosidade, a cena contendo iluminação ambiente além da radiosidade fica mais perfeita.


Fig 8.6 - Primeiro exemplo: cena sem iluminação ambiente e sem radiosidade.


Fig 8.7 - Segundo exemplo: cena sem iluminação ambiente e com radiosidade.


Fig. 8.8 - Terceiro exemplo: cena com iluminação ambiente e sem radiosidade.


Fig. 8.9 - Quarto exemplo: cena com iluminação ambiente e com radiosidade.

Sumário


9 - Fótons

A elaboração de imagens por traçagem de raios (raytracing) usa um método, para gerar a imagem, que percorre um sentido inverso ao fenômeno físico real. A traçagem de raios parte do observador, verifica qual o objeto que é visto numa determinada direção, e só então calcula o grau de iluminação (matiz) da superfície do objeto, com base nas fontes de luz da cena. No mundo real, as luzes (sol, lâmpadas, etc.) enviam fótons, ou partículas de luz, em todos os objetos. Estes fótons interagem com as superfícies, são refratados, refletidos e absorvidos, até que casualmente atingem os olhos do observador. Na natureza a quantidade de fótons é tão grande que milhões deles atingem os olhos a cada segundo. Em contrapartida, bilhões de fótons atingem outros objetos contribuindo para a iluminação de cada um deles.

A princípio, pode parecer indiferente se a geração da imagem percorre o caminho dos fótons de luz para o observador ou do observador para a luz, mas para evitar o inconveniente de ter de gerar bilhões de caminhos diferentes para aproveitar apenas alguns deles, o método de traçagem de raios faz o caminho inverso, ou seja, parte do observador em direção à luz. Contudo, este método não soluciona problemas que decorrem, por exemplo, da iluminação causada pela reflexão ou refração da luz em objetos transparentes ou polidos. Denomina-se cáustica a região brilhante provocada pela refração ou reflexão da luz em um objeto transparente ou polido, como por exemplo uma lente convergente. Este efeito não pode ser reproduzido pela traçagem de raios, já que não há como saber se um determinado ponto está iluminado ou não pela cáustica. Foi sugerido, então, utilizar-se mapeamento de fótons (Jensen, 2001), que consiste de gerar raios a partir das fontes de luz até os objetos que recebem fótons. Estes raios são então refletidos ou refratados e atingem em outros objetos. As coordenadas tridimensionais dos pontos de incidência e a intensidade do fóton são então armazenadas na memória, constituindo o mapa de fótons. Este processo é realizado antes da geração da imagem. Durante o "raytracing" verifica-se, em cada interseção com os objetos da cena, se ao redor daquela posição há ou não uma concentração de fótons, a partir da comparação com o mapa de fótons. A iluminação daquele ponto depende, então, da quantidade de fótons presente ali. Devido ao fato do mapeamento de fótons processar-se na direção contrária ao raytracing, ele é também conhecido como traçagem de raios reversa (backwards raytracing).

As Figuras 9.1 a 9.6 mostram o efeito obtido pelo mapeamento de fótons com o programa Megapov 0.7. Estas figuras são compostas por uma fonte de luz e uma lupa confinados num recinto. Na primeira delas (Figura 9.1) não há mapeamento de fótons e o vidro da lupa escurece apenas um pouco sua sombra. Na Figura 9.2 introduziu-se o efeito de cáustica falsa (um recurso do Pov). Ela produz uma zona brilhante no centro da sombra, mas percebe-se que a cáustica não é realista, uma vez que o seu tamanho não depende da distância focal, como pode ser visto na Figura 9.3. Além disso, o vidro continua a escurecer parcialmente sua sombra, quando deveria, na verdade, obscurecer totalmente.


Fig. 9.1 - Cena sem a utilização de fótons.


Fig. 9.2 - Cáustica falsa.


Fig. 9.3 - Cáustica falsa com alteração na distância focal.

A Figura 9.4 mostra a utilização de fótons na mesma cena. Além da presença da cáustica, nota-se também que a sombra da lupa é mais escura (como, de fato, deveria ser), e que há também uma pequena cáustica no chão, logo atrás da haste da lupa (devido a uma outra fonte de luz). A alteração da distância focal, indicada na Figura 9.5, altera as dimensões da cáustica corretamente.


Fig. 9.4 - Utilização de mapeamento de fótons.


Fig. 9.5 - Mapeamento de fótons (alteração na distância focal).

O mapeamento de fótons segue o processo inverso da traçagem de raios, e, como ela, também pode ser refletido especularmente, como mostra a Figura 9.6. Nesta cena, foi introduzido um grande espelho do lado direito, e a fonte de luz foi transferida para ficar ao lado da lupa. A luz refletida no espelho provocou a projeção da cáustica, da mesma forma como se fosse causada pela própria fonte de luz. Contudo, devido a problemas de geração estatística de fótons, a imagem perde um pouco da sua qualidade, apresentando um certo ruído na iluminação das paredes.


Fig. 9.6 - Reflexão e refração simultâneas no mapeamento de fótons.

O mapeamento de fótons não consegue lidar, infelizmente, com a reflexão difusa. Na cena mostrada na Figura 9.7, o espelho foi substituído por um cubo verde com propriedades de reflexão especular e difusa. Embora o cubo reflita a luz (como pode ser visto no chão, logo abaixo do cubo), a lupa não consegue projetar a imagem do cubo na parede, como ocorreria numa situação real. Isto porque a trajetória da luz é percorrida apenas quando ocorre reflexão especular, e não quando ocorre reflexão difusa.


Fig. 9.7 - Mapeamento de fótons num cubo.

Sumário


Bibliografia

Sumário


Glossário

blob ou metaball - É uma forma de descrever objetos a partir de equações que fornecem soluções eqüipotenciais, gerando assim formas suaves, adequadas para descrever superfícies curvas, partes do corpo humano ou de animais.

bump mapping - É uma forma de geração de textura em uma superfície lisa. Consiste na perturbação, de acordo com um mapa de textura (uma imagem da textura), da direção da normal à superfície numa dada posição. As condições de iluminação neste ponto são alteradas, produzindo com isso a aparência de rugosidade. Ver também bumps.

bumps - É uma técnica empregada na geração de texturas superficiais. Diferentemente do bump mapping, a técnica de bumps aplica não um mapa de texturas mas sim funções matemáticas tridimensionais na perturbação da normal. Ver também bump mapping.

canal alfa (alpha channel) - É um recurso utilizado na elaboração poligonal para simular transparência. Quando um objeto tiver uma textura (ou cor) na qual o canal alfa é especificado, haverá uma combinação entre a textura do objeto e a textura do fundo (que pode ser um outro objeto). O valor atribuído ao canal alfa define se a combinação é nula (0) ou máxima (1).

cinemática inversa (inverse kinematics ou IK) - Permite que objetos 3D que possuam vínculos entre si possam mover-se livremente e ainda assim obedeçam os vínculos.

elaboração - (rendering) - É o processo de gerar uma imagem a partir da base de dados que constitui a descrição da cena tridimensional. Consiste de vários passos: operações de transformação, operações de visualização, projeção, iluminação, matização, e pós-produção. Há duas formas principais de elaboração: poligonal (que divide-se em Z-buffer e varredura de linha ou scan-line) e traçagem de raios.

elaboração poligonal - A elaboração poligonal é utilizada para gerar animações em tempo-real (interativas). Os objetos são formados por uma malha polígonal, e são projetados um a um na tela. A elaboração poligonal pode utilizar duas formas distintas de eliminação de superfícies ocultas: o método de Z-buffer ou o método de varredura de linha.

malha poligonal (polygon mesh) - Consiste na descrição de objetos 3D com superfícies compostas por polígonos (geralmente triangulares).

mapeamento (mapping) - Conversão de coordenadas 3D de um objeto para 2D. Em computação gráfica, o processo de mapeamento é usado para aumentar o nível de detalhes de uma imagem sem aumentar a complexidade do objeto. Existem vários tipos de mapeamento: bump mapping, mapeamento de transparência, mapeamento de deslocamento, mapeamento de reflexão, mapeamento de ambiente , e mapeamento de refração.

mapeamento de ambiente (environment mapping) - Técnica que consiste na geração de reflexão especular pela aplicação de uma textura que imita o ambiente ao redor de um objeto. Este efeito é usado na elaboração poligonal, já que a técnica de traçagem de raios consegue um grau de realismo bastante superior ao mapeamento de ambiente.

mapeamento de reflexão (reflection mapping) - Consiste na duplicação de um objeto, de tal forma que um deles é o objeto real e o outro é posicionado de forma a simular a imagem especular do objeto em um plano. Esta segunda imagem é combinada com a imagem do plano usando o canal alfa (transparência). Este efeito é usado na elaboração poligonal.

mapeamento de texturas (texture mapping) - Método que consiste de "embrulhar" um objeto tridimensional com uma imagem (textura) ou padrões bidimensionais.

máscara - (matte ou mask) - Consiste na atribuição de uma cor de uma imagem como sendo transparente. Sempre que um pixel desta imagem for encontrado com a cor de máscara, então a cor do pixel será substituída pela cor do pixel de fundo.

matização (shading) - Consiste na técnica de obter o grau de iluminação de uma superfície a partir da orientação desta com relaçào à fonte de luz, e dos atributos da própria superfície, como cor, transparência, reflexão, etc. A matização depende também da posição e orientação do observador com relação ao objeto.

NURBs (Non-uniform rational b-spline) - É uma forma de descrever objetos poligonais com contornos suaves.

primitiva - Constitui um objeto (ou mesmo uma ação) de baixo nível, a partir do qual pode-se construir objetos (ou ações) mais complexos.

pseudonímia - (aliasing) - É o fenômeno que provoca o aparencimento de baixas freqüências num sinal de alta-freqüência, em virtude da baixa taxa de amostragem. Nas imagens, a pseudonímia provoca o aparecimento de degraus (serrilhado) nos contornos dos objetos. Para eliminá-la, utiliza-se a anti-pseudonímia (anti-aliasing) que faz uma média das amostras obtidas em freqüências elevadas.

quadro-a-quadro (keyframe) - Método de animação que gera uma seqüência animada a partir de vários quadros estáticos. Os objetos e a câmera assumem diferentes posições a cada quadro, a partir de pontos previamente fornecidos. O computador, em seguida, interpola as posições obtendo assim os valores intermediários de cada quadro em função do tempo.

reflexão ambiente (ambient light) - Artifício matemático no qual uma superfície que se encontra na sombra (isto é, que não está diretamente iluminada por uma fonte de luz, apresente uma emissão uniforme. É uma aproximação para evitar o cálculo da radiosidade.

reflexão difusa (diffuse reflection) - É a parcela da iluminação total que é refletida na forma difusa, ou seja, sem uma direção preferencial para a luz que deixa a superfície. É a reflexão difusa que dá a cor característica dos objetos.

reflexão especular (specular reflection) - É a parcela da luz incidente numa superfície que é refletida na forma especular, onde o ângulo de reflexão é igual ao ângulo de incidência, como num espelho. Há modelos matemáticos para a reflexão especular entre objetos e para o reflexo (brilho) de uma fonte de luz numa superfície.

restituição (rendering) - Ver elaboração.

traçagem de raios (ray tracing) - Processo de elaboração que simula o caminho inverso percorrido por um fóton de luz desde a fonte até o observador. Consegue produzir imagens realistas, com sombras, reflexões e refrações.

varredura de linha (scan line) - Método utilizado na remoção de superfícies ocultas da elaboração poligonal. Consiste de dois passos. No primeiro passo armazena-se numa tabela indexada pela linha da tela os índices de todos os polígonos cuja varredura iniciam-se naquela linha e de todos os polígonos que terminam naquela linha. No segundo passo, faz-se uma varredura em cada linha, verificando-se, a cada pixel, qual o polígono mais próximo do observador. Este método elimina a necessidade de uma região da memória (Z-buffer) para armazenar a distância dos polígonos.

vínculo (constraint) - Significa uma relação de restrição ao movimento entre dois objetos distintos. Por exemplo: a roda de um veículo pode girar em torno do eixo, mas possui um vínculo com o veículo o qual não permite que a roda desloque-se quer na direção transversal, quer na direção longitudinal. É usado em cinemática inversa.

Z-buffer - Método utilizado na eliminação de superfícies ocultas da elaboração poligonal. Consiste em interpolar a distância de cada ponto (correspondente a um pixel da tela) do interior dos polígonos projetados até o plano de visualização (coordenada z) e armazenar numa região da memória (buffer). O ponto só será considerado visível se sua distância for menor do que aquela armazenada previamente no buffer.

Sumário


http://valcar.net