Ombreggiatura

L’ombreggiatura di Gouraud, sviluppata da Henri Gouraud nel 1971, è stata una delle prime tecniche di ombreggiatura sviluppate per la computer grafica 3D.

Nella computer grafica, l’ombreggiatura si riferisce al processo di alterazione del colore di un oggetto/superficie/poligono nella scena 3D, basato su cose come (ma non limitato a) l’angolo della superficie rispetto alle luci, la sua distanza dalle luci, il suo angolo rispetto alla telecamera e le proprietà del materiale (es.

L’ombreggiatura viene eseguita durante il processo di rendering da un programma chiamato shader.

Angolo della superficie rispetto a una fonte di luceModifica

L’ombreggiatura altera i colori delle facce in un modello 3D in base all’angolo della superficie rispetto a una o più fonti di luce.

La prima immagine sotto ha le facce della scatola rese, ma tutte dello stesso colore. Le linee di bordo sono state renderizzate anche qui, il che rende l’immagine più facile da vedere.

La seconda immagine è lo stesso modello renderizzato senza linee di bordo. È difficile dire dove finisce una faccia della scatola e inizia la successiva.

La terza immagine ha l’ombreggiatura abilitata, che rende l’immagine più realistica e rende più facile vedere quale faccia è quale.

Rendered image of a box. Questa immagine non ha ombreggiatura sulle sue facce, ma usa invece linee di bordo (note anche come wireframe) per separare le facce e un contorno più marcato per separare l’oggetto dallo sfondo.

Questa è la stessa immagine con le linee rimosse; l’unica indicazione della geometria interna sono i punti della silhouette dell’oggetto. Il colore delle 3 facce frontali visibili è stato impostato in base al loro angolo (determinato dal vettore normale) rispetto alle fonti di luce.

Tipi di illuminazioneModifica

Effetti di shading da un proiettore usando un ray tracer

Quando uno shader calcola il colore del risultato, utilizza un modello di illuminazione per determinare la quantità di luce riflessa in punti specifici della superficie. Diversi modelli di illuminazione possono essere combinati con diverse tecniche di ombreggiatura – mentre l’illuminazione dice quanta luce viene riflessa, l’ombreggiatura determina come questa informazione viene utilizzata per calcolare il risultato finale. Può per esempio calcolare l’illuminazione solo in punti specifici e usare l’interpolazione per riempire il resto. Lo shader può anche decidere quante fonti di luce prendere in considerazione ecc.

Illuminazione ambientaleModifica

Una fonte di luce ambientale rappresenta una fonte di luce omni-direzionale, ad intensità e colore fissi che colpisce tutti gli oggetti nella scena allo stesso modo (è omni-presente). Durante il rendering, tutti gli oggetti nella scena sono illuminati con l’intensità e il colore specificati. Questo tipo di fonte di luce è utilizzato principalmente per fornire alla scena una visione di base dei diversi oggetti in essa presenti. Questo è il tipo di illuminazione più semplice da implementare, e modella come la luce può essere diffusa o riflessa molte volte, producendo così un effetto uniforme.

L’illuminazione ambientale può essere combinata con l’occlusione ambientale per rappresentare quanto è esposto ogni punto della scena, influenzando la quantità di luce ambientale che può riflettere. Questo produce un’illuminazione diffusa e non direzionale in tutta la scena, senza ombre evidenti, ma con aree chiuse e riparate oscurate. Il risultato è di solito visivamente simile a una giornata nuvolosa.

Point lightingEdit

La luce ha origine da un singolo punto e si diffonde verso l’esterno in tutte le direzioni.

SpotlightingEdit

Modella un riflettore: la luce ha origine da un singolo punto e si diffonde verso l’esterno in un cono.

Area lightingEdit

La luce ha origine da una piccola area su un singolo piano. (Un modello più realistico di una sorgente di luce puntiforme.)

Illuminazione direzionaleModifica

Una sorgente di luce direzionale illumina tutti gli oggetti allo stesso modo da una data direzione, come una luce ad area di dimensione infinita e a distanza infinita dalla scena; c’è un’ombreggiatura, ma non può esserci alcuna caduta di distanza. Questo è come il sole.

Distance falloffEdit

Due scatole rese con OpenGL. (Si noti che il colore delle due facce anteriori è lo stesso anche se una è più lontana.)

Lo stesso modello renderizzato usando ARRIS CAD, che implementa la riduzione della distanza per rendere le superfici più vicine all’occhio più luminose.

Teoricamente, due superfici che sono parallele sono illuminate virtualmente allo stesso modo da una fonte di luce lontana e non bloccata come il sole. L’effetto falloff a distanza produce immagini che hanno più ombreggiature e quindi sarebbero realistiche per fonti di luce prossimali.

L’immagine di sinistra non usa il falloff a distanza. Notate che i colori sulle facce anteriori delle due scatole sono esattamente gli stessi. Può sembrare che ci sia una leggera differenza dove le due facce si sovrappongono direttamente, ma questa è un’illusione ottica causata dal bordo verticale sotto dove le due facce si incontrano.

L’immagine di destra usa la cancellazione della distanza. Notate che la faccia anteriore della scatola più vicina è più luminosa della faccia anteriore della scatola posteriore. Inoltre, il pavimento passa da chiaro a scuro man mano che si allontana.

CalcoloModifica

La falloff a distanza può essere calcolata in diversi modi:

  • Potenza della distanza – Per un dato punto a una distanza x dalla sorgente luminosa, l’intensità luminosa ricevuta è proporzionale a 1/xn.
    • Nessuna (n = 0) – L’intensità luminosa ricevuta è la stessa indipendentemente dalla distanza tra il punto e la sorgente luminosa.
    • Lineare (n = 1) – Per un dato punto ad una distanza x dalla sorgente di luce, l’intensità della luce ricevuta è proporzionale a 1/x.
    • Quadratica (n = 2) – Questo è il modo in cui l’intensità della luce diminuisce nella realtà se la luce ha un percorso libero (cioè senza nebbia o qualsiasi altra cosa nell’aria che può assorbire o diffondere la luce). Per un dato punto ad una distanza x dalla sorgente di luce, l’intensità della luce ricevuta è proporzionale a 1/x2.
  • Qualsiasi numero di altre funzioni matematiche può anche essere usato.

Tecniche di ombreggiaturaModifica

Durante l’ombreggiatura una normale alla superficie è spesso necessaria per il calcolo dell’illuminazione. Le normali possono essere precalcolate e memorizzate per ogni vertice del modello.

Flat shadingEdit

Flat shading di un cuboide texturizzato

Qui, l’illuminazione è valutata solo una volta per ogni poligono (di solito per il primo vertice del poligono, ma a volte per il centroide per le maglie triangolari), sulla base della normale alla superficie del poligono e sul presupposto che tutti i poligoni sono piatti. Il colore calcolato viene usato per l’intero poligono, facendo apparire gli angoli nitidi. Questo è di solito usato quando tecniche di ombreggiatura più avanzate sono troppo costose dal punto di vista computazionale. Le luci speculari sono rese male con l’ombreggiatura piatta: Se capita che ci sia una grande componente speculare al vertice rappresentativo, quella luminosità viene disegnata uniformemente su tutta la faccia. Se un’evidenziazione speculare non cade sul punto rappresentativo, viene mancata completamente. Di conseguenza, la componente speculare riflessa di solito non è inclusa nel calcolo dell’ombreggiatura piatta.

Ombreggiatura lisciaModifica

Al contrario dell’ombreggiatura piatta dove i colori cambiano in modo discontinuo ai bordi del poligono, con l’ombreggiatura liscia il colore cambia da pixel a pixel, risultando in una transizione di colore liscia tra due poligoni adiacenti. Di solito, i valori sono calcolati prima nei vertici e l’interpolazione bilineare è usata per calcolare i valori dei pixel tra i vertici dei poligoni. I tipi di ombreggiatura liscia includono l’ombreggiatura Gouraud e l’ombreggiatura Phong.

Ombreggiatura GouraudModifica
  1. Determina la normale ad ogni vertice del poligono.
  2. Applica un modello di illuminazione ad ogni vertice per calcolare l’intensità della luce dalla normale del vertice.
  3. Interpola le intensità del vertice usando l’interpolazione bilineare sul poligono della superficie.

Problemi:

  • A causa dell’illuminazione calcolata solo ai vertici, le imprecisioni (specialmente delle luci speculari su grandi triangoli) possono diventare troppo evidenti.
  • Le giunzioni a T con poligoni adiacenti possono talvolta causare anomalie visive. In generale, le giunzioni a T dovrebbero essere evitate.
Phong shadingEdit

Phong shading è simile a Gouraud shading, tranne che invece di interpolare le intensità di luce le normali sono interpolate tra i vertici e l’illuminazione è valutata per pixel. Così, le luci speculari sono calcolate molto più precisamente che nel modello di ombreggiatura Gouraud.

  1. Computa una normale N per ogni vertice del poligono.
  2. Utilizzando l’interpolazione bilineare calcola una normale, Ni per ogni pixel. (La normale deve essere rinormalizzata ogni volta.)
  3. Applica un modello di illuminazione ad ogni pixel per calcolare l’intensità della luce da Ni.

Deferred shadingEdit

Deferred shading è una tecnica di ombreggiatura con la quale il calcolo dell’ombreggiatura è rinviato ad una fase successiva renderizzando in due passaggi, potenzialmente aumentando le prestazioni non scartando i pixel costosamente ombreggiati. Il primo passaggio cattura solo i parametri della superficie (come la profondità, le normali e i parametri del materiale), il secondo esegue l’ombreggiatura effettiva e calcola i colori finali.:884

Altri approcciModifica

Sia l’ombreggiatura di Gouraud che quella di Phong possono essere implementate usando l’interpolazione bilineare. Bishop e Weimer hanno proposto di usare un’espansione in serie di Taylor dell’espressione risultante dall’applicazione di un modello di illuminazione e un’interpolazione bilineare delle normali. Quindi, è stata usata un’interpolazione polinomiale di secondo grado. Questo tipo di interpolazione biquadratica è stato ulteriormente elaborato da Barrera et al., dove un polinomio del secondo ordine è stato usato per interpolare la luce diffusa del modello di riflessione Phong e un altro polinomio del secondo ordine è stato usato per la luce speculare.

L’interpolazione lineare sferica (Slerp) è stata usata da Kuij e Blake per calcolare sia la normale sul poligono, sia il vettore in direzione della sorgente luminosa. Un approccio simile è stato proposto da Hast, che usa l’interpolazione dei quaternioni delle normali con il vantaggio che la normale avrà sempre lunghezza unitaria e la normalizzazione computazionalmente pesante è evitata.

Flat vs. smooth shadingEdit

Flat Smooth
Uses the same color for every pixel in a face – usually the color of the first vertex Smooth shading uses linear interpolation of either colors or normals between vertices
Edges appear more pronounced than they would on a real object because in reality almost all edges are somewhat round The edges disappear with this technique
Same color for any point of the face Each point of the face has its own color
Individual faces are visualized Visualize underlying surface
Not suitable for smooth objects Suitable for any objects
Less computationally expensive More computationally expensive