Utente:Davi.trip/Sandbox

Da Teknopedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Confronto tra diversi modelli di shading

L'ombreggiatura (in inglese shading), in computer grafica, è il processo di calcolo del colore apparente di ognuna della porzioni di superficie degli oggetti in una scena tridimensionale, risultante dall'esposizione alla radiazione luminosa incidente.[1]

Per simulare quello che succede nella realtà si usano dei modelli di illuminazione che sono rappresentati da equazioni matematiche, le quali descrivono come ogni punto dell'oggetto è illuminato in funzione delle sorgenti luminose presenti nella scena, della posizione del punto, della posizione dell'osservatore (o camera virtuale) e della proprietà con cui il materiale nel punto considerato riflette la luce.[1][2] Si distinguono i modelli di illuminazione locale, come il modello di riflessione locale di Phong, dai modelli di illuminazione globale, come il ray tracing e la radiosità.[2]

In un'accezione ampia, l'ombreggiatura è il modo in cui la luce interagisce con gli oggetti, al fine di dar loro apparenza visiva, in funzione delle proprietà materiali dell'oggetto, della posizione della camera virtuale e della posizione della sorgente luminosa.[3]

(EN)

«In computer graphics, a shading function is defined as a function which yields the intensity value of each point on the body of an object from the characteristics of the light source, the object, and the position of the observer.»

(IT)

«In computer grafica, una funzione di ombreggiatura è definita come una funzione che produce il valore di intensità di ciascun punto sul corpo di un oggetto a partire dalle caratteristiche della sorgente luminosa, dell'oggetto, e della posizione dell'osservatore.»

Più precisamente, si distinguono due processi di calcolo costituenti la risoluzione dell'equazione di illuminazione nei vari punti dell'oggetto:

  • Lighting – Con il temine lighting si fa riferimento al processo di determinazione del colore e dell'intensità luminosa incidenti un particolare punto nello spazio 3D, di solito una superficie.[1][4][5]
  • Shading – Con il termine shading ci si riferisce ai metodi utilizzati per determinare il colore e l'intensità luminosa riflessi verso l'osservatore per ciascun punto di una superficie.[4][5] Questo colore dipende dalle proprietà delle sorgenti luminose che illuminano la superficie come anche le caratteristiche di riflessione della superficie stessa.[5]

Superfici e riflessioni

[modifica | modifica wikitesto]

Da un punto di vista fisico, i corpi illuminati possono essere: trasparenti, se lasciano passare la luce permettendo così di vedere gli oggetti che stanno dietro di loro, opachi, se non lasciano passare la luce, o traslucidi, se lasciano passare solo in parte la luce non permettendo di distinguere nitidamente gli oggetti dietro di loro.[6]

La maggior parte degli oggetti riflette una parte della luce che li colpisce.[7] Quando un fascio di raggi paralleli colpisce una superficie piana e liscia come quella di uno specchio, i raggi riflessi sono tutti paralleli tra loro.[7] Questo tipo di riflessione è chiamato riflessione speculare.[7] La maggior parte delle superfici non è però perfettamente liscia, perché presenta irregolarità di dimensioni maggiori o uguali della lunghezza d'onda della luce.[7] In questo caso, si parla di diffusione[6] o riflessione diffusa[7]. In particolare, le superfici perfettamente diffusive, dette lambertiane, emettono luce ugualmente in tutte le direzioni, e quindi la loro luminanza è indipendente dall'angolo di osservazione.[2]

Nel 1973, Bui Tuong Phong, studente di dottorato presso l'Università dello Utah, descrisse nella propria dissertazione un'equazione mirata alla modellazione della riflessione speculare e diffusa.[8][9] Non prevedeva invece la modellazione della trasparenza e della rifrazione, e perciò tale modello riesce a simulare solo il comportamento di materiali completamente opachi.[9] Oggi questo modello è noto come modello di riflessione (o di illuminazione locale) di Phong. Il modello di Phong descrive come deve essere calcolata l'interazione tra luce e materia, ma occorre capire anche dove calcolare l'equazione di illuminazione.[10] Le tecniche di ombreggiatura servono a questo scopo.[10]

