9.2 Modelo de reflexão de Phong
O modelo de reflexão de Phong (Phong 1973) é um modelo de iluminação local que modela de forma empírica a quantidade de luz refletida de um ponto de uma superfície em uma direção até a câmera. O modelo não é fisicamente correto e, por exemplo, não respeita a lei de conservação de energia. Entretanto, produz resultantes suficientemente adequados para produzir a percepção de objetos iluminados. Além disso, é muito eficiente.
A figura 9.5 ilustra a geometria do modelo de reflexão de Phong considerando apenas uma fonte de luz.
Figura 9.5: Geometria do modelo de reflexão de Phong.
Nessa figura, é o ponto de uma superfície, e é o vetor normal unitário correspondente.
A luz que incide sobre vem de uma direção , onde
é o vetor que vai de até a fonte de luz situada em um ponto , mas normalizado para se transformar em um vetor unitário.
Parte da luz incidente em é refletida na direção do vetor
que é o vetor normalizado de até a câmera posicionada em um ponto .
A intensidade da luz refletida na direção é calculada como a soma de três componentes de reflexão: ambiente (), difusa () e especular ():
A figura 9.6 mostra um exemplo da contribuição de cada componente para a formação da renderização do modelo Stanford Bunny.

Figura 9.6: Soma das componentes de reflexão ambiente, difusa e especular.
Nessa imagem, o coelho está centralizado na origem do espaço do mundo. A câmera está em olhando da direção de negativo, e a fonte de luz está localizada em (acima, à direita e à frente do coelho).
O aspecto de material feito de plástico é característico de superfícies iluminadas com o modelo de reflexão de Phong.
Em geral, uma cena possui mais de uma fonte de luz. Nesse caso, as componentes e devem ser calculadas para cada fonte de luz e então somadas. Se a cena tiver fontes de luz (figura 9.7), então a reflexão deverá ser calculada como
Figura 9.7: Geometria do modelo de reflexão de Phong para a interação com várias fontes de luz.
A seguir, detalharemos as componentes de reflexão ambiente, difusa e especular.
Reflexão ambiente
A componente de reflexão ambiente é uma constante que procura aproximar a iluminação indireta resultante das interreflexões de luz entre as superfícies. A componente não depende da posição de , da posição da câmera ou das fontes de luz , e é computada simplesmente como
onde
- é a constante de reflexão ambiente que determina o quanto o material reflete a luz ambiente.
- é a intensidade de luz ambiente incidente em .
Uma vez que é constante para todos os pontos de um objeto, esse valor pode ser pré-calculado e reutilizado em todos os pontos.
Na maioria das aplicações, é um valor bastante baixo. A figura 9.8 mostra o resultado da renderização usando apenas a componente de reflexão ambiente, com e . O objeto é desenhado com um tom de cinza, que neste caso é a cor RGB , isto é, cada componente de cor é o próprio valor .

Figura 9.8: Renderização usando apenas a componente ambiente.
Mais adiante descreveremos como estender o cálculo de reflexão para gerar cores em vez de tons de cinza.
Reflexão difusa
A componente de reflexão difusa representa a luz que é refletida supondo que faz parte de uma superfície difusa ideal, também chamada de superfície lambertiana em homenagem ao matemático e físico suíço Johann Heinrich Lambert (1728–1777), que introduziu tal conceito.
Não há superfícies idealmente difusas no mundo físico. Entretanto, aproximações incluem, por exemplo, paredes de gesso e argamassa, e superfícies em geral que possuem aspecto fosco. Superfícies difusas são aquelas que não possuem brilho especular.
Em uma superfície lambertiana, a luz que incide sobre é refletida igualmente em todas as direções, como ilustra a figura 9.9.
Figura 9.9: Reflexão difusa ideal.
A intensidade da luz refletida é proporcional ao cosseno do ângulo entre e (relação chamada de lei do cosseno de Lambert), que é o mesmo que o produto escalar entre os vetores unitários:
Observe que esse valor é também a projeção escalar de sobre .
Quanto maior o ângulo entre e , menor a intensidade da reflexão difusa. A intensidade é mínima quando os vetores são perpendiculares, pois , e máxima quando paralelos, pois . Isso ocorre porque a energia luminosa que incide sobre uma área da superfície é mais concentrada quanto mais perpendicular a luz estiver em relação à superfície (figura 9.10).
Figura 9.10: A concentração da luz em uma superfície depende da orientação da luz em relação à superfície.
Esse fator de atenuação da reflexão da luz está presente na equação de renderização, através do termo da integral:
Em uma superfície idealmente difusa, a BRDF é uma constante, isto é, . Logo, a equação de renderização torna-se
O modelo de reflexão de Phong aproxima isso calculando a componente difusa como
onde
- é a constante de reflexão difusa que determina o quanto o material reflete a luz difusa.
- é a intensidade de luz difusa incidente em .
- é o fator de atenuação relacionado à lei de cosseno de Lambert. São válidos apenas os valores no intervalo .
A figura 9.11 mostra o resultado da renderização usando apenas a componente de reflexão difusa, com e .

