Link

Modelo de reflexão de Phong

O modelo de reflexão de Phong (também chamado de modelo de iluminação de Phong) e foi publicado por Phong (1975). Esse modelo foi projetado empiricamente e possui uma troca muito boa entre simplicidade e grau de realismo obtido na renderização. Por esse motivo, tem sido a maneira padrão de calcular a iluminação em pipelines gráficos fixos, até o advento dos pipelines gráficos programáveis.

Ele descreve como uma superfície reflete a luz, sendo uma combinação da reflexão difusa, da reflexão especular e da reflexão ambiente. Isso significa que podemos descrever a cor total em um vértice ou fragmento como a soma de cada componente de reflexão:

Reflexão total = reflexão ambiente + reflexão difusa + reflexão especular

A Figura 15 mostra o efeito das diferentes reflexões individuais e o resultado final da soma de cada reflexão.

Figura 15 – Ilustração visual da equação de Phong: aqui a luz é branca, as cores ambiente e difusa são azuis e a cor especular é branca. A intensidade da reflexão difusa varia com a direção da superfície e a reflexão ambiente é uniforme (independente da direção)

Reflexão ambiente
(a) Reflexão ambiente
Reflexão difusa
(b) Reflexão difusa

Reflexão especular
(c) Reflexão especular
Reflexão total
(d) Reflexão total


Para calcular cada uma das três componentes de reflexão diferentes, o modelo também especifica que todas as fontes de luz na cena têm três componentes de luz diferentes: luz ambiente, luz difusa e luz especular.

Além disso, cada material na cena possui três propriedades correspondentes que descrevem a refletividade ambiente, a refletividade difusa e a refletividade especular do material. Além dessas três propriedades do material, há também uma quarta propriedade do material, que é o brilho (shininess) usado para calcular a componente de reflexão especular.

A “reflexão ambiente”, a “reflexão difusa” e a “reflexão especular” na equação anterior são o resultado da interação entre a luz e a propriedade do material para a componente correspondente. Veremos mais sobre essa interação nas subseções a seguir.

Reflexão ambiente

Como mencionado anteriormente, o modelo de iluminação Phong é um modelo de iluminação local que considera apenas iluminação direta – não considera iluminações indiretas nem sombras. Portanto, a reflexão ambiente é incluída para aproximar os efeitos de iluminação indireta. Sem essa componente, os lados de um objeto que não são diretamente iluminados por uma fonte de luz seriam totalmente pretos. Por exemplo, quando estamos em um ambiente interno, normalmente possui paredes, teto e outros objetos que refletem alguma luz em superfícies que não são diretamente iluminadas. Portanto, em uma cena interna como essa, superfícies que parecem totalmente pretas porque nenhum raio de luz as atinge diretamente não parecem realistas.

Se tivermos uma componente de luz ambiente chamada Ia que contém um valor RGB e uma propriedade de material ambiente chamada ka que possui uma propriedade de material para a luz vermelha, uma para a luz verde e outra para a luz azul, obtemos a reflexão ambiente Iambiente que é refletida da superfície com a seguinte equação:

Então, o que fazemos é uma multiplicação de ka e Ia baseada em componentes. Multiplicamos a componente vermelha da propriedade do material pela componente vermelha da luz, a componente verde da propriedade material pela componente verde da luz e a componente azul da propriedade material pela componente azul da luz.

Podemos ver pela equação (1) que a luz ambiente não leva em consideração a posição ou a direção da luz. Também não leva em consideração a direção da visualização.

Reflexão difusa

A reflexão difusa representa a luz que viaja diretamente da fonte de luz para o ponto da superfície e é espalhada em todas as direções uniformemente devido à natureza rugosa do material da superfície. Ao calcular essa contribuição, o modelo de reflexão de Phong leva em consideração a Lei de Lambert, que afirma que uma superfície que é perpendicular à direção da luz incidente parece mais brilhante que uma superfície inclinada em relação à direção da luz que entra. A Figura 16 mostra uma ilustração simples disso. Observe que nos dois casos a distância entre os raios é a mesma, porém a superfície que é mais perpendicular à luz recebida recebe mais luz por unidade de área.

Figura 16 – Um exemplo de reflexão difusa. Os raios de luz à esquerda são perpendiculares à superfície, iluminando assim a superfície mais do que os raios de luz à direita (que atingem a superfície com algum ângulo)


Como mencionado acima, para reflexão difusa, a luz é refletida uniformemente em todas as direções. Isso significa que a direção da visualização não importa. Materiais foscos e opacos, como giz e argila, normalmente exibem reflexão difusa.

