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).