Figura 9.11: Renderização usando apenas a componente difusa.
Se tivermos fontes de luz, cada fonte de luz terá seu próprio vetor e sua própria intensidade . A componente deverá levar em conta a soma de todas essas intensidades:
Note a semelhança entre e a integral da equação de renderização com BRDF constante:
- A integral é substituída pelo somatório, pois as fontes de luz podem ser consideradas como pontos discretos no espaço;
- é uma aproximação de para a incidência da luz da -ésima fonte de luz;
- é .
Note também que não usa o vetor , que é o vetor de direção até a câmera. Isso significa que a componente de reflexão difusa não depende da posição da câmera.
Se a cena é estática, isto é, se os objetos e as fontes de luz não se movem, a componente de reflexão difusa de cada ponto pode ser pré-calculada. Essa característica é explorada na técnica de radiosidade (Greenberg, Cohen, and Torrance 1986). A técnica considera que todas as superfícies da cena são lambertianas. Desse modo, a solução da equação de renderização pode ser pré-computada e a intensidade de reflexão difusa pode ser gravada como a “cor” de cada vértice. A cena pode então ser visualizada por uma câmera LookAt em tempo real.
Reflexão especular
Uma superfície idealmente especular é um espelho ideal. A luz que incide em é refletida apenas na direção reflexa do vetor em torno de , como mostra a figura 9.12.
Figura 9.12: Reflexão especular ideal.
O vetor de reflexão ideal é calculado como
A figura 9.13 mostra uma interpretação geométrica desssa expressão.
Figura 9.13: Calculando o vetor de reflexão especular.
No modelo de reflexão de Phong, a reflexão especular é um valor que varia de acordo com o ângulo formado entre e :
onde
é a constante de reflexão especular que determina o quanto o material reflete a luz especular.
é a intensidade de luz especular incidente em .
é uma constante que determina o espalhamento do brilho especular. É uma propriedade do material.
Quanto maior é o valor de , mais concentrado será o brilho especular. Desse modo, define o quão “lustro” é o material. Se , o resultado é um superfície especular ideal (espelho ideal).
é o cosseno do ângulo entre e . São válidos apenas os valores no intervalo .
O brilho especular é máximo () se .
O brilho especular é mínimo () se e são perpendiculares.
A figura 9.14 mostra o resultado da variação do brilho especular para diferentes valores de e ilustra a variação correspondente de . As renderizações consideram os valores de intensidade ambiente e difusa mostrados nas figuras 9.8 e 9.11.

Figura 9.14: Renderização usando diferentes valores de brilho especular.
A figura 9.15 mostra o resultado da renderização usando apenas a componente de reflexão especular, com e e .

