17. Mais sobre Iluminação e Sombreamento#
Na aula passada introduzimos as componentes do modelo de reflexão de Phong. Nessa aula vamos descrever como calcular e combinar essas componentes para criar uma imagem mais realista com efeitos de iluminação criados por esse modelo.
17.1. Vetores usados no modelo#
O sombreamento de um ponto em uma superfície é uma função da relação entre o observador, as fontes de luz e a superfície. Lembre-se que, por se tratar de um modelo de iluminação local, os outros objetos da cena são ignorados.
Para determinar a cor resultante da iluminação e sombreamento em um ponto

Fig. 17.1 Vetores usados para calcular as reflexões do modelo de Phong.#
- Vetor normal
um vetor
perpendicular à superfície e direcionado para fora do objeto. Existem várias maneiras de calcular vetores normais, dependendo da representação do objeto subjacente. Como no WebGL usamos basicamente triângulos, o seguinte método é suficiente. Dados quaisquer três pontos não colineares, , e de um triângulo, podemos calcular a normal como um produto vetorial de dois dos vetores associados. .O vetor resultante apontará para fora se a tripla (
) estiverem ordenados no sentido anti-horário quando vistos de fora.
- Vetor vista
um vetor
que aponta para a câmera ou observador.
- Vetor luz
um vetor
que aponta para a fonte de luz.
- Vetor de reflexão
um vetor
que aponta na direção da reflexão da luz incidente. Lembre-se da regra que o ângulo de incidência com a normal deve ser o mesmo que o do raio refletido com a normal.O cálculo de
é um bom exercício de aritmética vetorial e está ilustrado na Figura Fig. 17.1 b. Primeiro, vamos decompor o vetor luz em duas partes: uma paralela e outra ortogonal a : onde e .O vetor de reflexão pode ser calculado subtraindo
de tal que: .
- Vetor halfway
um vetor
intermediário entre e . Como está na metade do caminho entre e , e ambos foram normalizados (tem comprimento unitário), podemos calcular como a média desses dois vetores e normalizando o resultado. Devido a normalização, a divisão por 2 para calcular a média não é necessária. .
17.2. Cálculo da iluminação usando o modelo de Phong#
Não há muitos exemplos de objetos que sejam refletores puramente difusos ou puramente especulares. O modelo de reflexão de Phong é baseado na suposição que podemos modelar (razoavelmente bem) os efeitos de iluminação sobre a superfície de qualquer objeto (sem textura) por meio de uma mistura de componentes de reflexão puramente difusos e especulares juntamente com emissão e reflexão ambiente. Vamos ignorar a emissão por enquanto, pois é a mais rara do grupo e será fácil de adicionar ao final do processo.
As propriedades do material da superfície de cada objeto serão especificadas por vários parâmetros, indicando a cor intrínseca do objeto e sua refletância ambiente, difusa e especular. Seja
17.2.1. Luz ambiente#
A luz ambiente é a mais simples de calcular. Seja
.
Esse coeficiente define a fração da luz ambiente que é refletida pela superfície. A componente de reflexão ambiente é calculada como:
.
Observe que essa é uma equação vetorial, cujo resultado é uma cor RGB.
17.2.2. Reflexão difusa#
Para calcular a componente devido à reflexão difusa vamos assumir que a luz incidente de qualquer direção é refletida uniformemente em todas as direções. Uma superfície assim é chamada de refletor lamberciano. A explicação física para esse tipo de reflexão é que, a um nível microscópico, o objeto possui irregularidades que espalham a luz uniformemente em todas as direções.
A iluminação sobre superfícies lambercianas depende da orientação da superfície com relação a fonte de luz. Por isso algumas partes da superfície aparecem mais brilhantes que outras.
As regiões da superfície mais perpendiculares ao vetor que aponta para a fonte de luz (

Fig. 17.2 Reflexão difusa segue a lei do cosseno de Lambert.#
A Figura Fig. 17.2 mostra que, à medida que o ângulo
O parâmetro chave do acabamento da superfície que controla a reflexão difusa é
.
Essa componente é sujeita a atenuação, dependendo da distância do objeto à fonte de luz.
17.2.3. Reflexão especular#
A maioria dos objetos não são refletores lambercianos perfeitos. Um dos desvios mais comuns ocorre com objetos metálicos lisos ou altamente polidos. Esses objetos costumam apresentar pontos brilhantes resultado da reflexão especular.
Teoricamente, esses pontos surgem porque, a um nível microscópico, ao invés da luz ser espalhada perfeitamente por micro rugosisades, a superfície é suave a ponto de se comportar parcialmente como um espelho, como ilustrado na Figura Fig. 16.1.
Existem duas formas comuns de modelar a reflexão especular. O modelo original de Phong usa o vetor de reflexão, como derivado anteriormente. Uma segunda forma, um pouco mais eficiente, usa um vetor chamado halfway vector e produz essencialmente o mesmo resultado.
Observe que se a direção da câmera (ou olho) estiver perfeitamente alinhada com o vetor de reflexão
Os parâmetros de acabamento da superfície que controlam a reflexão especular são
.
Assim como a componente difusa, essa componente também é sujeita à atenuação.
17.2.4. Juntando tudo#
Todas as componentes, incluindo
;
.
Lembre-se que essa é uma equação vetorial, calculada componente a componente para R, G e B. Para múltiplas fontes de luz, precisamos somar as componentes ambiente, difusa e especular provenientes de cada fonte.
17.3. Onde estamos e para onde vamos?#
Nessa aula vimos como calcular a iluminação resultante das componentes de reflexão do modelo de Phong: emissão, ambiente, difusão e especular.
Na próxima aula, veremos como aplicar esse modelo para renderizar imagens usando WebGL.
17.4. Para saber mais#
Capítulo 6 do livro “Interactive Computer Graphics, 8th edition” de Angel e Shreiner.
Aula 12 das Notas de aula do Prof. Dave Mount.