In questo tutorial esamineremo caratteristiche, impostazioni, punti in comune e differenze di Depth e Mist: due Render Passes di Compositing che, in Blender, ci forniscono alcune informazioni sulla distanza degli oggetti o sulla profondità della scena in post-produzione.
Trascrizione del video
Salve a tutti! In questo tutorial esamineremo caratteristiche, impostazioni, punti in comune e differenze di Depth e Mist: due Render Passes di Compositing che, in Blender, ci forniscono alcune informazioni sulla distanza degli oggetti o sulla profondità della scena in post-produzione.
Entrambi possono essere utilizzati, infatti, per ottenere delle immagini che appariranno nere nei punti più vicini alla telecamera e bianche nei punti più lontani, consentendoci di realizzare degli effetti sia miscelando direttamente queste immagini con il rendering che utilizzandole come maschere per realizzare altri effetti, come ho mostrato ad esempio nella mia mini-serie di videotutorials sull'Atmospheric Perspective.
Tuttavia, ci sono alcune differenze, non solo nel modo in cui il range dei valori viene calcolato nella scena virtuale, ma anche in altre caratteristiche delle immagini ottenute, che possono rendere più o meno adatte per alcuni utilizzi. Per cercare di spiegare queste differenze al meglio, nel corso del tutorial farò uso di un paio di scene 3D e vi mostrerò le differenze nei risultati modificando di volta in volta alcune impostazioni.
Detto brevemente, la differenza tra Depth e Mist è che Depth restituisce i valori reali di distanza degli oggetti dalla telecamera virtuale, mentre Mist introduce la foschia a partire da una determinata distanza dalla telecamera ed incrementandola lungo una determinata profondità, superata la quale tutto diventa bianco.
Depth è più indicato, quindi, in quelle applicazioni dove è necessario utilizzare i veri valori di distanza, come con i nodi Defocus e Z-Combine.
Defocus consente di mettere a fuoco gli elementi ad una certa distanza dalla telecamera, sfocando gli altri (implementando così la profondità di campo).

Z-Combine consente invece di miscelare due scene stabilendo quali pixel mostrare e quali no proprio in base ai valori di distanza dalla telecamera, memorizzati nei campi Z o Depth di ciascuna scena o immagine.

Ciò non significa, comunque, che Depth non possa essere utilizzato in altri casi: io stesso l'ho utilizzato nella miniserie su Atmospheric Perspective, ma lì ho dovuto normalizzare le informazioni restituite da Depth; vedremo presto cosa vuol dire normalizzare Depth e quali conseguenze può avere sui dati.
Il Render Pass Depth è selezionato di default nella sezione Passes della scheda View Layers, dell'editor Properties; in quella scheda, quel Render Pass è chiamato Z, mentre nel nodo Render Layers di Compositing è chiamato Depth.

Il valore minimo di distanza restituito da Depth è dato dal valore Clip Start dell'oggetto telecamera, perché tutti gli oggetti posti a distanza minore di Clip Start dalla telecamera non vengono renderizzati, per cui - se non si normalizza l'output di Depth - quello è il valore minimo che Depth può restituire.

Il valore massimo di distanza restituito da Depth è dato invece dal valore Clip End dell'oggetto telecamera, perché tutti gli oggetti posti al di là di quel valore non vengono renderizzati. Lo sfondo dell'universo virtuale è considerato a distanza infinita, per cui avrà il valore massimo nella maschera Depth.
È possibile visualizzare i punti Clip Start e Clip End nella scena 3D selezionando la telecamera virtuale e attivando l'opzione Limits della sezione Viewport Display, nella scheda Data dell'editor Properties.
In questo modo, sarà più facile impostare il valore Clip End in maniera appropriata.

Mist restituisce invece un'immagine che è via via più bianca man mano che la distanza della telecamera aumenta, ma in questo caso il punto di partenza dell'effetto nebbia non è dato da Clip Start, ma da un valore che potremo specificare a piacere, chiamato Mist Start.
A differenza di Depth, che è attivo di default, il Render Pass Mist va attivato esplicitamente nella sezione Passes e questa operazione va effettuata prima di avviare il rendering, altrimenti l'informazione non verrà elaborata e sarà necessario avviare nuovamente il rendering per poterla utilizzare.
Dopo aver attivato il Render Pass Mist, nella scheda World apparirà una nuova sezione, chiamata appunto Mist, dove potremo impostare Mist Start e altri parametri.