Figura 9.15: Renderização usando apenas a componente especular.
Se tivermos fontes de luz, cada fonte de luz terá seu próprio vetor e sua própria intensidade . A componente deverá levar em conta a soma de todas essas intensidades:
Modelo completo
Combinando as componentes ambiente, difusa e especular, temos a equação completa
A equação pode ser avaliada em um vertex shader ou fragment shader, pois podemos armazenar as seguintes informações como variáveis uniformes (uniform
):
- (constante de espalhamento de brilho especular).
- (número de fontes de luz).
- , , (coeficientes de reflexão do material).
- , , (intensidades de luz, em um arranjo de elementos, um para cada fonte de luz).
Além disso, pode ser pré-calculado como um atributo do vértice, isto é, como um VBO de vetores normais de vértices.
Podemos calcular como
onde é a posição da fonte de luz, que também pode ser armazenada como uma variável uniforme, e é o atributo de posição do vértice atual (caso a equação seja avaliada no vertex shader) ou fragmento atual (caso a equação seja avaliada no fragment shader).
Podemos calcular como
onde é a posição da câmera. Se considerarmos que está no espaço da câmera, então a posição da câmera é a origem:
e assim não é necessário enviar ao shader como uma variável uniforme.
Como já vimos, pode ser calculado como
Enfim, temos tudo o que é preciso para implementar o modelo de reflexão de Phong no pipeline gráfico. Faremos isso em um passo a passo de implementação nas seções 9.5 e 9.6.
Iluminação colorida
Até agora só consideramos fontes de luz e materiais monocromáticos. Se quisermos representar fontes de luz coloridas ou materiais coloridos, devemos calcular para cada uma das componentes RGB. Assim, as constantes de material (, , ) e as intensidades (, , ) de cada fonte de luz deverão ser tuplas de três elementos:
e
Os elementos dessas tuplas correspondem a cores RGB. Por exemplo, um objeto de cor vermelha poderá ser especificado com um material com constante de reflexão difusa
Isso significa que o material reflete toda luz vermelha () e absorve completamente as outras cores () das fontes de luz.
Alguns exemplos de materiais são mostrados na figura 9.16. Todos esses materiais estão sendo iluminados por uma fonte de luz branca, isto é, .

Figura 9.16: Diferentes materiais no modelo de Phong.
Como regra geral, se o material não é um metal, deve ter o mesmo valor para cada componente RGB, pois a cor do brilho especular deve ser a cor da fonte de luz. Se o material é um metal, deve ser a cor do material. Por exemplo, em um objeto feito de ouro, a cor especular deve ser amarelada.
A cor de uma fonte de luz pode ser especificada através da intensidade de luz difusa. Por exemplo, uma luz verde é definida com
Suponha que a luz verde ilumine um material vermelho com . O resultado de (multiplicação elemento a elemento) será a cor preta
Isso faz sentido pois, de fato, um objeto vermelho têm a aparência de um objeto preto quanto iluminado por uma luz verde.
Fontes de luz
Até agora, consideramos que cada fonte de luz do modelo de reflexão de Phong é um ponto no espaço. Essa é a definição de uma fonte de luz pontual.
Além da luz pontual, também é comum o uso de luz direcional. A seguir, definiremos a luz direcional e revisitaremos a definição de luz pontual com a introdução do conceito adicional de atenuação espacial.
Luz pontual
Uma fonte de luz pontual é definida por um ponto que emite luz em igual intensidade em todas as direções, como uma lâmpada tradicional de bulbo.
Se é a posição da luz, então o vetor do modelo de reflexão é definido como
Podemos simular um efeito de atenuação da luz, isto é, diminuição da intensidade da fonte de luz de acordo com a distância do ponto em relação ao ponto .
As intensidades que devem ser atenuadas são as contantes (intensidade difusa) e (intensidade especular). Opcionalmente, podemos atenuar (intensidade ambiente) caso consideremos que a fonte de luz em questão contribui para a intensidade ambiente.
No mundo real, a intensidade luminosa é proporcional ao inverso da distância ao quadrado. Entretanto, podemos obter um maior controle artístico se considerarmos que o fator de atenuação é definido de forma mais geral como:
onde
- é a distância, isto é, .
- , e são, respectivamente, os termos constante, linear e quadrático da atenuação. Esses valores devem estar no intervalo .
Em geral, para evitar que o valor de atenuação seja maior que .
Geralmente, e , mas a escolha dos valores dependerá do efeito desejado. Um bom ponto de partida é começar com . Isso faz com que a fonte de luz ilumine objetos até aproximadamente . Quanto menor o valor de e , maior a distância coberta pela fonte de luz.
Se considerarmos que todas as fontes de luz são pontuais e atenuadas, podemos reformular o modelo de reflexão como a seguir:
onde é o fator de atenuação da -ésima fonte de luz. Note que o termo é atenuado for . Isso supõe que todas as fontes de luz contribuem igualmente para a intensidade .
Luz direcional
A fonte de luz direcional simula o comportamento de uma fonte de luz pontual infinitamente distante, de tal modo que os raios de luz que chegam à superfície são paralelos entre si. No mundo físico, uma aproximação de fonte de luz direcional é a luz do sol.
A luz direcional é definida simplesmente por um vetor de direção da luz. Não há posição do espaço, logo não há como calcular a atenuação.
Dada uma direção de luz direcional, o vetor do modelo de reflexão de Phong é definido como