Tecniche di shading

[modifica | modifica wikitesto]

Shading costante

[modifica | modifica wikitesto]
Esempio di shading costante

La tecnica più semplice di ombreggiatura è il flat shading o shading costante dove, per prima cosa, un vertice di ciascun triangolo della mesh poligonale viene scelto come vertice chiave per quel triangolo.[11] L'equazione di illuminazione viene eseguita per calcolare il valore di illuminazione per quel vertice, e l'intero triangolo viene riempito con una copia di quel valore.[11] Questa tecnica può risultare appropriata per le piramidi, ma quando una mesh di triangoli approssima una superficie curva, risulta evidente che è necessaria una tecnica più sofisticata.[11] Incrementare il numero di facce aiuta a migliorare il risultato, ma l'approssimazione resterà ancora apparente.[11] Tentare di risolvere il problema con un mero incremento della risoluzione della mesh è sia costoso (in termini di memoria/elaborazione), sia inefficace[11], perché la differenza percepita nell'ombreggiatura che coinvolge sfaccettature adiacenti viene accentuata dall'effetto Mach banding (scoperto da Mach nel 1865), il quale esagera il cambiamento di intensità in ogni spigolo dove vi è una discontinuità in termini di variazione di luminosità.[12] Vicino al bordo tra due bande, la banda scura sembra più scura e quella chiara più chiara.[12]

Gouraud shading

[modifica | modifica wikitesto]
Gouraud shading con il modello di illuminazione di Phong

Quando la computer grafica era ancora ai suoi primi giorni di vita, era particolarmente urgente la ricerca di un modo efficiente per produrre immagini accettabili di superfici curve a partire da approssimazioni di mesh a bassa risoluzione.[11] Nei primi anni Settanta, lo studente dell'Università dello Utah di nome Henri Gouraud, rifinì la tecnica dello shading interpolato, che consiste nel valutare l'equazione di illuminazione solo nei vertici del poligono ed interpolare linearmente, all'interno dello spazio colore, i valori trovati nei vertici per trovare i valori sui lati e nei punti interni.[11][13] Il Gouraud shading estende il concetto di shading interpolato, ed è un processo che richiede che sia nota la normale per ciascun vertice della mesh poligonale.[14] Gouraud fu in grado di calcolare queste normali ai vertici direttamente dalla descrizione analitica della superficie.[14] In alternativa, se le normali ai vertici non sono memorizzate con la mesh, e non possono essere determinate direttamente dalla superficie effettiva, allora, suggerì Gouraud, le si possono approssimare calcolando la media delle normali alla superficie di tutte le facce poligonali che condividono ciascun vertice:[10][14]

Calcolo delle normali nel Gouraud shading

Come per lo shading interpolato, si applica poi l'equazione di illuminazione di Phong per calcolare il valore dell'intensità luminosa (colore) di ogni vertice e si usa l'interpolazione di questi colori per ottenere lo shading di tutti gli altri punti del poligono.[13] Gli step del Gouraud shading sono quindi:[15]

  1. Determinazione del vettore normale per ogni poligono .
  2. Calcolo delle normali ai vertici per ciascun vertice attraverso la media delle normali alla superficie di tutti i poligoni che condividono il vertice, ad esempio .
  3. Calcolo delle intensità per tutti i vertici della superficie, usando i vettori normale dello step 2 e qualsiasi modello di illuminazione desiderato.
  4. Ombreggiatura di ciascun poligono, scan line per scan line, tramite interpolazione lineare delle intensità ai vertici lungo ciascuno spigolo e in seguito tra gli spigoli lungo ciascuna scan line.[14] Ciò avviene in fase di rasterizzazione.[13]

