# Texture (grafica)

Una texture è un'immagine bidimensionale in formato raster che viene riprodotta su una o più facce di un modello poligonale tridimensionale. Il termine indica l'alterazione visiva e/o tattile della continuità di una superficie, come anche l'insieme delle variazioni cromatiche e morfologiche possedute da qualsiasi materiale presente nella realtà.

## Definizione

Una "texture" è definita come la qualità visibile e tattile della superficie di un oggetto, che sia liscio, rugoso, morbido, o duro, ed è essenzialmente un effetto visivo che aggiunge ricchezza e dimensione a una qualunque composizione. Il termine "texture" deriva dal latino textura, rete, tessitura; il primo uso italiano risale al 1985. L'espressione italiana "testura" è poco usata.

## Caratteristiche generali
### Classificazione
#### Per casualità

In base al grado di casualità dell'immagine, le texture possono essere disposte lungo uno spettro che va da texture "regolari" a texture "stocastiche", collegate da transizioni graduali:
* Texture regolari – Un esempio di texture strutturata è un muro di pietra o un pavimento con piastrelle.
* Texture stocastiche – Queste texture si presentano come affette da rumore.

#### Per tipo

Vi sono tre tipi o classificazioni di texture nella comunicazione visiva:
* Fisica o letterale – Una tactile texture, anche definita come physical o literal texture, è una variazione tattile effettiva della superficie di un oggetto. Per esempio, legno, grano, sabbia, pelo, vetro, cuoio, tela, e metallo, presentano tutti una texture fisica. Questo tipo di texture si differenzia dalla visual texture in quanto possiede una qualità fisica che può essere percepita solo dal tocco umano.
* Visuale – L'illusione di una texture fisica sulla superficie di un oggetto è identificata come visual texture. Questi effetti illusori possono essere ottenuti attraverso l'uso di elementi progettuali come punti, linee, forme, luci, toni, contrasti e patterns.
* Implicita – Una implied texture è una texture visuale che non trova alcuna base nella realtà di ogni giorno. È usata spesso in opere astratte.

### Cos'è un pattern?

Una pattern texture o più semplicemente pattern, è un'immagine formata dalla combinazione di forme organiche o geometriche e colore, e tecnicamente, un motivo o un disegno che si ripete, secondo una simmetria e un ordine. I pattern possono essere semplici o complessi, ma a differenza delle altre texture, essi appaiono molto più strutturati e richiamano il senso della vista piuttosto che capacità emozionali. In genere si tratta di motivi decorativi, tessuti, figure astratte.
In grafica come in architettura il pattern diventa uno strumento per comunicare, creare equilibri, generare piacere estetico, questo secondo gli studi di Ernst Gombrich si colloca generalmente in una posizione intermedia tra gli estremi costituiti da caos e ridondanza. Tantissimi tra artisti (Kandinskij, Klee), studiosi, architetti si sono occupati di pattern o ne hanno sfruttato le qualità all'interno delle loro opere, partendo dalla ripetizione dello stesso elemento senza variazioni, inserendo all'interno del pattern diversi elementi, aumentando la quantità dell'informazione, senza superare la soglia oltre la quale si genera il caos. Gli sfondi della trama del legno sono fondamentalmente ciò che chiameresti una sorta di rappresentazione del legno. Esistono diverse varietà di legno e, per lo più, i fondali delle trame rappresentano la finitura del legno e forse non l'albero stesso.

## Le texture nella computer grafica 3D

Oltre che per la determinazione dei materiali stessi, nella computer grafica 3D le texture sono indispensabili anche per altri scopi:
* Raffigurare immagini: se disponiamo di una scena all'interno della quale deve essere visualizzata una fotografia, un'illustrazione, una scrittura (le pagine di un libro, per esempio) e così via.
* Aggiungere dettaglio: non sempre è opportuno aumentare il livello di dettaglio di un modello tridimensionale incrementandone il numero di vertici, anzi, tale situazione, oltre un certo grado è da evitarsi. In alcuni casi, per esempio l'aggiunta di "sporco" , la modellazione non può essere di alcuna utilità. Le texture possono venire in aiuto per rappresentare superfici che dispongono di dettagli molto irregolari (lo sporco), allo stesso modo di superfici suddivise in modo regolare (una pavimentazione, i mattoni di un muro e così via).

### Storia