C'è un'altra differenza tra Mist e Depth: Mist non fa uso di Clip End per determinare la distanza oltre la quale renderizzare bianchi tutti gli oggetti, ma di un parametro chiamato Mist Depth, per cui tutti gli oggetti posti a distanza Start + Depth verranno renderizzati come bianchi.
È possibile visualizzare anche il Mist Start e il Mist Depth nella 3D Viewport, semplicemente attivando la casella Mist nella sezione Viewport Display della scheda Data. Se avete attivato anche l'opzione Limits, conviene disattivarla perché le loro rappresentazioni si sovrappongono.

Prima di effettuare nuovamente il rendering, sto impostando i valori di Mist Start e Depth in modo tale che l'effetto si sovrapponga ai valori Clip Start e Clip End.
Nella sezione Mist della scheda World è presente inoltre un altro parametro: Falloff, che indica in che modo implementare la nebbia sulla distanza. La modalità impostata di default è Quadratic, ma sono presenti anche le opzioni Inverse Quadratic e Linear.
Quadratic implementa la stessa transizione dell'illuminazione, fornendo un passaggio più smoothed da 0 a 1. Linear implementa un passaggio un po' più repentino di Linear. Per finire, Inverse Quadratic passa molto velocemente da 0 a 1, mostrando una nebbia fitta già per gli elementi in primo piano.

Depth non presenta questo parametro perché non è un effetto da implementare seguendo una formula, ma restituisce i veri valori di distanza degli oggetti... potremmo dire che è sempre lineare, quindi, ma non ha molto senso fare questa precisazione.
Come vi ho detto prima, Depth è quindi più indicato per ottenere informazioni sulle vere distanze, mentre Mist è più indicato per realizzare l'effetto da cui prende il nome, perché ci consente di impostare le caratteristiche a piacere.
Effettuando adesso il rendering ed esaminando i Passes in una finestra Compositor, otterremmo un risultato interessante dall'uscita Mist, mentre la maschera in arrivo da Depth risulterà, almeno apparentemente, inutilizzabile.

Vediamo adesso cosa vuol dire "normalizzare Depth" e perché spesso si fa uso, in diversi tutorials, del nodo Normalize.
Come detto precedentemente, i valori restituiti da Z-Depth non sono nel range da 0 a 1, ma indicano effettivamente le distanze dalla telecamera virtuale, per cui può essere utile se ad esempio volete introdurre un effetto esattamente ad una determinata distanza dalla telecamera.

I numeri memorizzati possono essere molto grandi, per cui il campo Z-Depth memorizza i dati utilizzando più memoria degli 8 o 16 bit della maggior parte dei file immagine come JPG o PNG; sono quasi sicuro che, in effetti, faccia uso di ben 32 bit.
Nella Backdrop, inoltre, tutti i valori maggiori di 1 vengono troncati a quel valore e i pixel corrispondenti vengono mostrati come bianchi. I valori di Z-Depth sono però dati da Clip End, che in genere è molto maggiore di 1.
Per questi motivi i valori restituiti non vengono visualizzati correttamente nella Backdrop dell'editor di Compositing, in quanto in quella scheda tutti i valori maggiori di 1 vengono renderizzati come bianchi, per cui nella maggior parte dei casi le immagini restituite appaiono, per l'appunto, molto chiare e povere di dettagli...
… in effetti, nella scena da me utilizzata il valore Clip Start è 1 e Clip End è 20000, per cui il Depth Pass appare completamente bianco!
Per questo motivo, si utilizza spesso un nodo Normalize del gruppo Utilities per mappare i valori nel range da 0 a 1, ma su questo punto dobbiamo soffermarci perché c'è una precisazione importante da fare.

Il nodo Normalize non mappa i valori tra Clip Start e Clip End nel range da 0 a 1, ma prende in considerazione i valori minimi e massimi dei pixel presenti nell'immagine che elabora, che però non è quella che vediamo nella Backdrop perché, come detto poco fa, il canale Depth memorizza molti più dati di quelli visualizzabili.
Ecco perché, se colleghiamo un nodo Normalize tra l'uscita Depth e il Viewer, gli elementi in basso nel rendering appaiono neri: perché quelli sono i punti più vicini alla telecamera virtuale, che quindi hanno i valori più scuri nella maschera Depth, e che quindi verranno renderizzati come neri nella versione normalizzata, anche se chiaramente non sono posti a distanza Clip Start dalla telecamera virtuale!

