7.5.2.5 Campi
di Quota (Height Field)
Gli height field sono oggetti veloci
ed efficienti che sono generalmente usati per ottenere montagne o altre
superfici che si innalzano partendo da un oggetto mesh composto
da centinaia di triangoli. La sintassi per gli height field è :
height_field {
TIPO_FILE "NOMEFILE"
[ hierarchy on/off ]
[ smooth on/off ]
[ water_level DECIMALE]
}
L' height field è essenzialmente
un riquadro ampio e profondo un'unità, con il lato superiore dall'aspetto
'montuoso'. L'altezza delle montagne in ciascun punto è calcolata
dal numero del colore o dal suo indice nella tavolozza per il punto corrispondente
in un'immagine. L'altezza massima è 1, che corrisponde al colore
di indice massimo nell'immagine (ad esempio, per un'immagine GIF a 256
colori, il valore massimo è dato dal colore n° 255).
![]() |
Fig. 201-Campi di quota
L'insieme di triangoli corrisponde direttamente ai punti nel file immagine. Ogni riquadro formato da quattro pixel adiacenti è suddiviso in due triangoli. Un immagine con risoluzione N*M punti, contiene (N-1)*(M-1) riquadri che sono divisi in 2*(N-1)*(M-1) triangoli.
![]() |
Fig. 202-Quote in funzione dei colori
La risoluzione dell'height field è
influenzata da due fattori : la risoluzione dell'immagine e il numero
di colori. La dimensione dell'immagine determina la risoluzione dell'height
field nelle direzioni x e z. Un'immagine più grande fa uso di un
maggior numero di triangoli ed ha quindi un aspetto più uniforme.
Il numero di colori determina la risoluzione lungo l'asse delle y. Un height
field creato a partire da un immagine ad 8 bit/pixel può avere 256
livelli di quota diversi, mentre uno creato a partire da un'immagine a
16 bit/pixel può avere 65536 livelli di quota diversi. In questo
modo, il secondo height field avrà un aspetto molto più uniforme
del primo, se viene creato e manipolato in maniera appropriata.
La dimensione dell'immagine non influisce sulle dimensioni dell'height
field, che rimangono comunque 1*1 (a meno di non scalarlo). Immagini ad
alta risoluzione daranno più triangoli, non un height field più
grande.
Ci sono sei o forse sette tipi di file immagine che possono definire un
height field :
height_field { gif "filename.gif"
}
height_field { pgm "filename.pgm" }
height_field { png "filename.png" }
height_field { pot "filename.pot" }
height_field { ppm "filename.ppm" }
height_field { sys "filename.???" }
height_field { tga "filename.tga" }
Il file immagine che si usa per creare
un height field può essere in formato GIF, TGA, POT, PNG, PGM, PPM
e se disponibile anche un formato specifico per la piattaforma, come BMP
per Windows oppure Pict per Macintosh. I formati GIF, PNG, PGM e quello
specifico per sistema (ovviamente in dipendenza dal sistema) sono gli unici
che possono essere creati usando un programma di disegno. Anche se esistono
programmi di disegno che creano file .TGA, non saranno molto utili per
creare lo speciale formato TGA a 16 bit/pixel che POV-Ray usa (vedi più
avanti, ed il paragrafo "HF_Gray_16").
In un formato di immagine come GIF che usa la tavolozza dei colori, il
numero di colore è il numero progressivo che il colore di
un certo pixel ha nella tavolozza. Usa un programma di disegno per vedere
la tavolozza di colori dell'immagine : Il primo colore è contrassegnato
dal numero zero, il secondo ha il numero 1 e così via. L'ultimo
colore della tavolozza è il numero 255.
Le parti dell'immagine che usano colori il cui numero d'ordine è
basso risulteranno in parti più basse dell'height field. Parti dell'immagine
che usano colori il cui numero d'ordine è più alto, daranno
le parti più alte.
Gli height field creati da immagini GIF possono avere solo 256 livelli
di quota diversi perché il numero massimo di colori in un'immagine
GIF è 256. Il colore corrispondente ad un determinato indice non
influenza l'altezza del punto. Il colore 0 potrebbe essere rosso, blu,
nero o arancione ma l'altezza di tutti i punti che usano il colore 0 sarà
sempre 0. Il colore 255 potrebbe essere azzurro, giallo, bianco o verde
ma tutti i punti che corrispondono al colore 255 saranno sempre ad altezza
1. Si possono creare immagini GIF adatte per generare height field con
programmi di disegno o con programmi di generazione frattale delle immagini
come Fractint. Si può trovare Fractint in quasi tutti
i posti in cui si trova POV-Ray.
Un file POT è fondamentalmente un file GIF con una tavolozza di
colori di 16 bit/pixel. Il numero massimo di colori in un file POT è
65536. Quindi un height field generato Da un file POT può avere
fino a 65536 livelli diversi. Ciò rende possibile avere height field
molto più dettagliati. In ogni caso l'altezza massima è sempre
uno anche se sono possibili più valori intermedi.
Al momento in cui questa guida viene scritta l'unico programma che crea
file POT è un programma freeware per PC chiamato Fractint.
Le immagini POT create con questo programma danno paesaggi fantastici.
I formati TGA e PPM possono essere usati più come strumento di memorizzazione
di numeri a 16 bit, che come immagini. Questi formati usano i valori del
rosso e del verde di ogni punto per immagazzinare i valori che determinano
le quote di un height field. Questi file danno risultati analoghi a quelli
dei file POT, ma devono essere generati da appositi programmi. Alcuni programmi
possono creare immagini TGA nel formato usato da POV-Ray. Tra questi Gforge
e Terrain Maker (nonché lo stesso POV-Ray, N.d.T.).
Gli height field in formato PNG sono generalmente memorizzati come immagini
a toni di grigio in cui il nero corrisponde alle parti più basse
e il bianco a quelle più alte. Poiché i file PNG possono
memorizzare immagini a toni di grigio fino a 16 bit/pixel gli height field
generati da esse saranno dettagliati come quelli ottenuti dalle analoghe
immagini in formato TGA e PPM. Poiché sono immagini a toni di grigio,
si potranno vedere con un normale visore. Gforge può creare
height field a 16 bit in formato PNG. Le immagini PNG a colori verranno
invece usate come le TGA e le PPM.
Il formato SYS è specifico della piattaforma usata. Vedi la documentazione
specifica per dettagli.
Un parametro facoltativo, indicato dalla parola chiave water_level
può essere aggiunto dopo il nome del file. La parola chiave è
seguita da un numero decimale che dice a POV-Ray di tralasciare le parti
dell'height field la cui altezza è al di sotto di quel valore. Il
valore di default è zero, si possono usare valori tra zero e uno.
Ad esempio water_level .5
fa renderizzare a POV-Ray solo la metà superiore dell'height field.
L'altra metà è "sott'acqua" (water level
significa 'livello dell'acqua') e non si vedrebbe comunque. Questo termine
deriva dal normale uso degli height field per renderizzare paesaggi. Si
potrebbe infatti usare un height field per creare un'isola e usare un altro
oggetto per simulare il mare. Una gran parte dell'height field sarebbe
sotto il livello dell'acqua, quindi è stato introdotto il parametro
water_level
che permette a POV-Ray di ignorarne la parte non visibile. La parola chiave
water_level
può servire anche per rimuovere parti indesiderate di un height
field corrispondenti a quote basse. Ad esempio, se hai un'immagine di un
frattale su uno sfondo a tinta unita, ed il colore dello sfondo è
il colore 0 nella tavolozza, lo si può rimuovere dall'height field
specificando water_level .001.
Normalmente gli height field hanno un aspetto ruvido ed irregolare, poiché
sono costituiti da molti triangoli. Aggiungendo la parola chiave smooth
POV-Ray può modificare i vettori normali alla superficie dei triangoli
in modo tale che le luci e le ombre dei triangoli appaiano più uniformi.
Questo può permetterti di utilizzare una minore risoluzione di quella
che sarebbe in realtà necessaria quando renderizzi l'height field.
Comunque, l'uso dei triangoli smussati aumenterà il tempo di rendering.
Per aumentare le velocità dei test di intersezione raggio/oggetto,
è possibile una gerarchia di bounding ad un livello. Per default
questa viene sempre usata, ma può essere disattivata per aumentare
la velocità di rendering per piccoli height field (generati cioè
da immagini a bassa risoluzione).
![]() |
![]() |
![]() |