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 lenviromental 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 lhorizon 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