Composizione con trasparenza

Quando la trasparenza è presente in entrambi i fotogrammi elaborati da una delle transizioni di composizione dinamica di Kdenlive, il risultato può sorprendere alcuni utenti. Fortunatamente, le cose non sono così inspiegabili come possono sembrare. Vediamo quindi direttamente come funzionano la trasparenza e le transizioni.

Trasparenza e transizioni dinamiche

Per quanto riguarda la gestione della trasparenza, le transizioni di Kdenlive si dividono in due categorie:

  1. Affine utilizza il cosiddetto operatore di composizione atop.

  2. Composite, Composite & Transform e Fusione Cairo (affine) utilizzano invece l’operatore di composizione over.

Ma cosa significano realmente atop e over? Vediamo cosa fanno questi operatori di composizione utilizzando un esempio tipico con un titolo e uno sfondo semitrasparente. Per semplicità, inizialmente ignoreremo il parametro Opacità delle transizioni appena citate, così da rendere più semplice la comprensione. Una volta acquisito questo concetto, vedremo infine come il parametro Opacità si inserisce nel quadro completo.

Affine: composizione Atop

../../_images/affine-transition-atop.png

Il risultato della composizione atop si comprende meglio osservandone innanzitutto l’effetto: il testo del clip titolo nella traccia superiore scompare (in parte) nelle regioni in cui la clip sottostante, sulla traccia centrale, è (parzialmente) trasparente.

La clip a scacchiera nella traccia in basso ha solamente uno scopo illustrativo, per consentirci di vedere meglio le aree trasparenti.

Si noti come le due transizioni Affine siano concatenate: per prima cosa, l’Affine superiore compone la clip del titolo sullo sfondo sfumato, successivamente l’Affine inferiore compone il risultato sullo sfondo a scacchiera.

../../_images/Alpha-Compositing-1.jpg

Ma come gestisce esattamente la trasparenza la transizione Affine? Osserviamo questa illustrazione realizzata appositamente, nella quale abbiamo due pixel, ciascuno con un certo grado di trasparenza (i valori alfa, αA e αB). È importante non confondere la trasparenza dei pixel con il parametro Opacità delle transizioni.

Il nostro pixel rosso proviene dal fotogramma della traccia superiore (B), mentre quello verde dal fotogramma della traccia inferiore (A). Un valore alfa pari a 0 indica un pixel completamente trasparente, mentre un valore alfa pari a 1,0 (o 255) indica un pixel completamente opaco.

La transizione Affine ignora semplicemente le informazioni sulla trasparenza contenute nel pixel del fotogramma superiore (quello rosso).

Utilizza esclusivamente le informazioni sulla trasparenza (verde) contenute nei fotogrammi della traccia inferiore! In termini matematici: α = αA

Ed è proprio questo che spiega perché, nell’esempio precedente, il testo del titolo scompare nelle regioni in cui il clip della traccia centrale è trasparente.

Composite e simili: la composizione Over

../../_images/composite-transition-over.png

Anche in questo caso utilizziamo sostanzialmente la stessa configurazione di prima, ma questa volta usiamo Composite & Transform* al posto delle transizioni **Affine. Come prima, concateniamo le transizioni in modo che quella inferiore operi sul risultato di quella superiore.

Ma guardiamo il risultato: è diverso! Il risultato dell’operatore over è probabilmente quello che la maggior parte degli utenti si aspetterebbe. Ora la clip titolatrice nella traccia superiore non viene più (per così dire) ritagliato.

../../_images/Alpha-Compositing-2.jpg

Poiché l’operazione over produce risultati più conformi alle aspettative di molti utenti, come gestisce esattamente la trasparenza?

In parole povere: se dipingi un pixel semitrasparente sopra un altro pixel semitrasparente, il risultato sarà meno trasparente. Sarà persino meno trasparente del pixel del fotogramma inferiore. È probabilmente ciò che ci aspetteremmo dipingendo con una vernice semitrasparente.

Il calcolo della trasparenza risultante per i due pixel, provenienti rispettivamente da un fotogramma superiore (B) e da uno inferiore (A), è quindi questa volta più complesso.

