1. Quais são os passos para implementar o sombreamento de Phong em um rasterizador?

Passo 1

O enunciado pede que implementemos o sombreamento de Phong num rasterizador. O conteúdo principal é o modelo de iluminação de Phong, que soma três componentes—ambiente, difusa e especular—e exige interpolação de normais e cálculo de vetores de luz e de visão por pixel.

Passo 2

No estágio de vértice do pipeline, para cada vértice do triângulo fazemos:
1. Transformar a posição do vértice do espaço objeto para o espaço da câmera (ou espaço de recorte).
2. Transformar a normal do vértice usando a matriz inversa transposta do modelo.
3. Enviar ao rasterizador como atributos de vértice: a posição projetada, a normal transformada e, se houver, parâmetros de material ( k_a,k_d,k_s,n ) e a cor da luz ambiente.

Passo 3

Durante a rasterização, para cada fragmento (pixel) dentro do triângulo:
1. Calcular as coordenadas baricêntricas para obter a interpolação linear (ou perspectiva-correta) de posição no espaço da câmera, normal e parâmetros de material.
2. Executar o teste de profundidade (z-buffer) e descartar o fragmento se perder o teste.

Passo 4

Com os atributos interpolados do fragmento, montar os vetores necessários e normalizá-los:
1. \mathbf{N} = normal interpolada do fragmento, normalizada.
2. \mathbf{L} = vetor da posição do fragmento até a fonte de luz, normalizado.
3. \mathbf{V} = vetor da posição do fragmento até a câmera (ou olho), normalizado.
4. \mathbf{R} = vetor de reflexão de \mathbf{L} em \mathbf{N}, dado por
\mathbf{R} = 2(\mathbf{N}\cdot\mathbf{L})\,\mathbf{N} - \mathbf{L}\,.

Passo 5

Calcular cada componente do modelo de Phong:
Ambient:
I_{a} = k_{a}\,I_{aL}
Difusa:
I_{d} = k_{d}\,\max(0,\mathbf{N}\cdot\mathbf{L})\,I_{L}
Especular:
I_{s} = k_{s}\,\max(0,\,\mathbf{R}\cdot\mathbf{V})^{n}\,I_{L}
onde I_{aL} e I_{L} são as intensidades da luz ambiente e da luz pontual, e n é o expoente de brilho do material.

Passo 6

Somar as componentes e limitar (clamp) cada canal de cor a [0,1]:
I = I_{a} + I_{d} + I_{s}\,.
Escrever I no framebuffer no canal de cor do fragmento.

Resposta

1. Transformar vértices e normais no estágio de vértice e enviar atributos (posição, normal, material).
2. Rasterizar triângulos e interpolar por pixel posição, normal e material (perspectiva-correto).
3. Testar profundidade (z-buffer) e descartar fragmentos perdedores.
4. Para cada fragmento, normalizar \mathbf{N}, \mathbf{L}, \mathbf{V} e calcular \mathbf{R}.
5. Calcular componentes de Phong:
I_{a}=k_{a}I_{aL},\quad I_{d}=k_{d}\max(0,\mathbf{N}\cdot\mathbf{L})I_{L},\quad I_{s}=k_{s}\max(0,\mathbf{R}\cdot\mathbf{V})^{n}I_{L}.
6. Somar I=I_{a}+I_{d}+I_{s}, clamp em [0,1] e gravar no framebuffer.

Exercícios relacionados