Le immagini digitali sono normalmente trattate dai software di compositing e rendering come immagini RGBA a 32 bit.
RGBA si riferisce alle tre componenti colore Red Green e Blue ed al canale Alpha contenente la trasparenza. I 32bit indicano lo spazio occupato in memoria da ciascun pixel, in questo caso 8 bit per ciascuna componente colore.
Otto bit (un byte) possono rappresentare 256 valori diversi, da 0 a 255. Zero rappresenta il nero, 255 il bianco. Disponendo di 8 bit per canale colore è possibile rappresentare un totale di 16 777 216 colori diversi (256*256*256) e 256 livelli di trasparenza. Nel canale Alpha il nero rappresenta la totale trasparenza ed il bianco la totale opacità.
Tutti i software di compositing al momento di fondere due immagini, un soggetto dotato di canale Alpha ed uno sfondo, adoperano i metodi di trasferimento Add e Multiply per portare a termine l’operazione. La formula impiegata è (Sorgente X AlphaSorgente) + ( Destinazione X (1-AlphaSorgente)). Comprendere questo meccanismo ed il significato dei metodi di fusione permette un uso avanzato degli strumenti di compositing.
Il concetto di normalizzazione
Per prima cosa è necessario introdurre il concetto di Normalizzazione dei valori. La normalizzazione consiste nel ricondurre qualsiasi intervallo finito di valori in un intervallo convenzionale che va da 0 ad 1. Prendiamo ad esempio un gruppo di persone, di età compresa tra i 10 ed i 90 anni. Dieci sarà il limite basso del nostro intervallo e 90 il limite alto. Per ciascuna persona, possiamo applicare la formula: (Età - LimiteBasso) / (LimiteAlto - LimiteBasso) per ricondurre tutti i valori nell’intervallo 0-1. Una persona di 10 anni, nell’esempio, avrebbe un’età di zero (10-10 / 90-10 == 0/80 == 0). Una persona di 90 anni, avrebbe un’età convenzionale di 1 (90-10 / 90-10 == 80/80 == 1).
Una persona di 50 anni, che si colloca a metà strada tra le età possibili avrebbe appunto un’età convenzionale di 0.5 (50-10 / 90-10 == 40 /80 == 0.5). In un sistema normalizzato i rapporti tra le grandezze non variano. Cambia solo il modo di esprimere i valori. E questo è utile perchè l’intervallo tra 0 ed 1 ha alcune proprietà particolari:
- qualsiasi numero moltiplicato per 0 è sempre 0
- qualsiasi numero moltiplicato per 1 non cambia di valore
- moltiplicando per un valore tra 0 ed 1 si ottiene in effetti una divisione (moltiplicare per 0.5 equivale a dividere per due; moltiplicare per 0.1 equivale a dividere per dieci)
Se esprimiamo i canali RGBA in formato normalizzato, con 0 a 0 e 255 ad 1, possiamo sfruttare queste proprietà dell’intervallo per effettuare le forature con la formula indicata sopra. Ricordando che il canale Alpha nero vale zero, se moltiplichiamo l’immagine sorgente per il suo canale Alpha avremo che tutti i pixel neri nel canale Alpha diventeranno neri anche nell’immagine. Allo stesso modo tutti i pixel bianchi, solidi, del canale Alpha varranno 1 e moltiplicati per l’immagine originale la manterranno invariata.
I valori intermedi tra zero ed uno verranno progressivamente scalati, attenuati. Ad esempio un pixel con corrispondente pixel Alpha a 128, grigio, verrà moltiplicato per 0.5 in effetti dividendolo per due. Esattamente il risultato che ci si aspetta da un canale Alpha trasparente per metà.