Considerazioni analoghe possono essere fatte anche per gli oggetti più lontani e per i pixel che appariranno bianchi nella versione normalizzata della maschera Depth.
A riprova del fatto che Normalize agisce sui valori minimi e massimi che trova nell'immagine che gli viene fornita, guardate cosa succede se normalizzo anche l'informazione in arrivo da Mist: i pixel più in basso, che sono i più scuri, vengono rimappati 0 e, quindi, renderizzati come neri, mentre i pixel degli elementi più lontani erano già bianchi e quindi non vengono modificati.
Vi mostro un altro esempio per comprendere meglio questo concetto. Nella scena che sto mostrando adesso, la telecamera e alcuni oggetti sono posizionati all'interno di una scatola.
Il valore Clipping End della telecamera è posto in maniera tale da renderizzare la faccia anteriore del parallelepipedo sul fondo, ma non la parete posteriore della scatola.

In effetti, nemmeno il parallelepipedo è interamente visibile, ma ciò è dovuto all'effetto della prospettiva dell'inquadratura.

Non ci sono oggetti posti in prossimità del Clip Start, che è posto a 10 centrimetri dalla telecamera: anche le pareti della scatola ai bordi dell'inquadratura, infatti, si trovano ad una distanza maggiore di quel valore dalla telecamera.
Se avvio adesso il rendering ed esamino il Render Pass Depth non normalizzato, la parete in fondo è completamente bianca, perché di fatto il Depth Pass non vede oltre il parallelepipedo più lontano e renderizza tutto il resto come bianco.
Non ci sono, di contro, zone nere, perché, come detto poco fa, non ci sono oggetti posti a Clip Start.

Se però utilizziamo un nodo Normalize, ecco che viene introdotta una banda nera in basso, che abbiamo visto anche nel rendering della scena utilizzata precedentemente: quella parte di pavimento è evidentemente la più vicina alla telecamera.

Possiamo verificare quanto detto spostando verso l'interno una delle pareti laterali, per fare in modo che si trovino più vicine alla telecamera, per poi avviare nuovamente il rendering.

È bene comprendere quindi come la maschera Depth viene alterata da Normalize. Questo nodo non dovrebbe essere utilizzato con Mist e anche il suo utilizzo con Depth va deciso con criterio: è infatti utile per realizzare maschere per effetti particolari, come il già citato Atmospheric Perspective, mentre in altri casi non andrebbe utilizzato.
A questo punto potreste chiedervi se esiste un modo per mappare correttamente i valori di Clip Start e Clip End nel range da 0 a 1, per vedere la maschera Depth nella Backdrop... beh, sì, c'è: aggiungete un nodo Map Range dal gruppo Utilities nel Compositor, dopodiché rendete i valori From Mix e From Max del nodo uguali ai valori Clip Start e Clip End della telecamera. Otterrete una maschera molto simile a quella restituita dal Render Pass Mist, ma ovviamente perderete i veri valori della distanza degli oggetti.

C'è un'ultima differenza importante da sottolineare, prima di chiudere questo tutorial: il numero di samples utilizzati per calcolare i valori delle distanze degli oggetti nella scena. Mist, infatti, implementa anche l'Anti-Aliasing, che invece non è calcolato da Z-Depth.
Il valore Z-Depth, in particolare, fa uso di un solo Sample, per cui può essere utilizzato senza problemi quando non si fa uso di effetti come Motion Blur o Depth of Field, ossia nei casi in cui non è necessario miscelare [BLEND] i valori della profondità. In quei casi, è più indicato l'utilizzo di Mist.

Infine, una considerazione sulle impostazioni di Color Management del rendering e su come le maschere Z-Depth e Mist vengono visualizzate nella Backdrop del Compositor.
A seconda della modalità scelta per il parametro View Transform, infatti, i risultati mostrati a video sia per Mist che per Depth, sia esso normalizzato o no, possono variare molto.

Queste trasformazioni dovrebbero riguardare, comunque, solo il modo in cui i dati vengono visualizzati nella Backdrop, per cui non dovrebbero alterare i loro valori intrinseci.
La mia opinione non richiesta è che questa differenza nella visualizzazione non dovrebbe verificarsi, perché secondo me i valori di quelle maschere dovrebbero essere visualizzati in maniera lineare nella Backdrop, visto che si tratta di informazioni numeriche e non di colori... ma gli sviluppatori di Blender sanno quello che fanno, per cui è più probabile che abbiano qualche ragione che non conosco e che quindi ci sia un motivo per questo comportamento.

Bene, per questo tutorial è tutto! Spero vi sia stato utile! A presto!