Cronologia delle idee e degli sviluppi riguardanti le texture nell'ambito della computer grafica 3D:
* 1974 – Edwin Catmull introduce il texture mapping, seguito nel 1976 da Jim Blinn e Martin Newell. Il texture mapping consiste nel prendere un'immagine bidimensionale che rappresenti la superficie di un oggetto, per poi applicarla (mapparla) a un oggetto tridimensionale generato al computer – similmente a come si applica la carta da parati su un muro spoglio.
* 1976 – Jim Blinn e Martin Newell introducono l'enviromental mapping.
* 1976 – Nell'ambito delle texture procedurali, Blinn e Newell impiegano la sintesi di Fourier.
* 1978 – Jim Blinn introduce il bump mapping.
* 1978 – Fu e Lu propongono una tecnica di generazione delle texture sintattica e grammar-based.
* 1979-1980 – Schacter e Ahuja impiegano la sintesi di Fourier e modelli stocastici di vario tipo, per generare le texture di simulatori di volo.
* 1982 e 1984 – Rispettivamente, Fournier, Fussell, Carpenter, e Haruyama, Barsky, propongono di usare metodi di suddivisione stocastica ("frattale") per generare le texture.
* 1984 – Robert L. Cook introduce il displacement mapping.
* 1984 – Cook descrive il sistema shade trees, che è uno dei primi sistemi per cui è conveniente generare texture procedurali durante il rendering. Gli shade trees abilitano l'uso di differenti modelli di shading per ogni superficie oltre che per le sorgenti luminose e l'attenuazione attraverso l'atmosfera. Poiché gli input al modello di shading possono essere manipolati proceduralmente, gli shade trees rendono possibile usare le texture per controllare qualunque parte del calcolo dello shading. Texture a colori e trasparenti, reflection mapping, bump mapping, displacement mapping, e solid texturing, possono essere implementati usando gli shade trees.
* 1985 – Ken Perlin, Darwyn Peachey, e Geoffrey Gardner introducono tecniche di texturing 3D (solid texturing). Nella seconda metà degli anni Ottanta, tecniche procedurali per creare texture realistiche, come il marmo, legno, pietra e altri materiali naturali, guadagnano popolarità. Una texture procedurale di una superficie marmorea non usa un'immagine scansionata per definire i valori cromatici, ma piuttosto algoritmi e funzioni matematiche.
* 1985 – Perlin descrive un linguaggio completo di generazione procedurale delle texture e getta le basi per la più popolare classe di texture procedurali in uso oggi, ovvero quelle basate sul noise (rumore), una primitiva della generazione di texture stocastiche.
* 1986 – Nelson L. Max introduce l'horizon mapping.
* 1987 – Reeves, Salesin e Cook presentano un algoritmo per produrre ombre anti-aliased usando una image texture basata su una depth image di una scena renderizzata a partire dalla posizione della fonte luminosa.
* 1991 – Turk, Witkin e Kass descrivono modelli di sintesi di texture ispirati ai processi biochimici, che producono (fra altri effetti) i pattern di pigmentazione delle pelli degli animali.
* 1991 – Sims descrive un sistema di sintesi in cui le texture procedurali, rappresentate come espressioni LISP, sono automaticamente modificate e combinate da un sistema di programmazione genetico. Per mezzo di selezioni interattive tra le texture risultanti, l'utente di un sistema può guidare l'evoluzione simulata di una texture verso la direzione voluta.
* 1995 – Pedersen inventa un modo per permettere all'utente di posizionare liberamente texture patches su una superficie, e al tempo stesso minimizzare la distorsione della mappatura.
* 1996 – Venkat Krishnamurthy e Marc Levoy introducono il normal mapping.
* 2000 – Praun, Finkelstein, e Hoppe introducono le lapped textures, nelle quali molti piccoli campioni della texture sono posizionati su una superficie in modo da sovrapporsi, in accordo a un campo vettoriale definito dall'utente, che guida l'orientamento e la scala dei campioni.
* 2001 – Turk, Wei e Levoy generano una texture sintetica da dei campioni e "fanno crescere i capelli " questa proprio sulla superficie designata, tenendo in considerazione la sua forma e parametrizzazione.

### Texture mapping

Per permettere all'utente di replicare la superficie di un oggetto reale sul proprio modello tridimensionale, gran parte dei software consente il texture mapping: se si possiede un'immagine, detta in questo caso texture map, image texture, o semplicemente texture, è possibile eseguire una mappatura (mappatura UV) dell'immagine sulla superficie del modello.

### Texture procedurali

Le texture procedurali (procedural textures) sono delle texture generate matematicamente. Sono utilizzate per simulare in genere il legno, il marmo, il granito, la pietra, il metallo, e altro.

#### Vantaggi

