# Phong shading

Il Phong shading è un metodo di interpolazione di computer grafica 3D, che utilizza l'interpolazione delle normali nella rasterizzazione dei poligoni, per ottenere migliori risultati delle riflessioni speculari tipo quelle generate dal Modello di riflessione di Phong.
Dal momento che le pubblicazioni dell'inventore del metodo combinò le tecniche d'interpolazione con il proprio modello di riflessione, il termine Phong shading è diventato d'uso comune per indicare anche il modello di riflessione o la combinazione di modello di riflessione e modello d'interpolazione.
Questi algoritmi vennero sviluppati da Bui Tuong Phong, che li pubblicò nella sua dissertazione all'Università dello Utah nel 1975.

## Modello di illuminazione o riflessione di Phong

La riflessione di Phong è un modello empirico di illuminazione locale. Esso descrive il modo in cui una superficie riflette la luce, come una combinazione della riflessione diffusa delle superfici ruvide con la riflessione speculare delle superfici lucide. È basato sull'informale osservazione di Phong per cui le superfici lucide presentano piccoli intensi punti luce, mentre le superfici smussate presentano punti luce più grandi che decadono (fall off) più gradualmente. Il modello include anche un termine di riflessione ambientale per tenere conto della piccola quantità di luce che si disperde nell'intera scena.
Il modello di riflessione non contiene elementi specifici per poligoni o pixel, a differenza del modello d'interpolazione.

## Interpolazione di Phong

Come metodo di rendering, il Phong Shading può essere visto come un miglioramento del Gouraud shading che fornisce una miglior approssimazione all'applicazione punto-punto di un modello di riflessione sottostante, assumendo una variazione gradiente della normale alla superficie. Il metodo d'interpolazione di Phong ha un funzionamento migliore di quello di Gouraud se applicato al modello di riflessione di Phong o a qualsiasi altro modello di riflessioni che generi riflessioni con un angolo limitato (ovvero superfici molto riflettenti).
Il problema principale del Gouraud Shading si ha quando la riflessione è vicina al centro di un grande triangolo. In pratica la riflessione non verrà mostrata, a causa dell'interpolazione di colori tra i vertici. Questo problema è stato corretto dal Phong shading.
Siano dati tre vertici in due dimensioni, $v_{1}$, $v_{2}$ e $v_{3}$, e le normali alle superfici per ogni vertice $n_{1}$, $n_{2}$ e $n_{3}$; supponiamo che siano tutte di lunghezza unitaria. A differenza del Gouraud shading, che interpola il colore lungo il triangolo, nel metodo di Phong interpoliamo linearmente la normale $N$ lungo la superficie del triangolo, partendo dalle tre normali date. Questo calcolo viene effettuato per ogni pixel del triangolo, ed in ogni pixel normalizziamo $N$ e la usiamo all'interno del modello d'illuminazione di Phong per ottenere il colore da assegnare al pixel.
In alcuni sistemi hardware, le varianti di questo algoritmo vengono chiamate pixel/fragment shader. Solitamente sta a significare che il calcolo di luce può essere fatto pixel per pixel, e che le variabili luminose (incluse le normali alla superficie o un qualche vettore approssimativo) vengono interpolate lungo il poligono.