A equação para calcular a reflexão difusa é semelhante à equação para a reflexão ambiente, mas, além da propriedade do difusa do material kd e da componente difusa da luz Id, a reflexão difusa também contém o fator cosθ. É esse fator que é usado na lei de Lambert para levar em consideração a direção da luz que entra. Podemos escrever a equação de duas formas. A primeira forma é a seguinte:

O ângulo θ é definido como o menor ângulo entre a normal da superfície n e o vetor apontando na direção da luz l. A função max() na equação especifica que os valores negativos para cosθ devem ser fixados em zero (ou seja, valores negativos serão definidos em zero). Entenderemos o motivo disso logo mais a frente.

A Figura 17 mostra a geometria da iluminação para a reflexão difusa. Como podemos ver na Equação (2), a luz refletida é maior quando o ângulo θ entre a luz e a normal é 0◦, porque cos0◦1. Quando θ90◦, significa que a luz está vindo paralelamente a superfície. Como cos90◦ é zero, toda a expressão se torna zero, o que significa que nenhuma luz é refletida.

Figura 17 – A geometria da iluminação para reflexão difusa


Quando o termo cosseno é negativo, isso significa que o ângulo θ é maior que 90◦, o que significa que os raios de luz vêm por trás da superfície. Esses raios não iluminam a superfície e, portanto, apenas valores não negativos para o cosseno são considerados. Essa é a razão da função max() que fixa valores negativos de cosseno em zero.

Usando a relação do produto escalar de dois vetores normalizados e o cosseno de ângulo entre eles, podemos expressar o termo cosseno na Equação (2) como:

e isso leva à segunda forma de escrever a equação da reflexão difusa:

Novamente, os valores negativos para o produto escalar na fórmula são fixados em 0. Como os cálculos de iluminação geralmente são feitos no vertex shader ou no fragment shader e a GLSL possui a função interna dot() para calcular o produto escalar, essa segunda definição para a luz difusa geralmente é a mais conveniente para uso em nosso aplicativo.

Reflexão especular

A reflexão especular é característica da luz refletida em uma superfície brilhante, onde um realce brilhante aparece em determinadas direções da visualização. Os espelhos refletem a luz incidente em uma única direção e são considerados refletores especulares perfeitos.

Vimos que a reflexão ambiente e a difusa não levam em consideração a direção da visualização. No entanto, a reflexão especular depende da direção de reflexão, r, da direção da visualização, v, e da normal de superfície, n. A geometria da reflexão especular é mostrada na Figura 18.

Figura 18 – A geometria usada para reflexão especular


Nesta figura, os raios de luz provêm de uma direção específica dada pelo vetor l. Esse vetor está apontando em direção à fonte de luz. Para um objeto muito brilhante, como um espelho, toda a luz geralmente é refletida na direção r. Para objetos menos brilhantes, a luz refletida é espalhada ao redor do vetor r.

A maior parte da luz é refletida para o observador quando o ângulo θ entre v e r é zero. Quanto maior o ângulo θ entre o vetor de reflexão r e o observador v, menos luz é refletida em direção ao observador.

No modelo de reflexão de Phong, esse decaimento é aproximado com cosθ que é elevado à potência α, onde α representa o brilho do material. A equação para a luz especular refletida é escrita da seguinte forma:

Onde, a propriedade especular do material é dada por ks e a componente especular da luz recebida é dado por Is.

De maneira semelhante à reflexão difusa, é possível usar a definição do produto escalar para reescrever a expressão da reflexão especular. Se todos os vetores r, v , e l têm comprimento unitário, a reflexão especular pode ser escrita nesta segunda forma:

A fórmula matemática para calcular o vetor de reflexão r é:

No entanto, não precisamos calcular o vetor de reflexão manualmente. Pois a GLSL contém a função interna útil chamada reflect(), que podemos usar para calcular o vetor de reflexão r com base no vetor l e na normal n; no entanto, precisamos ter cuidado. A função reflect() assume que o vetor que especifica a direção da luz aponta da fonte de luz para a superfície, que é o oposto de como l é definido (como mostra a Figura 18).

O modelo completo

Agora que examinamos as diferentes componentes de reflexão do modelo de reflexão de Phong, é hora de juntar tudo. A equação completa para o modelo de reflexão de Phong pode ser escrita assim:

Se tivermos várias fontes de luz, suas contribuições individuais deverão ser adicionadas à intensidade total da luz. Às vezes, a equação do modelo de reflexão de Phong é escrita com um símbolo soma para mostrar que todos as componentes individuais de todas as fontes de luz devem ser adicionadas.


Anterior Próximo