Ombreggiatura e Utente:GuroneseDoc/Sandbox20: differenze tra le pagine

(Differenze fra le pagine)
Contenuto cancellato Contenuto aggiunto
Botcrux (discussione | contributi)
m Bot: aggiungo template {{Collegamenti esterni}} (ref)
 
GuroneseDoc (discussione | contributi)
Etichette: Modifica da mobile Modifica da web per mobile
 
Riga 1:
{{Personaggio
L''''ombreggiatura''' (in inglese '''shading'''), in [[computer grafica]], è il modo in cui la luce interagisce con la [[mesh poligonale]], in base all'assorbimento o la riflessione della luce, l'angolo di incidenza e l'angolo di visione<ref>{{Cita libro|autore=Roland Hess|titolo=The Essential Guide to Learning Blender|anno=|editore=|città=|p=|pp=|ISBN=}}</ref>, e altre caratteristiche.
|medium = mitologia
|saga =
|nome italiano = Virbio
|nome =
|immagine =
|didascalia =
|epiteto =
|sesso = Maschio
|luogo di nascita = [[Atene]]
|prima apparizione =
|professione =
}}
'''Virbio''' è un personaggio della [[mitologia greca]] trasposto in quella [[mitologia romana|romana]].
 
== Aspetti teoriciGenealogia ==
Nella realtà, noi vediamo perché i nostri occhi rilevano la luce che rimbalza dagli oggetti. L'aspetto di una superficie è così determinato dal preciso modo in cui essa interagisce la luce, che è perciò determinato dalla struttura e dalla composizione del materiale.
[[File:Specular And Diffuse Reflection.svg|destra|senza_cornice|289x289px]]
Nel mondo reale, le superfici opache, come la roccia e la gomma, possiedono una struttura ruvida su scala microscopica. La luce rimbalza da essi in ogni direzione, e come risultato, la luce che si vede riflessa sembra non avere a che fare con la direzione da cui si sta guardando la superficie. Questa è chiamata '''riflessione diffusa''' (''diffuse reflection'', in inglese). Al contrario, le superfici lucide sono relativamente lisce, anche su scala microscopica. Questo significa che si vedrà una perfetta riflessione quando si guarda verso la superficie, e allo spostamento del punto di vista, ciò che è riflesso, cambia direzione. Questa è chiamata '''riflessione speculare''' (''specular'' o ''mirror reflection'', in inglese).
 
