4.9.8 Quando
Fallisce Tutto il Resto : Mappatura dei Materiali
Abbiamo a nostra disposizione alcuni
strumenti molto potenti per creare texture, ma se volessimo disporre texture
complesse in maniera più libera ? Bene, così come la
mappatura di un'immagine funziona per i pigmenti e la mappatura delle normali
funziona per le normali, possiamo mappare intere texture usando una mappatura
dei materiali.
Come per le mappature di immagini e di normali, abbiamo bisogno di un'immagine
di partenza in un formato che possa essere letto da POV-Ray, da usare come
mappa per determinare dove le singole texture andranno, ma in questo caso
abbiamo bisogno di specificare quale texture sarà associata ad un
determinato numero d'ordine nella tavolozza dei colori dell'immagine. Per
fare quest'immagine possiamo usare un programma di disegno che ci permetta
di selezionare i colori a partire dal numero che hanno all'interno della
tavolozza (il vero colore è irrilevante, dal momento che si tratta
solo di una mappa che dice a POV-Ray quale texture sarà usata in
quella posizione). Ora, se abbiamo il pacchetto completo di POV-Ray, possiamo
trovare nella directory include un'immagine chiamata povmap.gif
che è un'immagine bitmap che usa solo i primi quattro colori della
tavolozza per creare una cornice quadrata con le parole Persistance
Of Vision all'interno.
![]() |
Fig. 169-Immagine da usare come mappa
Quest'immagine andrà già
bene per una mappatura di esempio per la dimostrazione che segue. Usando
gli stessi file .inc, la stessa macchina fotografica e la stessa luce degli
esempi precedenti, inseriamo l'oggetto che segue.
#include "textures.inc"
plane { -z, 0
texture {
material_map {
gif "povmap.gif"
interpolate 2
once
texture { PinkAlabaster } // bordo interno
texture { pigment { DMFDarkOak } } // bordo esterno
texture { Gold_Metal } // lettere
texture { Chrome_Metal } // sfondo
}
translate <-0.5, -0.5, 0>
scale 5
}
}
![]() |
Fig. 170-Prima prova
La posizione della sorgente luminosa e
la mancanza di oggetti che si possano riflettere non permettono di mostrare
al loro meglio queste texture. Ma almeno possiamo vedere come funziona
il procedimento. Le texture sono state semplicemente disposte in accordo
alla posizione dei pixel il cui colore corrisponde ad un particolare numero
d'ordine della tavolozza. Usando la parola chiave once
(per evitare che le texture risultino affiancate) e traslando e scalando
la nostra mappa affinché questa possa rientrare all'interno dell'inquadratura
che avevamo usato, arriviamo a vedere l'intera scena. Naturalmente ciò
vale solo per immagini che sfruttano la tavolozza dei colori, come GIF
ed alcuni tipi di PNG. Le mappature di materiali possono anche usare formati
che non usano la tavolozza di colori, come i file TGA che costituiscono
l'output di POV-Ray. Ciò porta ad un'interessante conseguenza :
possiamo usare POV-Ray per produrre mappe per POV-Ray stesso ! Prima
di concludere con alcune delle limitazioni di queste texture speciali,
facciamo un'altra cosa con le mappature dei materiali per far vedere come
POV-Ray può prodursi le mappe. Per cominciare, se si sta usando
un'immagine che non fa uso della tavolozza, POV-Ray guarda al componente
rosso del colore del pixel (che può avere un valore da 0 a 255)
per determinare quale texture della lista usare. Quindi per creare una
mappa abbiamo bisogno di controllare con esattezza quale sarà il
valore di rosso di un determinato pixel. Possiamo fare questo controllo
così :
1) Usando una frase rgb
per scegliere il nostro colore. Ad esempio, rgb<x/255,0,0>,
dove "x" è il valore di rosso che vogliamo assegnare a
quel pigmento e poi...
2) Evitando di usare sorgenti luminose ed applicando una finitura finish{ambient
1} a tutti gli oggetti, per assicurarsi
che le luci e le ombre non interferiscano.
Confusi ? Bene, questo è un esempio che genererà una
mappa molto simile a povmap.gif, che abbiamo usato prima, tranne
per il formato che sarà .TGA. Notiamo che sono specificati
anche i componenti di colore blu e verde. POV-Ray li ignorerà nell'immagine
finale, ma sono specificati per noi umani, poiché i nostri occhi
non possono distinguere la differenza tra variazioni nel rosso tra 0 e
4/255. Senza le variazioni di blu e verde la nostra mappa ci apparirebbe
come un'immagine completamente nera. Questo può essere un modo geniale
di mandare messaggi segreti usando POV-Ray (inserirli in una mappa di materiali
da decodificare), ma è inutile se vogliamo vedere come è
la nostra mappa.
Renderizziamo il seguente file e rinominiamo l'immagine risultante povmap.tga
camera {
orthographic
up <0, 5, 0>
right <5, 0, 0>
location <0, 0, -25>
look_at <0, 0, 0>
}
plane { -z, 0
pigment { rgb <1/255, 0, 0.5> }
finish { ambient 1 }
}
box { <-2.3, -1.8, -0.2>, <2.3, 1.8, -0.2>
pigment { rgb <0/255, 0, 1> }
finish { ambient 1 }
}
box { <-1.95, -1.3, -0.4>, <1.95, 1.3, -0.3>
pigment { rgb <2/255, 0.5, 0.5> }
finish { ambient 1 }
}
text { ttf "crystal.ttf", "The vision", 0.1, 0
scale <0.7, 1, 1>
translate <-1.8, 0.25, -0.5>
pigment { rgb <3/255, 1, 1> }
finish { ambient 1 }
}
text { ttf "crystal.ttf", "Persists!", 0.1, 0
scale <0.7, 1, 1>
translate <-1.5, -1, -0.5>
pigment { rgb <3/255, 1, 1> }
finish { ambient 1 }
}
![]() |
Fig. 171-Un'altra immagine da usare come mappa
Tutto quello che dobbiamo fare è modificare il nostro ultimo esempio di mappatura di materiali cambiando la mappatura del materiale da GIF a TGA e cambiando il nome del file. Quando faremo il rendering usando la nuova mappa il risultato sarà molto simile a quello che abbiamo ottenuto con l'immagine GIF che teneva conto dei colori della tavolozza, tranne che non abbiamo dovuto usare un programma esterno per generare l'immagine : ha fatto tutto POV-Ray !
![]() |
Fig. 172
![]() |
![]() |
![]() |