Invece di ombreggiare tutti i punti di un triangolo pressoché allo stesso modo, il Gouraud shading ombreggia come se la superficie presa in considerazione sia curva.[16] Gli spigoli condivisi dai triangoli vengono ammorbiditi, ma la sua semplicità causa altri problemi.[16] Un problema ovvio è che, siccome lo shading dei punti è interpolato, le riflessioni speculari non possono essere accuratamente renderizzate su una faccia.[16] Solamente i valori ai vertici sono accurati, perciò la riflessione speculare tende ad essere spalmata sulla faccia.[16]

Calcolo della normale a una superficie

Considerando un triangolo con i vertici , , , la normale alla sua superficie si calcola come .[16]

Se per esempio si considera un triangolo con vertici , , , la normale si calcola nel modo seguente.[16]

Considerando la terna come e come , applicando le regole del prodotto vettoriale si ha:

Quindi le componenti della normale al triangolo sono , il suo modulo è , e le componenti del suo versore sono .

Interpolazione delle intensità

Per calcolare l'intensità in , e , conoscendo l'ordinata di una scan line e le intensità ai vertici , , , si possono usare le seguenti formule:[14]

Interpolazione dell'intensità lungo gli spigoli di un poligono e le scan line

Usando le coordinate baricentriche, se in un triangolo un punto che giace sullo spigolo i cui vertici sono e , posto a distanza da , è , allora l'intensità di questo punto è , dove e sono le intensità di e .[16][17] Allo stesso modo, l'intensità di un punto (sullo spigolo i cui vertici sono e , con distanza da ), è .[13][17] Le coordinate baricentriche possono servire per interpolare i tre vertici in modo da "ombreggiare" qualsiasi punto interno.[16] Così, l'intensità di un punto interno che giace sul segmento della scan line i cui estremi sono i due punti e (le cui intensità sono state trovate con l'interpolazione), è , dove è la distanza da lungo il segmento .[13][16][17]

Phong shading

[modifica | modifica wikitesto]

Nel Phong shading, invece di interpolare le intensità di colore ottenute nei vertici, si interpolano le normali ottenute sui vertici di ciascun poligono per determinare la normale associata a ciascun pixel.[18] L'equazione di illuminazione non è calcolata nei soli vertici, ma si calcola in tutti i pixel interni al triangolo usando, pixel per pixel, il vettore normale calcolato interpolando linearmente e rinormalizzando le normali nei vertici.[19]

Gli step del Phong shading sono quindi:[20][21]

  1. Determinazione della normale a ciascun vertice del poligono, che può essere approssimata con uno dei metodi descritti da Gouraud.
  2. In seguito, definizione della normale alla superficie lungo gli spigoli e a un punto della superficie del poligono. La normale alla superficie, a un punto lungo lo spigolo, è il risultato di una interpolazione lineare delle normali ai due vertici di quello spigolo. Si può determinare una normale a un punto della superficie del poligono alla stessa maniera del calcolo di shading a quel punto con la tecnica di Gouraud.
  3. Calcolo della normale alla superficie visibile, in un punto localizzato tra i due spigoli, tramite l'interpolazione lineare delle normali alle intersezioni di questi due spigoli con un piano di scansione (scan plane) passante attraverso il punto preso in considerazione.
  4. Concludere con la generazione di una normale interpolata per ogni pixel , applicando infine il modello di illuminazione lungo ciascuna scan line per calcolare l'intensità di ciascun punto della superficie.[15]

Il Phong shading è computazionalmente più costoso del Gouraud shading, perché il modello di riflessione viene calcolato per ciascun pixel piuttosto che per ciascun vertice.[22]

Interpolazione delle normali

Schema del Phong shading

Analogamente al calcolo delle intensità nel Gouraud shading, considerando un triangolo le cui normali ai vertici sono , e , le normali sugli spigoli in corrispondenza della scan line e sono calcolabili usando le coordinate baricentriche, perciò e . La normale interpolata per un pixel , è calcolabile interpolando le normali precedenti, quindi .

Modello di shading di Blinn-Phong

