Texture mapping: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m →Altri progetti: Aggiunto il parametro "Preposizione" nel template "Interprogetto" |
Funzionalità collegamenti suggeriti: 3 collegamenti inseriti. Etichette: Modifica visuale Modifica da mobile Modifica da web per mobile Attività per i nuovi utenti Suggerito: aggiungi collegamenti |
||
Riga 1:
[[File:Texturedm1a2.png|thumb|(1) Modello 3D senza texture<br/>(2) Modello 3D con texture|upright=1.3]]
Il '''texture mapping''' in [[computer grafica]] è una tecnica che permette di proiettare una o più [[texture (grafica)|texture]] sulla superficie di un [[modello 3D]], utilizzando le [[Mappatura UV|coordinate UV]]. Essa rende il modello più dettagliato e realistico, inoltre la sovrapposizione di più texture è utilizzata ad esempio per dare degli [[effetti speciali]] ai modelli tridimensionali come luce e nebbia. La tecnica, in particolare nelle [[animazione digitale|animazioni]] 3D, unisce la rapidità di calcolo della grafica poligonale alla ricchezza di dettaglio delle immagini in [[grafica raster]].
La diffusione di tale tecnica di animazione nelle applicazioni domestiche come i videogiochi si ebbe negli [[anni 1990]]; nei primi anni del decennio era ancora fattibile con velocità adeguate solo sui PC più potenti dell'epoca<ref>{{Dizionario dei videogame|389}}</ref>.
Riga 9:
Presto divenne chiaro che piuttosto che mappare l'albedo (ovvero la frazione dell'energia riflessa), era possibile mappare altri parametri del modello di illuminazione, come il vettore normale.<ref name=":0" /> Il variare del vettore normale rendeva il modello come increspato o accidentato (senza modificare la geometria del modello<ref>{{Cita libro|autore=David S. Ebert, F. Kenton Musgrave, Darwyn Peachey, Ken Perlin, Steven Worley|titolo=Texturing & Modeling - A Procedural Approach|edizione=3|anno=|editore=|città=|p=|pp=|ISBN=}}</ref>); in altre parole, l'aspetto di una trama. Ma il termine "texture" era già utilizzato per dare il significato a qualcosa di diverso, così questo fu chiamato ''bump mapping'' (Blinn, 1978). In seguito divenne chiaro che si potevano anche memorizzare in una mappa piccole variazioni nella posizione della superficie, e mentre questo sarebbe stato chiamato bump mapping - dato che effettivamente aggiungeva irregolarità a una superficie - quell'espressione era comunque in uso, così venne chiamato ''displacement mapping'' (Cook, 1984).<ref name=":0" />
Infine, quando divennero comuni le GPU programmabili, la loro texture memory era l'unica [[struttura dati]] disponibile indirizzabile casualmente al programmatore, ed era spesso usata per memorizzare array n-dimensionali, puntatori, e altre cose (ovvero, essa era trattata come una memoria ordinaria). Perciò, il particolare significato di "texture" è piuttosto dipendente dal tempo; quando si legge un documento sulla materia, c'è bisogno di sapere quando è stato scritto per sapere cosa il termine sta a indicare.
== Funzionamento ==
Riga 17:
Si consideri una scena con un pavimento ligneo, e si determini che il colore diffuso del pavimento sia controllato da un'immagine che mostra assi del pavimento con una grana lignea. A prescindere che si stia utilizzando il [[ray tracing]] o la [[rasterizzazione]], il codice dello shading che calcola il colore per un punto di intersezione raggio-superficie o per un frammento generato dal rasterizer, necessita di sapere il colore della texture nello shading point, in modo da usarlo come colore diffuso nel modello di shading lambertiano.
Per ottenere questo colore, lo [[shader]] esegue un ''texture lookup'':<ref name=":1" /> comprende la posizione, nel [[sistema di coordinate]] della texture immagine, che corrisponde allo shading point, e legge il colore in quel punto nell'immagine, che ci risulta nel ''texture sample''<ref name=":1" />. Quel colore è dopo usato nello shading e, dato che il texture lookup avviene in differenti posizioni nella texture per ogni pixel che vede il pavimento, diviene visibile un pattern di colori differenti nell'immagine. Il codice potrebbe apparire in questo modo:
<pre>
Color texture_lookup(Texture t, float u, float v) {
|