Portal:InItalian/Sistema dei materiali di DarkPlaces/Concetti chiave

In teoria un designer o un artista grafico che altera delle texture con dei file dei materiali dovrebbe avere una comprensione minima delle forme d'onda e dovrebbe sapere come mescolare luci colorate (è roba che bene o male si fa alle superiori nelle lezioni di fisica). Se così non è, ecco alcuni concetti che bisogna saper padroneggiare per ottenere dei materiali ben funzionanti.

I materiali non modificano solo l'aspetto visibile della texture su un pennello geometrico, una  curva o la mesh di un modello; possono anche avere effetto sul contenuto, la "forma" o il movimento apparente di queste cose. L'effetto di una superficie non fa nulla per modificare la forma o il contenuto di un pennello. Sono effetti delle superfici ad esempio i glow (bagliori), le trasparenze e i cambiamenti dei valori RGB (rosso, verde, blu). I content material hanno effetto sul modo in cui il pennello opera nel mondo di gioco. Alcuni esempi sono l'acqua, i non-solidi e il dettaglio. Gli effetti di deformazione modificano la forma effettiva del pennello o della curva a cui sono applicati, e possono far sembrare che si stia muovendo.

Il potere ha un prezzo
Lo script del materiale dà al designer, artista o programmatore un notevole potere in termini di facile accesso sull'aspetto delle superfici del mondo di gioco e sui potenziali effetti speciali che potrebbero essere applicati ad esse. Ma è un potere che ha un prezzo, in termini di velocità di performance. Molti effetti OpenGL 2.0 legati alle parole chiave dei materiali (come water shader, refraction cubemap, offset mapping) danno al renderer più calcoli da fare, il che fa impiegare più tempo alla CPU/GPU e rallentano il gioco. La superficie dello shader per l'acqua disegna un mondo due volte per ottenere un'immagine riflessiva e una refrattiva, la refraction cubemap aggiunge un texture sampler, la parallax mapping crea più look-up delle texture (da 3 per l'offset mapping tradizionale a 14-15 per il relief mapping). Le superfici con un blending vengono disegnate due volte se sono illuminate da una o più luci in tempo reale (questo significa che il numero dei loro triangoli avrà un effetto doppio sulla r_speeds).

Colore RGB
RGB sta per "Red, Green, Blue", ovvero "rosso, verde, blu". Mescolare luci rosse, verdi e blu ad intensità diverse produce tutti i colori nei computer e nei monitor dei televisori. Questo metodo si chiama mescolanza additiva (ben diversa dal mescolare pigmenti nei dipinti o inchiostri colorati nei processi di stampa, che si basano su una mescolanza sottrattiva). Nel motore grafico DarkPlaces e in quasi tutti i programmi grafici per pc di fascia alta (e nel software di scelta dei colori di Windows) le intensità individuali delle componenti di rosso, verde e blu vengono espresse con valori numerici. Quando mescolati insieme su schermo, valori numerici identici per ogni componente cromatica producono un colore completamente neutrale (ovvero un grigio). Più è basso il valore (minimo 0), più la tinta è scura. Più è alto, più il risultato è chiaro o più il colore è saturato, fino ad un valore massimo di 255 (nei programmi grafici). Tutti i colori possibili in un computer possono essere espressi con l'unione di questi tre numeri. Il valore per il nero è 0 0 0. Il valore per il bianco puro è 255 255 255. Ad ogni modo, il comparto grafico di DarkPlaces ha bisogno che tutti i valori dei colori siano "normalizzati" in un intervallo da 0.0 a 1.0.

Normalizzazione: una scala da 0 a 1
Il motore grafico DarkPlaces utilizza valori numerici da 0.0 a 1.0 invece che da 0 a 255. Quasi tutti i programmi grafici per computer che permettono di lavorare coi valori RGB come numeri usano la scala da 0 a 255. Per convertirli, dividete ogni valore del colore usato dal programma di grafica per 255. I tre valori risultanti sono la terna con cui DarkPlaces riprodurrà lo stesso colore di prima. Questo stesso discorso vale anche per le coordinate delle texture.

Dimensioni delle texture
I file delle texture sono misurati in pixel. Le texture sono misurate in potenze di 2, con la (generalmente) più piccola texture utilizzata di 16x16 pixel. Quasi tutte saranno più grandi di così. Non serve che le texture siano quadrate, basta che entrambe le dimensioni siano potenze di 2. Alcuni esempi di dimensioni valide: 32x256, 16x32, 128x16.

Misurazioni
Le misurazioni usate per i materiali possono essere in unità di misura di gioco, di colore o per coordinate delle texture.