I colori, in generale, sono espressi come triplette di componenti di rosso, verde e blu il cui intervallo di valori va da 0 a 1.[23] Questi colori rappresentano sia la composizione spettrale della luce, che determina quale colore viene percepito dall'occhio, sia l'intensità luminosa.[23] Si denotano i colori con lettere in corsivo per distinguerli dai vettori. Una singola componente rossa, verde o blu di un colore viene denotata usando usando un pedice , , o (dunque, si può scrivere ).[23] L'hardware grafico che può eseguire calcoli complessi su base pixel per pixel (un processo chiamato pixel shading o fragment shading), può essere configurato per calcolare l'intera espressione (che si riferisce al Blinn-Phong shading model)[23]per ciascun pixel che compone la faccia del triangolo (o poligono), e dove

L'angolo compreso tra il vettore normale N e l'halfway vector H, può essere usato per determinare l'intensità speculare
  • è il colore emissione, che serve a dare all'oggetto l'apparenza di emettere un bagliore uniforme (alcuni oggetti possono emettere luce addizionale o rifletterla)
  • è il colore di un campione filtrato di una emission map, ossia una mappa che modula il colore dell'emissione determinando il colore e l'intensità del bagliore in ciascun punto di una superficie
  • è il colore della riflessione diffusa della superficie, che modula la luce riflessa
  • è il colore di un campione filtrato di una texture map in un punto della superficie
  • è l'intensità della luce (o colore) ambientale, che giunge da ogni direzione con uguale intensità, e perciò illumina ogni parte di un oggetto uniformemente
  • è il numero di sorgenti luminose
  • è l'intensità della i-esima sorgente luminosa in
  • è il vettore normale
  • è il versore che punta verso la sorgente luminosa
  • è il colore della riflessione speculare della superficie
  • è il versore, detto halfway vector[24] (che giace esattamente a metà strada tra il versore all'osservatore e il versore alla sorgente luminosa ), per l'i-esima sorgente luminosa, dato da
  • è detto esponente speculare, e controlla la nettezza del punto luce (specular highlight)
  • è un'espressione booleana che restituisce 1 se vera e 0 se falsa, la cui funzione è prevenire la comparsa di punti luce sulla superficie in punti distanti dalla sorgente luminosa
  • i prodotti scalari e sono fissati a 0

Un vantaggio posseduto dal Blinn-Phong shading, rispetto al Gouraud shading, è la sua capacità di modellare la specularità, che risulta migliore. Ciò è dovuto al fatto che il prodotto viene calcolato per ogni pixel.[23] Quando un punto luce netto cade all'interno del triangolo, il Gouraud shading produce un risultato di minor qualità perché la componente speculare calcolata ai vertici del triangolo non è rappresentativa dei veri valori che esistono altrove sulla faccia del triangolo.[23]

Confronto tra il Phong shading e la versione modificata di Blinn
  1. ^ a b c Scateni, p. 152
  2. ^ a b c Zingaretti, pp. 114-115
  3. ^ Zingaretti, p. 135
  4. ^ a b (EN) Lighting & Shading (PDF), Boise State University. URL consultato il 20 dicembre 2018.
    «Lighting is the process of computing the luminous intensity (i.e., outgoing light) at a particular 3-D point, usually on a surface. Shading is the process of assigning colors to pixels.»
  5. ^ a b c (EN) Eric Lengyel, Mathematics for 3D Game Programming and Computer Graphics, 3ª ed., Cengage Learning Ptr, 2 giugno 2011, p. 157, ISBN 9781435458864.
    «The term lighting or illumination is often used to describe the process by which the color and intensity of light reaching a surface is determined. The term shading normally describes the methods used to determine the color and intensity of light reflected toward the viewer for each point on a surface. This color depends on the properties of the light sources illuminating the surface as well as the reflective characteristics of the surface itself.»
  6. ^ a b (IT) Iolanda Colombi, Bruna Negrino e Daniela Rondano, I grandi temi delle scienze naturali. Corso di scienze in volume unico per la scuola media, Vol. A, 1ª ed., Edizioni Il Capitello, 1996, pp. 118-121, ISBN 9788842641094.
  7. ^ a b c d e (IT) John D. Cutnell, Kenneth W. Johnson e Claudio Romeni, Fisica. Per le Scuole superiori. Con CD-ROM. Con espansione online, vol. 2, Zanichelli, 15 aprile 2009, p. 369, ISBN 9788808133250.
  8. ^ (EN) History | School of Computing, su cs.utah.edu. URL consultato il 20 dicembre 2018.
  9. ^ a b Scateni, p. 155
  10. ^ a b c (IT) Capitolo 6. Interazione luce-materia (PDF), in Diapositive a corredo del libro "Fondamenti di grafica tridimensionale interattiva". URL consultato il 20 dicembre 2018.
  11. ^ a b c d e f g Hughes, pp. 127-128
  12. ^ a b Foley, pp. 735-736, «The simple solution of using a finer mesh turns out be surprisingly ineffective, because the perceived difference in shading between adjacent facets is accentuated by the Mach band effect (discovered by Mach in 1865), which exaggerates the intensity change at any edge where there is a discontinuity in magnitude or slope of intensity. At the border between two facets, the dark facet looks darker and the light facet look lighter.»
  13. ^ a b c d e Zingaretti, pp. 136-138
  14. ^ a b c d e Foley, pp. 736-737
  15. ^ a b (EN) David Salomon, The Computer Graphics Manual, Springer-Verlag New York Inc., 6 ottobre 2011, pp. 864-866, ISBN 9780857298850.
  16. ^ a b c d e f g h i Janke, pp. 307-311
  17. ^ a b c (EN) Polygon Rendering Methods (PDF), Università di Tel Aviv. URL consultato il 22 dicembre 2018.
  18. ^ Zingaretti, pp. 138-139
  19. ^ Scateni, pp. 166-168
  20. ^ (EN) Illumination Models and Shading (PDF), Brandeis University. URL consultato il 21 dicembre 2018.
  21. ^ Phong, p. 315
  22. ^ (EN) Jon Peddie, The History of Visual Magic in Computers. How Beautiful Images Are Made in CAD, 3D, VR and AR, Springer Verlag, 13 giugno 2013, pp. 59-60, ISBN 9781447149316.
  23. ^ a b c d e f (EN) Eric Lengyel, Mathematics for 3D Game Programming and Computer Graphics, 3ª ed., Cengage Learning Ptr, 2 giugno 2011, pp. 157-209, ISBN 9781435458864.
  24. ^ Scateni, p. 176, «La sua presenza è dovuta a una modifica di Blinn dell'equazione di illuminazione di Phong. Si sostituisce al prodotto scalare R·V il prodotto scalare N·H dove H è il vettore, normalizzato, sulla bisettrice dell'angolo formato dai vettori L e V. R è la direzione di riflessione ideale.»

Libri

  • (EN) James D. Foley, Andries van Dam, Steven K. Feiner e John F. Hughes, Computer Graphics. Principles and Practice. Second Edition in C, Addison-Wesley Publishing Company, Inc., 1996, ISBN 9780201848403.
  • (EN) John F. Hughes, Andries Van Dam, Morgan McGuire, David F. Sklar, James D. Foley, Steven K. Feiner e Kurt Akeley, Computer Graphics. Principles and Practice, 3ª ed., Addison-Wesley Professional, 28 febbraio 2009, ISBN 9780321399526.
  • (EN) Steven J. Janke, Mathematical Structures for Computer Graphics, John Wiley & Sons Inc., 14 novembre 2014, ISBN 9781118712191.
  • (IT) Riccardo Scateni, Paolo Cignoni, Claudio Montani e Roberto Scopigno, Fondamenti di grafica tridimensionale interattiva, McGraw-Hill Education, 1° giugno 2005, ISBN 9788838662157.
  • (IT) Primo Zingaretti, Fondamenti di computer graphics, Pitagora, 1° luglio 2004, ISBN 9788837114862.

Pubblicazioni