Texture mapping: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica |
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 |
||
(17 versioni intermedie di 10 utenti non mostrate) | |||
Riga 1:
[[File:Texturedm1a2.png|thumb|(1) Modello 3D senza texture<br/>(2) Modello 3D con texture|
Il '''texture mapping''' in [[computer grafica]] è una tecnica che permette di proiettare una o più
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>.
== Storia ==
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
== Funzionamento ==
Le ''texture
=== Caso generale ===
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
< Color texture_lookup(Texture t, float u, float v) {
int i = round(u * t.width() - 0.5)
Riga 28 ⟶ 31:
// return shading result
}
</pre>
</syntaxhighlight>In questo codice, lo shader chiede alla superficie dove guardare nella texture, e in qualche modo ogni superficie che si desideri ombreggiare usando una texture necessita di essere in grado di rispondere a questa richiesta. Questo porta al primo ingrediente chiave del texture mapping: abbiamo bisogno di una funzione che esegua una [[Mappatura UV|mappatura]] dalla superficie alla texture, che possiamo calcolare facilmente per ogni pixel. Questa è la '''texture coordinate function''', e diremo che essa assegna delle '''texture coordinates''' per ogni punto sulla superficie. Matematicamente essa è una mappatura dalla superficie <math>S</math> al dominio della texture, <math>T</math>:<ref name=":1" />▼
▲
<math display="block">\begin{align} \phi & : S \rightarrow T \\ & : (x,y,z) \mapsto (u,v) \\ \end{align}</math>
[[File:Texture mapping space.png|miniatura|
L'insieme <math>T</math>, spesso chiamato "
Per il caso del pavimento di legno, se il pavimento si trova a essere a una costante <math>z</math> e allineato agli assi <math>x</math> e <math>y</math>, possiamo semplicemente usare la mappatura<ref name=":1" />
Riga 38 ⟶ 43:
<math display="block">u=ax; \quad v=by</math>
per alcuni fattori di scala appropriatamente scelti <math>a</math> e <math>b</math>, per assegnare le texture coordinates <math>(s,t)</math> al punto <math>(x,y,z)_{\text{floor}}</math>, e in seguito utilizzare il valore di un ''texture pixel'', o '''texel'''<ref name=":1" />, il più vicino a <math>(u,v)</math>, come valore della texture in <math>(x,y)</math>.
I [[pixel]] da visualizzare sullo schermo, calcolati a partire dai texel, verranno in seguito governati dal filtro della texture. Il metodo più veloce è quello di usare l'[[Metodo dell'interpolazione lineare|interpolazione lineare]] ([[filtro lineare]]), ma l'[[interpolazione bilineare]] ([[filtro bilineare]]) o l'[[interpolazione trilineare]] ([[filtro trilineare]]) tra [[MIP map]] sono quelle più comunemente utilizzate per ridurre l'[[aliasing]], e quindi per aumentare la qualità complessiva dell'immagine. L'applicazione della texture sul modello tridimensionale è compito della [[scheda video]].
Riga 49 ⟶ 54:
* Steve Marschner, Peter Shirley, ''Fundamentals of Computer Graphics'', 4ed.
* David S. Ebert, F. Kenton Musgrave, Darwyn Peachey, Ken Perlin, Steven Worley, ''Texturing and Modeling - A Procedural Approach'', 3ed.
* [http://web.cse.ohio-state.edu/~wang.3602/courses/cse5542-2013-spring/15-texture.pdf Huamin Wang, ''Texture Mapping''] {{Webarchive|url=https://web.archive.org/web/20190711065658/http://web.cse.ohio-state.edu/~wang.3602/courses/cse5542-2013-spring/15-texture.pdf |date=11 luglio 2019 }}
* [https://www.cs.cmu.edu/~ph/texfund/texfund.pdf Heckbert Paul, ''Fundamentals of Texture Mapping and Image Warping'', 1989]
== Voci correlate ==
* [[Texture (grafica)]]▼
* [[Computer grafica 3D]]
* [[Ombreggiatura]]
* [[Shader]]▼
* [[Mappatura UV]]
▲* [[Shader]]
▲* [[Texture (grafica)]]
== Altri progetti ==
{{interprogetto|
[[Categoria:Computer grafica]]▼
== Collegamenti esterni ==
* [https://web.archive.org/web/20161020170140/http://happy-werner.hol.es/howtos/isw/parts/3d/chapter_2/chapter_2_texture_mapping.pdf ''Chapter 2: Texture Mapping''] da happy-werner.hol.es
*
{{portale|informatica}}
|