Nella mitologia greca è figlio di [[Teseo]]<ref name="igin251"/><ref name=" plut27 ">{{cita web|url= https://www.theoi.com/Text/PlutarchTheseus.html|titolo= Plutarco, Vita di Teseo, 27|lingua=en|accesso= 10 luglio 2019}}</ref><ref name=" apolEpitome.1.16 "/> e di un'[[Amazzone]] ([[Antiope (regina delle Amazzoni)|Antiope]]<ref name=" diod4.28.1 ">{{cita web|url= https://www.theoi.com/Text/DiodorusSiculus4B.html#15|titolo= Diodoro Siculo, Biblioteca Historica, IV, 28.1|lingua=en|accesso= 10 luglio 2019}}</ref><ref name=" apolEpitome.1.16 "/> o [[Ippolita]]<ref name=" apolE5.1 ">{{cita web|url= https://www.theoi.com/Text/ApollodorusE.html#5|titolo= Apollodoro, Biblioteca, Epitome V, 2|lingua=en|accesso= 10 luglio 2019}}</ref><ref name=" apolEpitome.1.16 "/> o [[Melanippe (amazzone)|Melanippe]]<ref name=" apolE5.1 "/><ref name=" apolEpitome.1.16 ">{{cita web|url= https://www.theoi.com/Text/ApollodorusE.html#1|titolo= Apollodoro, Biblioteca, Epitome 1.16|lingua=en|accesso= 10 luglio 2019}}</ref> o Glauce<ref name=" apolE5.1 "/>).
Nel mondo della computer grafica, comunque, spesso si prendono scorciatoie per ottenere l'aspetto dei materiali reali. Per esempio, considerando la riflessione speculare: nonostante sia possibile renderizzare riflessioni speculari, farlo è un'operazione più lenta rispetto al renderizzare riflessioni diffuse, perché ci sono algoritmi più semplici che approssimano l'effetto di riflessioni diffuse. Quindi renderizzare riflessioni diffuse può essere estremamente veloce, ma renderizzare riflessioni speculari richiede una intensiva elaborazione di [[ray tracing]].<ref name=":0">{{Cita libro|autore=Ben Simonds|titolo=Blender Master Class|anno=|editore=|città=|p=|pp=|ISBN=}}</ref> Per aggirare questo problema, a volte si considerano solo le cose più ovvie che una superficie può riflettere, come le luci brillanti.
 
Secondo gli autori romani sposò una donna di nome Aricia<ref>{{cita web|https://la.wikisource.org/wiki/Metamorphoseon_-_Liber_XV|Publio Ovidio Nasone, Le metamorfosi, XV 536-546|02-02-2010}}</ref> e divenne il padre di [[Virbio (figlio di Ippolito)|Virbio]]<ref name=" VirgiEn">{{cita web|url= https://la.m.wikisource.org/wiki/Aeneis/Liber_VII|titolo= Virgilio, Eneide, VII, 761-783|lingua=la|accesso= 10 luglio 2019}}</ref>.
La maggior parte dei '''modelli di shading''', in un modo o in un altro, sono progettati per catturare il processo di riflessione della luce.<ref name=":1">{{Cita libro|autore=Marschner, Shirley|titolo=Fundamentals of Computer Graphics|anno=|editore=|città=|p=|pp=|ISBN=}}</ref>
 
== Modelli di ShadingMitologia ==
 
Come gran parte delle figure romane, anche Virbio ha origine da un personaggio greco ([[Ippolito (mitologia)|Ippolito]]) e della sua matrigna [[Fedra]] che protagonisti di una tragedia di [[Euripide]] rimasero vittima di una vendetta di [[Afrodite]]<ref name=" Euripide ">{{cita web|url= http://www.filosofico.net/euripidippoli42.htm|titolo= Euripide, Ippolito Coronato, testo completo |lingua=it|accesso= 10 luglio 2019}}</ref>.
=== Flat Shading ===
[[File:Dolphin triangle mesh.svg|miniatura|189x189px|Flat shading]]
Detto anche '''constant shading''', è lo shading "numero zero". Ogni vertice di ogni triangolo della mesh poligonale, viene scelto come vertice chiave per quel triangolo. L'equazione di illuminazione viene eseguita per calcolare il valore di illuminazione per quel vertice, e l'intero triangolo viene investito con una copia di quel valore.<ref name=":2">{{Cita libro|autore=John F. Hughes, Andries Van Dam, Morgan Mcguire, David F. Sklar, James D. Foley, Steven K. Feiner, Kurt Akeley|titolo=Computer Graphics: Principles and Practise|edizione=3|anno=|editore=|città=|p=|pp=|ISBN=}}</ref>
 
La stessa leggenda fu ripresa da più autori romani ([[Igino (astronomo)|Igino]], [[Ovidio]] e [[Servio Mario Onorato|Servius]]) i quali dopo l'episodio della sua resurrezione<ref name=" apol3.10.3">{{cita web|url= https://www.theoi.com/Text/Apollodorus3.html#10|titolo= Apollodoro, Biblioteca, III, 10.3|lingua=en|accesso= 20 luglio 2019}}</ref><ref>Igino, ''Fabulae'' 49</ref><ref name=" pau2.27.4 ">{{cita web|url= https://www.theoi.com/Text/Pausanias2B.html#14|titolo= Pausania il Periegeta, Periegesi della Grecia, 2.27.4|lingua=en|accesso= 10 luglio 2019}}</ref>
Il flat shading può essere appropriato per le piramidi, ma quando una mesh di triangoli approssima una superficie curva, come il caso del delfino, allora è richiesto un modello di shading più sofisticato. Per quanto si possa aumentare il numero di vertici della mesh, l'approssimazione resta sempre apparente, ed è anche ovviamente controproducente in termini di performance della computazione.<ref name=":2" />
 
Ippolito fu cacciato dal padre e morì trascinato dai suoi cavalli
=== Lambertian Shading ===
[[File:Lambert shading.png|189x189px|Geometria del Lambert shading|miniatura]]
Il più semplice modello di shading è basato su una osservazione fatta da [[Johann Heinrich Lambert]] nel XVIII secolo: la quantità di energia proveniente da una sorgente luminosa che cade sull'area di una superficie dipende dall'angolo di incidenza della luce rispetto alla superficie. Una superficie che guarda direttamente verso una fonte luminosa riceve la massima illuminazione; una superficie tangente alla direzione della luce (o che guarda lontano dalla sorgente) non riceve alcuna illuminazione; e nel mezzo l'illuminazione è proporzionale al coseno dell'angolo <math>\theta</math> fra la [[Normale (superficie)|normale]] della superficie e la fonte luminosa. Questo porta al modello di shading di Lambert:<ref name=":1" />
 
Virbio fu identificato con l'eroe greco Ippolito, figlio di Teseo. Fu maledetto da suo padre perché pensò erroneamente che Ippolito avesse perso la matrigna Phaidra. Quindi Ippolito fu attaccato da Poseidone al livello del mare e distrutto dai suoi cavalli. In una variante del mito, non rimane morto, ma viene resuscitato da Asklepios. Dopo di che, emigrò in Italia e fondò il santuario di Diana Nemorensis in Aricia, o fu trasferito da Artemide dove fu adorato sotto il nome di Virbius dai latini
<math display="block">L=k_d\,I\,\max(0,n\cdot l)</math>
 
dove <math>L</math> è il colore del pixel; <math>k_d</math> è il ''coefficiente di diffusione'', o il colore della superficie; e <math>I</math> è l'intensità della sorgente luminosa. Poiché <math>n</math> e <math>l</math> sono vettori unitari, possiamo usare <math>n\cdot l</math> come una conveniente forma abbreviata (sia sulla carta che nel codice) per <math>\cos\theta</math>.
 
Questa equazione si applica separatamente ai tre canali di colore, in modo che la componente rossa del valore del pixel sia il prodotto della componente diffusa del rosso, l'intensità della sorgente luminosa rossa, e del prodotto dei vettori; lo stesso per il verde e il blu.<ref name=":1" />
 
Il vettore <math>l</math> è calcolato sottraendo il punto di intersezione fra il raggio e la superficie, dalla posizione della sorgente luminosa. Non bisogna dimenticare che <math>v</math>, <math>l</math> e <math>n</math> devono essere tutti dei vettori unitari; sbagliare nel normalizzare questi vettori è un errore molto comune nei calcoli di shading.
 
=== Blinn-Phong Shading ===
[[File:Blinn-phong shading.png|189x189px|Geometria del Blinn-Phong shading|miniatura]]
Il Lambertian shading è indipendente dalla vista: il colore di una superficie non dipende dalla direzione da cui si sta guardando. Molte superfici reali mostrano alcuni gradi di brillantezza, producendo punti luce, o riflessioni speculari, che appaiono muoversi attorno alla superficie, man mano che il punto di vista cambia. Il Lambertian shading non produce alcun punto luce e comporta un aspetto molto opaco e pallido. Molti modelli di shading aggiungono una componente speculare al Lambertian shading; la parte lambertiana è così la componente diffusa.<ref name=":1" />
 
Un modello molto semplice e ampiamente usato per i punti luce speculari fu proposto da [[Bui Tuong Phong]] nel 1975, e in seguito aggiornato - nella forma più comunemente usata oggi - da [[Jim Blinn]] nel 1976.<ref name=":1" /> Invece di interpolare i valori di illuminazione calcolati a ogni vertice (come nel Gouraud shading), il Blinn-Phong shading interpola la normale del vertice, la direzione della sorgente luminosa, e la direzione del punto di vista lungo un triangolo, e calcola la formula di illuminazione per ogni pixel.<ref name=":3">{{Cita libro|autore=Eric Lengyel|titolo=Mathematics for 3D Game Programming and Computer Graphics|edizione=3|anno=|editore=|città=|p=|pp=|ISBN=}}</ref> L'idea è di produrre una riflessione che sia alla sua maggiore brillantezza quando <math>v</math> e <math>l</math> sono simmetricamente posizionati lungo la normale della superficie, e ciò quando si verificherebbe la riflessione speculare; la riflessione quindi decresce lievemente all'allontanamento dei vettori da una configurazione speculare.
[[File:Blinn phong comparison.png|408x408px|miniatura]]
Possiamo dire quanto siamo vicini a una configurazione speculare confrontando il vettore <math>h</math> (che biseziona l'angolo fra <math>v</math> e <math>l</math>) alla [[Normale (superficie)|normale]] della superficie. Se il vettore è presso la normale della superficie, la componente speculare dovrebbe essere brillante; se è lontano, dovrebbe essere fioca. Questo risultato è ottenuto dal calcolando il prodotto scalare fra <math>h</math> e <math>n</math> (bisogna ricordare che sono vettori unitari, quindi <math>n\cdot h</math> è uguale a massimo a 1, quando i vettori sono uguali), e in seguito portando il risultato a una potenza <math>p>1</math> per farlo decrescere velocemente. La potenza, o ''esponente di Phong'', controlla l'apparente brillantezza della superficie. Il vettore <math>h</math> in se stesso è facile da calcolare: poiché <math>v</math> e <math>l</math> hanno la stessa lunghezza, la loro somma è un vettore che biseziona l'angolo compreso fra essi, che richiede solo di essere normalizzato per produrre <math>h</math>.
 
Raccogliendo tutte queste informazioni, il modello di shading di Blinn-Phong è:<ref name=":1" />
 
<ref name=" paus4.3.5">{{cita web|url= https://www.theoi.com/Text/Pausanias4A.html|titolo= Pausania il Periegeta, Periegesi della Grecia IV, 3.5 e seguenti|lingua=en|accesso= 10 maggio 2019}}</ref>.
<math display="block">h=\frac{v+1}{\|v+1\|}\quad;\quad L=k_d\, I\, \max(0,n\cdot l) + k_s\, I\, \max(0,n\cdot h)^p </math>
 
dove <math>k_s</math> è il ''coefficiente speculare'', il colore speculare, della superficie.
 
==== Equazione standard dello Shading ====
Il colore riflesso <math>K</math> calcolato nel punto <math>Q</math> su una superficie illuminata da <math>n</math> luci è dato da<ref name=":3" />:
 
<math display="block">K=EM+DTA+\sum_{i=1}^nC_i[DT(N\cdot L_i)+SG(N\cdot H_i)^p(N\cdot L_i>0)]</math>
 
dove i prodotti scalari <math>N\cdot L</math> e <math>N\cdot H_i</math> sono fissati a zero, e le quantità coinvolte sono definite come segue:
* <math>D</math> = colore della riflessione diffusa
* <math>S</math> = colore della riflessione speculare
* <math>p</math> = esponente speculare
* <math>A</math> = colore della luce ambientale
* <math>E</math> = colore dell'emissione
* <math>T</math> = colore della texture map
* <math>G</math> = colore della gloss map
* <math>M</math> = colore della mappa di emissione
* <math>C_i</math> = colore della i-esima luce su <math>Q</math>
* <math>L_i</math> = vettore di direzione verso la i-esima luce
* <math>H_i</math> = vettore a metà strada per l'i-esima luce
* <math>N</math> = vettore normale
 
=== Gouraud Shading ===
 
Il Gouraud shading, che prende il nome da [[Henri Gouraud (informatico)|Henri Gouraud]], è un metodo usato in [[computer grafica]] per simulare i diversi effetti di luce e colore su un oggetto. In pratica, serve per ottenere un graduato cambio di colore su superfici a basso numero di poligoni (''[[Low poly|low-polygon]]'') senza dover ricorrere alla pesantezza computazionale del calcolo pixel per pixel. Gouraud pubblicò questa ricerca per la prima volta nel 1971.
{{Galleria
|larghezza=150
|titolo=Gouraud Shading
|align=right
|sfondo=
|bordo=grey
|Immagine:Gouraud low anim.gif|Sfera trattata con il Gouraud shading - da notare le inaccuratezze lungo i lati dei poligoni.
|Immagine:Gouraud high.gif|La stessa sfera riprodotta con un alto numero di poligoni.
}}
Il principio su cui si basa la tecnica di Gouraud è il seguente:
# Si determina la normale di ogni vertice di ogni poligono
# Si applica un modello di illuminazione a ogni vertice per calcolare l'intensità del vertice
# Si interpolano le intensità dei vertici usando l'interpolazione bilineare sulla superficie dei poligoni
Prima dell'avvento di hardware grafico capace di performare calcoli di illuminazione pixel per pixel, i colori diffusi e speculari erano calcolati solo a ogni vertice di una mesh triangolare. Questo metodo calcola i colori<ref name=":3" />:<math display="block">K_{primario} = E+DA+D\sum_{i=1}^nC_i\max \{ N \cdot L_i, 0\}</math><math display="block">K_{secondario} = S\sum_{i=1}^nC_i\max \{ N \cdot H_i, 0\}^p (N \cdot L_i>0)</math>dove:
* <math>D</math> = colore della riflessione diffusa
* <math>S</math> = colore della riflessione speculare
* <math>p</math> = esponente speculare
* <math>A</math> = colore della luce ambientale
* <math>E</math> = colore dell'emissione
* <math>C_i</math> = colore della i-esima luce su <math>Q</math>
* <math>L_i</math> = vettore di direzione verso la i-esima luce
* <math>H_i</math> = vettore a metà strada per l'i-esima luce
* <math>N</math> = vettore normale
a ogni vertice e li interpola lungo la faccia del triangolo. Il colore <math>K</math> di un pixel è in seguito calcolato usando l'equazione
 
<math display="block">K=K_{primario}\circ T_1\circ T_2\circ\cdot\cdot\cdot\circ T_k + K_{secondario}</math>
 
dove ogni <math>T_i</math> rappresenta un colore campionato da una delle <math>k</math> texture map, e l'operazione <math>\circ</math> è una delle diverse e disponibili operazioni di combinazione che includono la modulazione e l'addizione.
 
I punti di forza e di debolezza del Gouraud shading risiedono entrambi nell'uso che esso fa dell'interpolazione.
 
Interpolare i colori di vari pixel (conoscendone con precisione solo pochi) alleggerisce la computazione rispetto a modelli più sofisticati (come il Phong shading, da non confondere con l'[[Modello di riflessione di Phong|omonimo modello di riflessione]]). Tuttavia gli effetti di luce localizzati (come punti di riflettenza, tipo la riflessione di una sorgente di luce su di una mela) non verranno [[Rendering|renderizzati]] correttamente: se l'effetto è posizionato al centro del poligono, senza raggiungere i vertici, non apparirà come risultato del rendering di Gouraud; se lo stesso effetto è posizionato su di un vertice, verrà mostrato correttamente, ma verrà replicato in modo innaturale sui poligoni adiacenti. Il problema è facilmente riconoscibile se si renderizza una scena in cui la sorgente di luce si muove, spostando la riflessione presente sull'oggetto in questione, con il Gouraud shading si vedrebbe la riflessione allargarsi e stringersi continuamente, raggiungendo i picchi d'intensità nei vertici, e sparendo al centro dei poligoni.
 
Nonostante i problemi descritti, lo shading ideato da Gouraud è decisamente migliore del flat shading che richiede molta meno computazione, ma produce un risultato sfaccettato.
 
=== Ambient Shading ===
Premessa: nel mondo reale, le superfici che non sono illuminate da sorgenti luminose, sono illuminate da riflessioni indirette da altre superfici.
 
Le superfici che non ricevono alcuna illuminazione saranno renderizzate come completamente nere, che spesso non è cosa desiderabile. Un crudo ma utile metodo euristico per evitare le ombre nere è aggiungere una componente costante al modello di shading, il cui contributo al colore del pixel dipende solo dall'incidenza sull'oggetto, senza alcuna dipendenza dalla geometria della superficie.<ref name=":1" /> Questo è conosciuto come ambient shading - dove le superfici sono illuminate dalla luce "ambientale" che arriva equamente da ogni parte. Per convenienza nella regolazione dei parametri, l'ambient shading è di solito espresso come il prodotto di un colore di superficie con colore di luce ambientale, in modo che l'ambient shading possa essere regolato sia per le superfici individuali, sia per tutte le superfici insieme. Insieme al modello di Blinn-Phong, l'ambient shading completa un semplice e utile modello di shading:
 
<math display="block">L=k_a\, I_a+k_d\, I \max(0,n\cdot l) + k_s\, I\, \max(0,n\cdot h)^n</math>
 
dove <math>k_a</math> è il coefficiente ambientale delle superfici, o "colore ambiente", e <math>I_a</math> è l'intensità luminosa ambientale.
 
== Note ==
<references />
 
== Bibliografia ==
* H. Gouraud, "Continuous shading of curved surfaces," ''IEEE Transactions on Computers'', 20(6):623-628, [[1971]].
* H. Gouraud, ''Computer Display of Curved Surfaces'', Tesi di Dottorato, [[Università dello Utah]], [[Stati Uniti d'America|USA]], 1971.
* H. Gouraud, ''Continuous shading of curved surfaces''. In Rosalee Wolfe (editor), ''[https://web.archive.org/web/20060901022041/http://www.siggraph.org/publications/seminal-graphics.html Seminal Graphics: Pioneering efforts that shaped the field]'', ACM Press, [[1998]]. ISBN 1-58113-052-X.
 
== Voci correlate ==
* [[Shader]]
* [[Computer grafica 3D]]
* [[Mesh poligonale]]
* [[Riflessione diffusa]]
* [[Riflessione speculare]]
* [[Phong shading]]
* [[Modello di riflessione di Phong]]
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
 
{{Controllo di autorità}}
{{Portale|Informatica}}
 
{{Portale|mitologia greca}}
[[Categoria:Grafica 3D]]
[[Categoria:Computer grafica]]