Fra i vantaggi dell'utilizzo di texture procedurali:
* Vengono create interamente all'interno del software, pertanto non c'è bisogno di importare alcun riferimento esterno (immagini o altro).
* Sono seamless, ossia prive di punti di discontinuità visibili (ricoprono l'oggetto in modo uniforme indipendentemente dalla disposizione delle facce).
* Si adattano alle modifiche della mesh. Ciò significa che se viene effettuata un'operazione booleana tra due mesh, le nuove superfici create saranno sempre caratterizzate dalla texture procedurale.
* La dimensione di una texture procedurale è di solito misurata in kilobyte, mentre quella di una texture immagine è di solito misurata in megabyte.
* Una rappresentazione procedurale non ha una risoluzione fissa. In molti casi essa può fornire una texture completamente dettagliata prescindendo da quanto vicino la si sta guardando (non importa quanto sia alta la risoluzione).
* Una rappresentazione procedurale può essere parametrizzata, quindi può generare una classe di texture relative piuttosto che essere limitata a una texture immagine fissa.

#### Svantaggi

Fra gli svantaggi dell'utilizzo di texture procedurali:
* Una texture procedurale può essere difficile da costruire e debuggare. La programmazione è spesso dura, e programmare una descrizione del pattern implicito è specialmente difficile in casi non banali.
* Una texture procedurale, ovvero il risultato della programmazione, può essere una sorpresa. È spesso più facile prevederlo quando si scansiona o si dipinge una texture immagine.
* Calcolare una texture procedurale può essere un'operazione più lenta, piuttosto che accedere una texture immagine memorizzata.
* L'aliasing può essere un problema nelle texture procedurali. L'antialiasing può essere difficoltoso.

### Texture sintetizzate

Le texture sintetizzate sono delle texture che a differenza delle texture procedurali, vengono generate a partire da un'immagine, attraverso un confronto o un'estensione.
Gli algoritmi di sintesi delle texture sono pensati per creare una immagine di output che rispetti questi requisiti:
* L'output deve avere la dimensione data dall'utente.
* L'output deve essere quanto più possibile simile al campione.
* L'output non deve avere artefatti visibili come discontinutià, blocchi e spigoli non tangenti.
* L'output non deve essere ripetuto, cioè le stesse strutture nell'immagine di output non devono comparire in più posizioni.
Questi sono i metodi e algoritmi che sono stati oggetto di ricerche e sviluppo per la sintesi delle texture:
Tiling
Il modo più semplice di generare una grande immagine è di piastrellarla. Questo significa che copie multiple del campione sono semplicemente copiate e incollate, fianco a fianco. Il risultato è raramente soddisfacente. Ad eccezione di rari casi, ci saranno discontinuità fra le piastrelle e l'immagine risulterà molto ripetitiva.
Sintesi stocastica
La sintesi stocastica delle texture produce un'immagine attraverso la scelta casuale di valori di colore per ogni pixel, influenzata solamente da parametri di base come la minima luminosità, il colore medio o il massimo contrasto. Questi algoritmi si prestano bene solo con texture stocastiche, altrimenti producono risultati completamente insoddisfacenti in quanto ignorano ogni tipo di struttura all'interno dell'immagine campione.
Sintesi di texture strutturate single purpose
Gli algoritmi di questa famiglia utilizzano una procedura adattata per creare un'immagine di output, ovvero sono limitati a un singolo tipo di texture strutturata. Perciò, questi algoritmi possono essere solo applicati a texture strutturate e solo a texture con una struttura molto simile. Per esempio, un algoritmo single purpose (per unico scopo), potrebbe produrre immagini ad alta qualità di muri di pietra.
Chaos mosaic
Questo metodo, proposto dal gruppo per la grafica web di Microsoft, è una versione rifinita del tiling e si sviluppa nei seguenti tre passaggi:
* L'immagine di output è completamente coinvolta nel tiling. Il risultato è un'immagine ripetitiva con discontinuità visibili.
* Casualmente, parti selezionate di dimensione casuale del campione, vengono copiate e incollate nell'immagine di output. Il risultato è quindi un'immagine non ripetitiva con discontinuità visibili.
* L'immagine di output è filtrata per smussare gli spigoli.
Il risultato è una texture immagine accettabile, che non è troppo ripetitiva e non contiene troppi artefatti. Ma ancora, questo metodo è insoddisfacente perché la smussatura nel passaggio 3 rende l'immagine di output visibilmente sfocata.
Sintesi di texture pixel-based
Questi metodi, utilizzando i campi di Markov, il campionamento non-parametrico, la quantizzazione di vettori a struttura d'albero, e analogie d'immagine, sono alcuni degli algoritmi di sintesi di texture più semplici e di successo. Essi tipicamente sintetizzano una texture in un ordine scan-line trovando e copiando pixel dalla più prossima vicinanza locale nella texture sintetizzata. Questi metodi sono molto utili per il completamento dell'immagine. Possono essere vincolati, come nelle analogie d'immagine, per eseguire molte attività interessanti. Essi sono tipicamente accelerati con alcune forme di una tecnica di approssimazione del vicino più prossimo, dato che la ricerca esaustiva per il migliore pixel è alquanto lenta. La sintesi può essere anche eseguita in multirisoluzione, come per esempio attraverso l'impiego di un campo casuale di Markov di multiscala non casuale e non parametrica.
Sintesi di texture patch-based
La sintesi di texture patch-based crea una nuova texture copiando e cucendo insieme texture a offset vari, similmente all'uso di uno strumento di clonazione per sintetizzare manualmente una texture. Il quilting dell'immagine e il texture graphcut sono i migliori algoritmi conosciuti per la sintesi di texture patch-based. Questi algoritmi tendono a essere più effettivi e veloci dei metodi di sintesi di texture pixel-based.
Chemistry based
Le texture realistiche possono essere generate da simulazioni di complesse reazioni chimiche con fluidi coinvolti, cioè sistemi reazione-diffusione. Si pensa che questi sistemi mostrino comportamenti che sia qualitativamente equivalenti ai processi reali (morfogenesi) riscontrabili in natura, come per esempio le striature di animali (conchiglie, pesci, gatti selvatici...).