|
|
|
cignoni@iei.pi.cnr.it |
|
http://vcg.iei.pi.cnr.it/~cignoni |
|
|
|
|
|
|
In termini matematici un modello di
illuminazione viene rappresentato da un’equazione di illuminazione che
descrive come ogni punto dell’oggetto è illuminato in funzione della sua
posizione nello spazio |
|
Il processo di calcolo dell’equazione di
illuminazione in uno o più punti dell’oggetto da illuminare si chiama lighting |
|
|
|
|
Le formule che vedremo, elaborate da Phong
intorno alla metà degli anni '70, si riferiscono a luce monocromatica
(bianca) |
|
Questo perché è il caso più diffuso |
|
Si possono facilmente estendere a luci di colore
qualsiasi esprimendo il colore della luce in termini delle sue componenti
RGB e calcolando tre diverse equazioni di illuminazione per ognuna delle
componenti |
|
|
|
|
L’unico fenomeno fisico modellato è la
riflessione diretta, non ci occupiamo della modellazione della rifrazione |
|
Le equazioni che vedremo, quindi, riescono a
simulare solo il comportamento di materiali opachi e non di materiali
trasparenti o semi-trasparenti |
|
|
|
|
Il modello di illuminazione più semplice, ma
anche il meno realistico è quello che abbiamo, implicitamente, assunto fino
ad adesso: ogni oggetto è dotato di una propria intensità luminosa, senza
che vi siano fonti esterne di illuminazione |
|
|
|
|
Il risultato è quello di avere un mondo di
sagome monocromatiche (a meno che i singoli poligoni di un poliedro non
abbiano diversi colori) |
|
Questo modello elementare può essere descritto
dall’equazione |
|
|
|
dove I è l’intensità risultante ed il
coefficiente ki è la luminosità intrinseca dell’oggetto |
|
|
|
|
Non essendoci termini dipendenti dalla posizione
del punto si può calcolare I una sola volta per tutto l’oggetto |
|
|
|
|
Se supponiamo di posizionare nella nostra scena
una sorgente luminosa puntiforme (point light source) i cui raggi sono
emessi uniformemente in tutte le direzioni la luminosità di ogni singolo
punto dell’oggetto dipende dalla sua distanza dalla sorgente luminosa e
dalla direzione in cui i raggi incidono rispetto alla superficie |
|
|
|
|
Superfici opache come il gesso o il legno
presentano un tipo di riflessione particolare: non modificano la loro
apparenza al variare del punto di vista dato che riflettono la luce
uniformemente in tutte le direzioni |
|
Questo tipo di comportamento si chiama riflessione
diffusa (diffuse reflection o Lambertian reflection) |
|
|
|
|
In questo modello la luminosità dipende solo
dall’angolo q formato dalla direzione del raggio luminoso (L) e la normale alla
superficie nel punto di incidenza (N) |
|
|
|
|
La quantità di luce che arriva all’osservatore è
data (per superfici totalmente opache o lambertiane) dalla legge di Lambert |
|
|
|
|
|
|
L’equazione dell’illuminazione, per l’apporto
dato dalla riflessione diffusa, è |
|
|
|
|
|
Ip è l’intensità della sorgente
luminosa e kd è il coefficiente di riflessione diffusa del
materiale (diffuse reflection coefficient) che assume valori tra 0 e 1 |
|
|
|
|
L’angolo q deve avere un valore compreso tra 0° e 90° per contribuire
all’illuminazione del punto, in altre parole un punto della superficie non
è illuminato da sorgenti luminose che stanno dietro di esso |
|
Se i vettori N e L sono normalizzati si può
riscrivere l’equazione utilizzando il loro prodotto scalare |
|
|
|
|
Se la sorgente luminosa è posta a distanza
infinita dall’oggetto che illumina, l’angolo tra i raggi di luce e tutte le
superfici parallele è costante |
|
In questo caso la sorgente luminosa si dice
direzionale (directional light source) e l’allineamento del vettore L è una
costante della sorgente |
|
|
|
|
Per tener conto anche dell’attenuazione
dell’intensità dell’illuminazione all’aumentare della distanza si introduce
anche un fattore di attenuazione (attenuation factor) fatt,
inversamente proporzionale alla distanza della sorgente di luce dalla
superficie |
|
|
|
|
Questo fattore può essere essenziale, ad
esempio, per distinguere nella scena due superfici parallele dello stesso
materiale che nell’immagine si sovrappongono: senza bordo di separazione le
due superfici sarebbero indistinguibili |
|
|
|
|
Una tipica formulazione, abbastanza empirica, di
fatt è |
|
|
|
|
|
|
|
dove le costanti c1, c2 e c3
sono definite dall’utente e associate alla sorgente luminosa |
|
|
|
|
Il termine fondamentale dipendente dal quadrato
della distanza (dL2) è bilanciato dagli altri,
soprattutto da c1, che, nel caso che la luce sia molto vicina,
prevengono il denominatore dal divenire troppo piccolo |
|
L’espressione è comunque limitata ad 1 per
evitare che diventi un fattore di amplificazione |
|
|
|
|
Se la superficie di un oggetto non è totalmente
opaca la luce non viene riflessa in maniera eguale in tutte le direzioni |
|
|
|
|
Da una superficie totalmente lucida, come uno
specchio, la luce viene, infatti, riflessa solo nella direzione di
riflessione R che, geometricamente, non è altro che L (direzione di
incidenza) riflessa rispetto a N (normale alla superficie) |
|
|
|
|
L’osservatore può vederla solo se la direzione
di vista è allineata con la riflessione, cioè se l’angolo a è uguale a 0 |
|
|
|
|
Phong ha però sviluppato anche un modello di
illuminazione per riflettori non perfetti, come ad esempio un oggetto di
plastica o di cera |
|
Il modello assume che si abbia riflessione
massima per a=0 e che essa decada rapidamente all’aumentare di a |
|
|
|
|
Un tale decadimento viene approssimato da cosna dove n è detto
esponente di riflessione speculare (specular reflection exponent) del
materiale |
|
|
|
|
Il valore di n può variare tra 1 e valori molto
alti (anche sopra a 100) a seconda del tipo di materiale che si vuole
simulare |
|
|
|
|
Una superficie perfettamente a specchio sarebbe
teoricamente rappresentata da un n infinito |
|
|
|
|
Aggiungendo la componente di riflessione
speculare l’equazione di illuminazione diviene |
|
|
|
|
|
dove ks è il coefficiente di
riflessione speculare (specular reflection coefficient) con intervallo di
variazione [0¸1] |
|
|
|
|
Se anche i vettori R e V sono normalizzati
l’equazione si può riscrivere come |
|
|
|
|
|
che rappresenta il nostro modello completo
di equazione di illuminazione diretta |
|
|
|
|
Per aumentare il realismo della scena possiamo
pensare che l’oggetto, anziché essere dotato di luminosità propria, sia
illuminato da una sorgente di luce diffusa e non direzionale, quale il
prodotto del riflesso della luce sulle molteplici superfici presenti
nell’ambiente |
|
|
|
|
Oggetti illuminati con un modello di
illuminazione comprendente solo il termine di illuminazione diffusa e
speculare risultano non troppo realistici, come se fossero illuminati da
una torcia in un ambiente altrimenti completamente oscuro |
|
|
|
|
Questo contributo si chiama luce ambientale (ambient
light) |
|
Assumendo che il suo contributo non dipenda
dall’orientamento delle superfici, l’equazione diviene |
|
|
|
|
Ia è l’intensità della luce
ambientale ed è costante per tutti gli oggetti |
|
L’ammontare di luce riflesso dalla superficie
dell’oggetto è determinata dal coefficiente di riflessione ambientale ka
che varia nell’intervallo [0¸1] |
|
|
|
|
Gli oggetti illuminati da sola luce ambientale
sono ancora uniformemente illuminati su tutta la loro superficie |
|
|
|
|
|
|
Dato che nella realtà si ha quasi sempre una
certa luce di sottofondo (nell’ambiente) aggiungendo al modello anche il
termine ambientale si ottiene un effetto più realistico |
|
|
|
|
Alla scena precedente abbiamo aggiunto una luce
ambiente |
|
|
|
|
|
|
L’equazione di illuminazione deve comunque
essere valutata in coordinate di occhio perché sia le trasformazioni
prospettiche che quelle di normalizzazione potrebbero portare N a non
essere più perpendicolare alla superficie cui si riferisce. |
|
|
|
|
|
Utilizzando il modello di Phong si dovrebbe
calcolare l’apparenza visuale (il colore) di ogni punto di ogni superficie
nella scena in due passi: |
|
calcolando la normale alla superficie nel punto |
|
applicando il modello di illuminazione |
|
|
|
|
Questo approccio è troppo dispendioso per essere
adottato realmente e quindi si ricorre a metodi di shading (o
determinazione dell’illuminazione) delle superfici approssimati ma molto
meno costosi che operano sui poligoni come entità elementari anziché punto
per punto |
|
|
|
|
Il modello più semplice di shading per un
poligono è il constant shading (o flat shading) |
|
Consiste nell’applicare il modello di
illuminazione scelto una sola volta per ogni poligono della scena e poi
usare il valore determinato per l’intera superficie del poligono |
|
|
|
|
Una griglia di poligoni (in questo caso
quadrilateri) rappresentata con flat shading |
|
|
|
|
|
Questo metodo aderisce al modello di Phong
quando si verificano le seguenti condizioni: |
|
La sorgente di luce è posizionata all’infinito (direzionale)
cosicché N×L=k
su tutta la superficie del poligono |
|
L’osservatore è all’infinito (proiezioni
parallele) cosicché N×V=k e R×V=k su tutta la superficie del poligono |
|
Il poligono rappresenta effettivamente la
superficie modellata e non è parte di un’approssimazione poligonale a
tratti di una superficie curva |
|
|
|
|
La tecnica di flat shading è estremamente
efficiente, poiché l’equazione di illuminazione va calcolata una sola volta
per ogni poligono |
|
Tuttavia, il risultato visivo può non essere del
tutto soddisfacente |
|
Se la mesh (griglia) di poligoni approssima una
superficie più complessa lascia visibile la suddivisione in poligoni, senza
rendere nell’immagine l’andamento della superficie approssimata |
|
|
|
|
In alternativa a valutare l’equazione di
illuminazione in tutti i punti del poligono si può pensare di calcolarne i
valori in ogni vertice ed interpolarli linearmente (all’interno dello
spazio colore) per trovare i valori sui lati e nei punti interni |
|
Questa tecnica, dapprima proposta per triangoli,
è stata in seguito estesa a poligoni generici |
|
|
|
|
All’interno di un algoritmo di rasterizzazione
che determina i pixel che rappresentano la proiezione di un poligono 3D,
applicare l’interpolazione anche dello shading comporta uno sforzo minimo |
|
|
|
|
Per ogni span il valore all’estremo può essere
calcolato con un algoritmo incrementale, e, sempre incrementalmente, si
possono calcolare i valori all’interno della span |
|
|
|
|
Questo non risolve però il problema di visualizzare
correttamente una superficie curva con una mesh di poligoni |
|
Se lo shading (costante o interpolato) viene
fatto indipendentemente su ogni poligono si ha comunque una netta
visibilità, non voluta, dei bordi tra due poligoni adiacenti causata dalla
brusca variazione della normale alla superficie |
|
|
|
|
|
A causa del cosiddetto effetto Mach banding (dal
nome del suo scopritore) anche una maggiore finezza della griglia di
poligoni non riduce le discontinuità di shading tra i poligoni adiacenti |
|
Questo effetto è quello per cui un oggetto messo
vicino ad uno più chiaro risulta più scuro e messo vicino ad uno più scuro
risulta più chiaro |
|
|
|
|
Questo è causato, fisiologicamente, dall’effetto
inibitore laterale dei recettori dell’occhio: più luce un recettore riceve,
più inibisce la risposta dei recettori vicini |
|
|
|
|
Per ovviare a questo inconveniente si sono
sviluppati dei modelli di shading che tengono conto delle informazioni date
da poligoni adiacenti |
|
Il modello di Gouraud (Gouraud shading), è
l’evoluzione diretta del metodo con interpolazione del colore su poligoni
singoli |
|
|
|
|
Nel Gouraud shading si tiene conto della
geometria effettiva che si sta visualizzando: se la griglia di poligoni
rappresenta una superficie curva, per ogni vertice della griglia non si
utilizza la normale al poligono ma la normale alla superficie |
|
|
|
|
In questa maniera il calcolo dello shading
produce lo stesso valore su entrambi i lati di poligoni che hanno bordi in
comune rendendo lo shading complessivo privo di salti |
|
|
|
|
Il metodo richiede che sia nota la normale alla
superficie che si approssima in ogni vertice |
|
Se non è disponibile, si approssima con la media
delle normali ai poligoni che condividono il vertice |
|
|
|
|
Se uno spigolo deve essere visibile (ad esempio
lo spigolo di raccordo tra la superficie dell’ala e della fusoliera di un
aereo) si generano due insiemi di normali su ciascuno dei due lati dello
spigolo |
|
|
|
|
Una volta calcolate (o ricavate analiticamente)
le normali in ogni vertice si applica il modello di illuminazione per
calcolare il valore di shading nel vertice e si interpola linearmente,
all’interno dei poligoni, con lo stesso procedimento descritto in
precedenza |
|
|
|
|
Dal punto di vista implementativo, il Gouraud
shading è efficiente, poiché l’equazione di illuminazione va calcolata una
sola volta per ogni vertice |
|
Per poter individuare i vettori normali
necessari per calcolare la normale nei vertici, occorre tuttavia una
struttura dati che rappresenti l’intera mesh di poligoni |
|
|
|
|
Il Gouraud shading è più che sufficiente per la
maggior parte delle applicazioni, non risulta particolarmente realistico
solo quando si vogliano rappresentare superfici dotate di un alto
coefficiente di riflessione speculare |
|
Un modello molto più costoso è il modello di
Phong (Phong shading) o shading con interpolazione delle normali |
|
|
|
|
|
Il Phong shading è più costoso in termini
computazionali rispetto al Gouraud shading: |
|
si interpolano vettori e non valori interi |
|
l’equazione di illuminazione è calcolata per
ogni pixel |
|
Mentre esistono implementazioni in hardware del
Gouraud shading che consentono il suo uso in tempo reale, ciò non è normalmente
vero per il Phong shading. |
|