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.




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 que contém um valor RGB e uma propriedade de material ambiente chamada
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
que é refletida da superfície com a seguinte equação:
Então, o que fazemos é uma multiplicação de e
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.

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 e da componente difusa da luz
, a reflexão difusa também contém o fator
. É 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
e o vetor apontando na direção da luz
. A função
() na equação especifica que os valores negativos para
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 é
, porque
é
. Quando
é
, significa que a luz está vindo paralelamente a superfície. Como
é zero, toda a expressão se torna zero, o que significa que nenhuma luz é refletida.

Quando o termo cosseno é negativo, isso significa que o ângulo é maior que
, 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
() 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, , da direção da visualização,
, e da normal de superfície,
. A geometria da reflexão especular é mostrada na Figura 18.

Nesta figura, os raios de luz provêm de uma direção específica dada pelo vetor . 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
. Para objetos menos brilhantes, a luz refletida é espalhada ao redor do vetor
.
A maior parte da luz é refletida para o observador quando o ângulo entre
e
é zero. Quanto maior o ângulo
entre o vetor de reflexão
e o observador
, menos luz é refletida em direção ao observador.
No modelo de reflexão de Phong, esse decaimento é aproximado com 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 e a componente especular da luz recebida é dado por
.
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 ,
, e
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 é:
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 com base no vetor
e na normal
; 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 é 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 para mostrar que todos as componentes individuais de todas as fontes de luz devem ser adicionadas.