Confusione.
C’è un po di confusione riguardo alla premoltiplica delle immagini cgi. Questo problema è influenzato direttamente dal canale di alpha e dallo spazio colore di compositing. Vediamo quindi di fare un po di chiarezza.
Importanza della premoltiplica.
Innazitutto è fondamentale conoscere tutte le fasi matematiche del compositing per capire a fondo cosa succede durante i diversi step di manipolazione. Lavorare senza curare attentamente la premoltiplica crea degli artefatti neri in prossimità dei bordi nel compositing. Spesso potremmo trovarci di fronte a immagini non premoltiplicate con bordi molto seghettati.
Tutti sappiamo che le immagini sono formate da pixel e che questi ultimi tendono a discretizzare la qualità di una immagine visualizzabile. Un algoritmo di sampling effettuato via software discretizza ulteriormente parte delle nostra immagine. Ora immaginiamo di osservare il bordo di una sfera virtuale, chiaramente il sampling dell’alpha channel forma un gradiente che va dal bianco al nero.
Una immagine rgb senza premoltiplica è composta da colori interi saturi. La premoltiplica consiste nel moltiplicare i colori rgb per il canale alpha. Questo processo tende a scurire i pixel con alpha minore di 1 rendendoli totalmente neri dove l’alpha è 0. La premoltiplica è necessaria per avere una immagine finale corretta ma il problema deriva dalla fase di compositing.
Compositing.
Quando una immagine viene importata in un software di compositing la prima cosa da fare è depremoltiplicare l’immagine ( unpremult ), convertire l’immagine in uno spazio colore lineare e rieffettuare la premoltiplica. Questo processo evita di convertire i colori rgb in lineare modificati dal processo di premoltiplica durante il render. Generalmente anche dopo aver convertito l’immagine in uno spazio colore lineare, i pixel otterranno comunque una variazione logaritmica srgb temporanea poichè l’immagine viene visualizzata su un monitor classico.
I software di compositing permettono di ridurre i problemi di premoltiplica già in fase di input. L’immagine importata viene flaggata come premoltiplicata, questo farà capire al software che i colori rgb dovranno essere divisi per l’alpha in modo da riottenere i colori originali.
I pixel premoltiplicati portano con sè una percentuale di background originato durante il render. La percentuale di background è 100 meno la percentuale di alpha ( il bianco mappato a 100 e il nero a 0 ). Ciò vuol dire che se ad esempio andiamo a renderizzare una immagine su sfondo nero, una parte dei pixel periferici avranno tonalità scure dovute al blending tra l’immagine e il background nero.
Il software di compositing nel processo di divisione restituisce la tonalità originale ai pixel. E’ importante non premoltiplicare le immagini su sfondo diverso dal nero poichè il blending del pixel con lo sfondo differente porterebbe ulteriori problematiche. In questo caso bisognerebbe prima sottrarre la percentuale di colore del background per simulare un rendering su sfondo nero e a questo punto dividere per l’alpha per riotterere il colore solido originale.
Nel prossimo articolo vedremo la correzione colore legata alla premoltiplica.
ciao, perdonami per una rapida risposta ma ahime cerco di risponderti davvero dopo una giornata in cui ho avuto neanche un minuto libero. L’srg come ben sai si usa per compensare l’immagine di partenza affinchè su monitor srgb si veda come da progetto. Quando importi in nuke una immagine lineare, lui la usa come lineare senza effettuare modifiche. Quando invece importi una immagine con gamma non lineare allora puoi settarla nel nodo di input. questo ti permette quindi di dire al programma di convertire limmagine da srgb(ad esempio) a lineare. tutto ciò che matematicaemnte si fa sui nodi avviene in… Read more »
Ciao Giovanni, ti avevo fatto questa domanda, specificando molto benegli argomenti, proprio per avere risposte precise. Ti ringrazio per la replica ma mi appare ancora un po’ troppo confusa. Io credo che sarebbe meglio che tu ti prendessi un poco più di tempo per rispondere in maniera puntuale ad ogni perplessità sollevata. Per esempio, quando tu dici: ” Quando invece importi una immagine con gamma non lineare allora puoi settarla nel nodo di input. questo ti permette quindi di dire al programma di convertire l’immagine da srgb(ad esempio) a lineare. tutto ciò che matematicamente si fa sui nodi avviene in… Read more »
Ciao Giovanni, ho cominciato con Nuke e vorrei fare un po’ di chiarezza su alcune termini da te usati per capire bene il workflow del compositing in Nuke. Innanzitutto, comincerei dalle immagini CGI in ingresso in Nuke, che chiamo convenzionalmente come FOREGROUND. Se importo un render 3D, che è lineare e con alpha premoltiplicato (io li faccio così e così li richiedo a chi me li fa), non devo fare nulla perché Nuke me li riconosce come lineari. Quindi, se ho ben capito, sui render 3D non ci sono problemi. Se invece importo footage in Greenscreen già bucato, dovrei prima… Read more »
Ciao G,
spero di non aver detto capperate…
Ciao theiamania e scusami per il ritardo ma in verità ti dico, ero al mare quando hai commentato l’ultima volta e ho voluto sempre farlo ma poi mi è passato di mente. Normalmente se la premoltiplica è attiva nel software il bordo del render verra sempre sfumato con il nero a meno che tu non la disattivi. Se infatti renderizzi senza premoltiplica, ottieni un rgb pulito non sfumato e un canale alpha sfumato. In compositing poi fai la premoltiplica e li essendo un editor virtuale compare la tua bella immagine senza lo sfondo e senza contaminazione.
A presto
Ciao e grazie perla replica. Vorrei approfondire il discorso perché secondo me non è chiaro. Quandi tu dici. “…Generalemnte il background è nero e quindi puoi ben immaginare come l’interpolazione lineare causata dall’alpha permetta al nero di essere visibile…” intendi dire che tu metti un background nero dietro al tuo modello 3d, mettiamo di un auto, prima di renderizzare? Non credo proprio…! Tu crei il modello 3D , senza alcuno sfondo, e quindi hai una canale alpha bucato perfettamente! Quello che puoi decidere è il tipo di antialiasing, in modo da decidere un tipo di bordo sfumato tra la parte… Read more »
Scusa ma ho premuto un tasto e il messaggio è partito senza che fosse completo… Lo riscrivo qui di seguito, corretto. Ciao e grazie perla replica. Vorrei approfondire il discorso perché secondo me non è chiaro. Quandi tu dici. “…Generalemnte il background è nero e quindi puoi ben immaginare come l’interpolazione lineare causata dall’alpha permetta al nero di essere visibile…” intendi dire che tu metti un background nero dietro al tuo modello 3d, mettiamo di un auto, prima di renderizzare? Non credo proprio…! Tu crei il modello 3D , senza alcuno sfondo, e quindi hai una canale alpha bucato perfettamente!… Read more »
Ciao Theiamania, capisco la tua confusione. Chiaramente sto seguendo un percorso e questo articolo, come tutti gli altri, è molto superficiale. La premoltiplica e il lut sono due aspetti digitali che fanno dei danni ma in realtà non sono altro che due funzioni matematiche, una di moltiplicazione e l’altra generalmente esponenziale. I software 2d e 3d generalmente tendono ad avere la premoltiplica di serie poichè l’output è già il risultato finale di una immagine e non ha bisogno di compositing. La premoltiplica non è altro che un semplice calcolo matematico applicato dal software sui pixel perfierici, dove l’alpha non è… Read more »
Ciao Giovanni e complimenti per il sito. Riguardo alla premoltiplicazione, trovo l’argomento assai fumoso e questo tuo articolo, cosentimelo, mi ingenera ulteriore confusione. Mi spiego. Innanzitutto dovremmo distunguere fra immagini che vengono da render 3D e che quindi non hanno un colore solido di background che ne contamini la maschera, da imagini invece che vengono da bucature come Keying, Rotoscoping o mascheramenti d’altro tipo, magari fatti in Photoshop o AE, nei quali invece hai sempre un colore di sfondo che ti contamina i bordi della maschera. Quindi dovresti specificare se e perchè dovremmo premultiplicare incaso di immagini da 3D render… Read more »