# Modello di riflessione di Phong

Il modello di riflessione di Phong (anche chiamato Phong illumination o Phong lighting) è un modello empirico di illuminazione locale dei punti su una superficie. Nella computer grafica 3D, si fa spesso ambiguamente riferimento a esso come "Phong shading", in particolare se il modello è utilizzato in combinazione con il metodo di interpolazione che porta lo stesso nome, e nel contesto dei pixel shader o altri ambiti dove un calcolo di illuminazione può essere posto in riferimento allo "shading" (ombreggiatura).

## Storia

Il modello di riflessione di Phong fu sviluppato da Bui Tuong Phong all'Università dello Utah, il quale lo pubblicò nella sua dissertazione di dottorato nel 1975. Fu pubblicato congiunto a un metodo per interpolare il calcolo di ogni pixel individuale che sia rasterizzato da un modello poligonale; la tecnica di interpolazione è conosciuta come Phong shading, anche quando è utilizzata con modello di riflessione diverso dal Phong. I metodi di Phong sono stati considerati radicali al tempo della loro introduzione, e da allora sono diventati la de facto linea base per i metodi di shading di molte applicazioni di rendering. I metodi di Phong sono diventate popolari grazie al loro uso generalmente efficiente del tempo di computazione per pixel renderizzato.

## Aspetti teorici

La riflessione di Phong è modello empirico di illuminazione locale. Esso descrive il modo in cui la 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.
Per ogni sorgente di luce nella scena, vengono rispettivamente definite le componenti $i_{d}$ e $i_{s}$ come le intensità (spesso secondo valori RGB) delle componenti, rispettivamente, diffuse e speculari delle sorgenti di luce. Un singolo termine $i_{a}$controlla l'illuminazione ambientale; è a volte calcolato come la somma dei contributi di tutte le sorgenti luminose.
Per ogni materiale nella scena, vengono definiti i seguenti parametri:
* $k_{s}$, che è la costante di riflessione speculare, il rapporto della riflessione del termine speculare della luce proiettata
* $k_{d}$, che è la costante di riflessione diffusa, il rapporto della riflessione del termine diffuso della luce proiettata (superficie di Lambert)
* $k_{a}$, che è la costante di riflessione ambientale, il rapporto della riflessione del termine ambientale presente in tutti i punti della scena renderizzata
* $\alpha$, che è la costante di lucidità per quel materiale, che è maggiore per le superfici che sono più smussate e più simili a uno specchio. Quando questa costante è grande, il punto luce speculare è piccolo.
In più, abbiamo:
* $luci$, che è l'insieme di tutte le sorgenti luminose
* ${\hat {L}}_{m}$, che è il vettore che va dal punto sulla superficie verso ogni sorgente luminosa ($m$ specifica la sorgente luminosa)
* ${\hat {N}}$ , che è la normale di questo punto sulla superficie
* ${\hat {R}}_{m}$, che è la direzione che un raggio perfettamente riflesso di luce prenderebbe da questo punto sulla superficie
* ${\hat {V}}$, che è la direzione che punta verso l'osservatore (come una camera virtuale)
Quindi il modello di riflessione di Phong fornisce un'equazione per calcolare l'illuminazione di ogni punto $I_{p}$ della superficie:
$I_{p}=k_{a}i_{a}+\sum _{m\;\in \;{\text{luci}}}[k_{d}({\hat {L}}_{m}\cdot {\hat {N}})i_{m,d}+k_{s}({\hat {R}}_{m}\cdot {\hat {V}})^{\alpha }i_{m,s}]$
dove il vettore ${\hat {R}}_{m}$ è calcolato come riflessione di ${\hat {L}}_{m}$ sulla superficie caratterizzata dalla normale ${\hat {N}}$ usando la formula R$^^$$_m$=2(L$^^$$_m$⋅N$^^$)N$^^$−L$^^$$_m${\textstyle {\hat {R}}_{m}=2({\hat {L}}_{m}\cdot {\hat {N}}){\hat {N}}-{\hat {L}}_{m}}. I cappelletti indicano che i vettori sono normalizzati.
Il termine diffuso non è influenzato dalla direzione dell'osservatore ${\hat {V}}$. Il termine speculare è grande solo quando la direzione dell'osservatore ${\hat {V}}$ è allineata con la direzione della riflessione ${\hat {R}}_{m}$. Il loro allineamento è misurato dalla potenza $\alpha$ del coseno dell'angolo tra di essi. Il coseno dell'angolo tra i vettori normalizzati ${\hat {R}}_{m}$ e ${\hat {V}}$ è uguale al loro prodotto scalare. Quando $\alpha$ è grande, nel caso di una riflessione prossima a quella di uno specchio, il punto luce speculare sarà piccolo, perché nessun punto di vista non allineato, avrà un coseno minore di quello che rapidamente tende a zero quando elevato a una potenza elevato.
Sebbene la formulazione scritta sopra sia il modo comune di presentare il modello di riflessione di Phong, ogni termine dovrebbe essere incluso solamente il prodotto scalare del termine è positivo (in più, il termine speculare dovrebbe essere incluso solo se il prodotto scalare del termine diffuso è positivo).
Quando il colore è rappresentato tramite valori RGB, come spesso nel caso della computer grafica, questa equazione è tipicamente modellata separatamente per intensità R,G e B, permettendo di avere costanti di riflessione differenti $k_{a}$, $k_{d}$ e $k_{s}$ per diversi canali di colore.

## Applicazioni

Come già detto, il modello di riflessione di Phong è spesso usato insieme al Phong shading per ombreggiare le superfici nei software di computer grafica 3D. Oltre a questo, potrebbe essere impiegato per altri scopi. Per esempio, è stato usato per modellizzare la riflessione della radiazione termica nel programma Pioneer durante un tentativo di spiegazione dell'anomalia Pioneer.