Unità di gioco

 * L'unità di gioco viene usata per le deformazioni, per specificare le dimensioni in relazione al mondo. In Blood Omnicide 16 unità corrispondono a un piede, 48 unità a un metro. La scala di base delle texture usata dall'editor di mappe NetRadiant equivale a due texel (o "texture element", o ancora "texture pixel") per ogni unità di gioco, ma si può alterare liberamente questo valore con gli script per i materiali.

Unità di colore

 * I colori scalano i valori generati dalle unità di texture per produrre effetti di illuminazione; lavorano come un canale alpha. Un valore di 0.0 dà un risultato completamente nero, e un valore di 1.0 lascia la texture inalterata. I colori vengono specificati a volte da un singolo valore che rappresenta tutti e tre i canali (rosso, verde e blu) e altre volte da valori separati per ogni canale.

Coordinate delle texture

 * Sono le dimensioni normalizzate (vedere prima) dell'immagine originale della texture. Una texture completa, indipendentemente dalla sua dimensione originale in texel, ha una misura normalizzata di 1.0x1.0. Per texture che si ripetono in modo semplice è possibile avere valori superiori a 1.0 o minori di 0.0, che daranno come risultato la ripetizione della texture. Le cordinate vengono generalmente assegnate dall'editor di livelli o dai tool di modellazione, ma è comunque importante saperlo in funzione di scorrimenti o movimenti molto rapidi della texture mentre il gioco è eseguito.

Funzioni delle forme d'onda
Alcune funzioni per il rendering dei materiali usano delle forme d'onda per modulare i valori nel tempo. Quando necessario, informazioni aggiuntive vengono date con funzioni sotto forma di parole chiave modulate da onde per descrivere l'effetto di una particolare forma d'onda. Al momento ci sono cinque forme d'onda usate negli script dei materiali:


 * seno: una funzione seno, un'onda regolare che avanza dolcemente e si estende da -1 a 1.
 * triangolare: un'onda triangolare cresce e cala rigidamente, andando da 0 a 1. Genera delle fomre d'onda dall'aspetto incostante.
 * quadrata: un'onda quadrata passa semplicemente da -1 a 1 senza valori intermedi.
 * dente di sega: in un'onda a dente di sega la porzione ascendente è simile ad un'onda triangolare che va da 0 a 1, ma la parte discendente torna a 0 immediatamente.
 * dente di sega inverso: è il contrario di una dente di sega: ascesa istantanea fino al valore massimo (1), poi un'onda triangolare discendente fino al valore minimo (0). La fase di questo tipo di onda va da 1.0 a 0.0 invece che da 0.0 a 1.0. Questo tipo di onda è particolarmente utile per dei cross-fade additivi.

Tutte le forme d'onda hanno le seguenti proprietà:

base
 * Dove ha inizio la forma d'onda. L'ampiezza si misura partendo dal valore della base.

ampiezza
 * E' l'altezza dell'onda che si forma, misurata partendo dalla base. Probabilmente dovrete testare e aggiustare questo valore per ottenere quello corretto per ogni nuovo stage dello shader. Maggiore è l'ampiezza, più l'onda è prominente nei picchi e profonda nelle valli.

fase
 * E' un valore normalizzato compreso tra 0.0 e 1.0. Cambiare la fase in un valore diverso da 0 influenza il punto sull'onda in cui la forma d'onda inizia a venire disegnata. Esempio: In un'onda seno o triangolare, una fase di 0.25 significa che l'onda stessa inizia a un quarto (25%) della distanza lungo la curva, o, per dirla in modo più semplice, inizia al picco dell'onda. Una fase di 0.5 la farebbe iniziare nel punto in cui l'onda stessa ri-attraversa la riga della base. Una base di 0.75 equivarrebbe al punto più basso della valle. Se per un materiale viene usata una sola forma d'onda un'alterazione della fase probabilmente non avrà effetti visibili, quindi sarebbe meglio lasciare il valore a zero (0). Se invece sono presenti due o più stage dello stesso processo in un unico materiale, ma con le fasi diverse, si possono ottenere effetti visivi interessanti. I cambiamenti di fase possono anche essere utilizzati quando si usa due volte lo stesso effetto in punti vicini e non si vuole che siano sincronizzati. Conviene scrivere un materiale diverso per ognuno, con la sola fase diversa.

frequenza
 * Questo valore viene espresso in termini di ripetizioni (o cicli) dell'onda ogni secondo. Un valore di 1 significa che l'onda si ripete 1 volta ogni secondo. Un valore di 10 che si ripete 10 volte ogni secondo. Un valore di 0.1 che si ripete 1 volta ogni 10 secondi.