Modello di riflessione di Phong
Nella computer grafica 3D, il modello di riflessione di Phong è un modello d'illuminazione ed ombreggiatura per calcolare il colore dei punti appartenenti ad una superficie. Venne sviluppato da Bui Tuong Phong durante la sua discussione di dottorato presso l'Università dello Utah. Questa dissertazione prese il nome di "Illumination for Computer Generated Pictures", venne sostenuta nel 1973, insieme ad un metodo che permetteva l'interpolazione di colore per ogni pixel appartenente ad un poligono rasterizzato. La tecnica interpolativa prende il nome di Phong shading, anche nel caso in cui venga utilizzata con modelli di riflessione diversi da quello qui descritto.
Il modello di riflessione di Phong può essere visto come una semplificazione della più generica equazione di rendering; con il vantaggio di semplificare il calcolo del colore di un punto della superficie:
- È un modello di riflessione locale, ovvero non considera riflessioni di secondo ordine, a differenza di quanto fatto dal ray tracing e dalla radiosità. Al fine di compensare la perdita di parte della luce riflessa, un'ulteriore luce ambiente viene aggiunta alla scena.
- Divide la riflessione in tre fattori, riflessione speculare, riflessione diffusiva e riflessione d'ambiente.
Definiamo per prima cosa, per ogni sorgente luminosa, i componenti e , che sono rispettivamente le intensità (spesso misurate in RGB) dei componenti speculare e diffusivo della luce. Una costante controlla la luce ambiente, e viene a volte calcolata come somma dei contributi forniti dalle varie sorgenti.
Se definiamo, per ogni materiale (che solitamente sono assegnati ai materiali con una relazione 1 a 1):
- : costante di riflessione speculare, la percentuale di luce entrante che viene riflessa
- : costante di riflessione diffusiva, la percentuale di luce entrante che viene diffusa (riflettenza Lambertiana)
- : costante di riflessione d'ambiente, percentuale di riflessione della luce ambiente presente in ogni punto della scena
- : costante di lucentezza del materiale in questione, che decide in quale modo la luce viene riflessa.
Definiamo inoltre come insieme di tutte le sorgenti di luce, è la normale in questo punto, è la direzione di un raggio perfettamente riflesso (rappresentato con un vettore), e è la direzione verso chi guarda (ad esempio una camera virtuale).
Il valore di shading per ogni punto della superficie viene calcolato usando questa equazione, che poi sarebbe il Modello di riflessione di Phong:
Il termine diffusivo non utilizza la direzione , dal momento che è costante in tute le direzioni, inclusa la direzione della camera. Il termine speculare è grande se il vettore è quasi allineato con , valore ottenuto misurando con il coseno dell'angolo formato tra di essi, ovvero il prodotto scalare dei vettori normalizzati e . Quando è grande, la superficie si presenta simile ad uno specchio, e la dimensione della riflessione sarà minima grazie all'alto valore del coseno che tende rapidamente a zero se i due vettori non sono allineati.
Quando i colori sono rappresentati con valori RGB, questa equazione viene calcolata separatamente per ogni valore della terna.
Quello di Phong è un modello di riflessione empirico, non basato sulla descrizione fisica dell'interazione di luce, ma piuttosto sull'osservazione informale. Phong osservò che le superfici altamente riflettenti creavano un riflesso piccolo, mentre l'intensità di quelle opache diminuiva in maniera più graduata.
Questa equazione può essere rappresentata in modo grafico:
In questa immagine, i colori "ambiente" e "diffuso" sono gli stessi; notare che l'intensità della componente diffusiva varia al variare della direzione della superficie, mentre la luce ambiente è costante. Il colore speculare è bianco, e riflette quasi tutta la luce entrante, ma solo in un limitato fascio di direzioni.
Metodo di interpolazione Phong shading
Insieme a questo modello di riflessione per la computazione del colore di una superficie, Bui Tuong Phong sviluppò anche un metodo per l'interpolazione del colore di ogni pixel appartenente ad un triangolo rasterizzato. Questi due algoritmi vengono a volte trattati all'unisono assegnandogli il nome di Phong shading.