Anche in questo caso partiamo dalla trasparenza del pixel del fotogramma inferiore (verde), che utilizziamo come base. Questa volta, però, non possiamo ignorare la trasparenza del pixel del fotogramma superiore (rosso): sommando semplicemente le due trasparenze non produrrebbe un risultato sensato: cosa significherebbe una trasparenza pari a 2,0 o a 511?

La trasparenza del pixel rosso viene quindi ridimensionata: si può immaginare di comprimere la scala originale 0–1,0 nello spazio disponibile al di sopra del valore di trasparenza verde. La trasparenza risultante è quindi la somma del valore alfa di base del pixel verde, più il valore alfa ridimensionato del pixel rosso. Ricordiamo che, in un certo senso, stiamo dipingendo sopra il fotogramma inferiore.La formula è: α = αA + αB (1 − αA)

Parametro Opacità della transizione

Le transizioni di composizione dinamica dispongono inoltre di un parametro chiamato Opacità. È facile confonderlo con la trasparenza dei pixel, ma si tratta di due cose diverse. Il parametro Opacità si applica solo ai fotogrammi superiori (B). È una sorta di controllo generale, ma come funziona esattamente?

../../_images/Alpha-Compositing-3.jpg

Cominciamo nuovamente con la transizione Affine. Abbiamo visto in precedenza che Affine ignora la trasparenza dei pixel del fotogramma superiore (rossi). Affine ignora anche il parametro Opacità quando calcola la trasparenza del pixel risultante.

Il parametro Opacità influenza invece il modo in cui viene calcolato il colore del pixel risultante: si tratta di un’interpolazione lineare tra il colore del pixel del fotogramma superiore (B) e quello del fotogramma inferiore (A). L’opacità determina quindi il punto esatto della fusione: un valore di opacità pari a 0,0 produce esclusivamente il colore del pixel del fotogramma inferiore (B), mentre 1,0 produce esclusivamente il colore del pixel del fotogramma superiore (A). Un valore di 0,5 produce un risultato intermedio tra i due colori dei pixel.

In sintesi: nel caso della transizione Affine, il parametro Opacità influisce esclusivamente sulla fusione dei colori tra i pixel del fotogramma superiore (B) e di quello inferiore (A).

../../_images/Alpha-Compositing-4.jpg

Passiamo ora alle altre transizioni: Composite e simili.

Per quanto riguarda la fusione dei colori, si applica lo stesso procedimento appena visto con la transizione Affine: il parametro Opacità controlla la quantità di colore del pixel del fotogramma superiore (B) che entra nella fusione.

Quando però osserviamo come viene calcolata la trasparenza del pixel risultante, le cose iniziano a essere diverse. Abbiamo visto che la trasparenza del pixel del fotogramma superiore (B) viene ridotta in proporzione inversa alla trasparenza del pixel del fotogramma inferiore (A). Il parametro Opacità porta questo procedimento ancora oltre: riduce ulteriormente la trasparenza del pixel del fotogramma superiore (B). Vedi anche l’illustrazione.

Di conseguenza, il parametro Opacità controlla quanta opacità del pixel del fotogramma superiore (B) viene effettivamente applicata. In questo modo è possibile creare una dissolvenza in entrata o in uscita del fotogramma superiore.

In sintesi: nel caso delle transizioni Composite (e simili), il parametro Opacità influisce sia sulla fusione dei colori dei pixel del fotogramma superiore (B) e di quello inferiore (A), sia sulla trasparenza del fotogramma superiore (B).

Note

Letture ulteriori
  • Articolo di Wikipedia su Alpha Compositing, con un riferimento al documento originale SIGGRAPH’84 di Porter Duff su «Compositing Digital Images».

  • L’articolo di Craig Northway presentato a SVG Open 2015 paper,“ Understanding Compositing and Color extensions in SVG 1.2 in 30 minutes!“, in particolare la tabella degli operatori di Porter-Duff nel capitolo 6, con la colonna relativa al calcolo dell’alfa risultante.

Fonti

Il testo originale è stato inviato dall’utente TheDiveO all’ormai defunto blog kdenlive.org. Per questo la documentazione è stata estratta da kdenlive.org, aggiornata e adattata per corrispondere allo stile generale.