LorisWave sotto l'albero
Sfrutta al meglio i software per semplificarti la vita

Z-buffer

Pubblicato in Fusion
GooglePlus icon
LinkedIn icon
MySpace icon
Pinterest icon
whatsapp icon

In questo tutorial andremo ad an analizzare un semplice compositing di contributi 3D vedendo come sfruttare lo z-buffer, quali sono i suoi limiti e come tentare di aggirarli. Il setup della scena 3D è abbastanza semplice, due barche identiche come modello e un piano che funge da mare. Avendo a che fare con molte scene simili si è realizzato un setup abbastanza completo con onde del mare generate in automatico tramite un displace, lo stesso displace muove sulla verticale le barche e le inclina sul pith angle, il bank angle è generato in automatico in base alla direzione delle barche rispetto ad un ipotetica direzione del vento e la direzione delle barche (heading angle ) è automaticamente generato rispetto al percorso che le barche fanno.

In alcune situazioni ci siamo trovati ad avere il pozetto della barca più basso rispetto al livello del mare con un evidente problema di compenetrazione che abbiamo deciso di risolvere parzialmente alzando il livello del pozetto e parzialmente in post produzione. Questo è più o meno il risultato del render 3D dove si vede chiaramente il problema dovuto al pozetto.

La prima idea che ci è venuta in mente era renderizzare il mare con le barche, le brache da sole e poi andare a ritoccare i "buchi", un altra possibilità era renderizzare il mare da solo, le barche da sole e poi sfruttando lo z buffer far si che i render si compenetrassero in automatico. Avere lo z-buffer e il mare da solo permette anche di avere meno problemi a creare un effetto di profondità di campo.

Ma cosa è lo Z-buffer? Lo Z-buffer non è altro che un canale di informazioni, esattamente come l'alpha per le trasparenze e il rosso ( per esempio) per la quantità di rosso in un immagine, che per ogni pixel indica con una scala di grigi la distanza dalla camera di quel punto. Essendo un canale può per ogni pixel avere una solo valore di riferimento, esttamente come per ogni pixxel abbiamo un solo valore di rosso.

Abbiamo così renderizzato le barche in rla ( color, alpha e z-buffer ), mare in rla e abbiamo provato ad unirli con un semplice merge che di defoult tiene conto dello z-buffer. Questo è il risultato:

Oltre al buco nella barca che si riscontrano due altri problemi legati propio all'utilizzo dello z-buffer.

Il Primo problema è il fatto che lo z-buffer non supporta le trasparenze, e si vede chiaramente che dietro la vela c'è un ogetto che dovrebbe essere sotto acqua. Questo è dovuto al fatto che nello z-bufffer viene scritto per ogni pixel la sua posizione sull'asse z, nel caso di ogetti trasparenti viene indicata la posizione sull'asse z del primo pixel che incontra, e perciò non viene preso in considerazione l'ogetto che stà dietro.

Il Secondo problema è dato dalla mancanza di antialiasing dove le superfici si incontrano, vedi il buco nel pozetto o la poppa della barca blu. Questo è dovuto al semplice fatto che nel calcolo delle compenetrazioni una cosa o è d'avanti o è dietro.

Per risolvere il problema delle trasparenze Abbiamo renderizzato separatamente Le due barche, compositato la barca blu su il mare e poi la gialla su quello che risultava.

Il problema trasparenze è risolto. Prima di affrontare il discorso Antialiasing e Buco del pozetto andiamo ad aggiungere un filtro per calcolare la profondità di campo sul risultato del precedente compositing, come vedete vi è un problema dove un ogetto in primo piano ed un lontano si incontrano, il motivo è dato da due fattori, da una parte la quantità di sfuocatura e data dallo z-buffer, perciò senza un minimo di passaggio graduale e in secondo luogo per realizzare la sfuocatura il software va a interpolare il fondo con le cose in primo piano, il che non va bene.

La soluzione a questo problema è presto data dall'aplicare gli effetti di profondità di campo in maniera inteligente, andando ad isolare tramite render separati e applicando ai singoli livelli, nel nostro caso volendo le barche sempre più o meno a fuoco abbiamo applicato la profondità di campo solo all'livello del mare.

Messa a posto la Profondità di campo andiamo a vedere il discorso intersezioni senza antia aliasing.

Visto che i render dei vari elementi li dobbiamo fare separati bisogna trovare un buon sistema per far combaciare i livelli. Lo z-buffer ci può dare una mano quando i vari livelli non interagiscono tra di loro. Osservando l'immagine notiamo che il difetto non è presente su tutta l'immagnie, ma solo dove vi è un intersezione. Per risolvere i problemi di intersezione possiamo percorrere due strade: tentare di ricavare tramite lo z-buffer un canale di trasparenza più morbido o ritornare nel software di 3D e calcolarlo da qui.

Il secondo metodo da risultati migliori, richiede però uno o più render 3D con tempi perciò più lunghi. Quello che bisogna fare é creare una copia della scena 3D, rendere il mare nero e fare in modo che il suo alpha sia nero, in Lightwave bisogna andare sulle propietà dell'ogetto e nel tab render attivare "matte object" e come alpha channel scegliere "Costant Black", eliminare gli altri ogetti dalla scena, rendere il bakground nero e fare il render. Questo render con il suo alpha và composto sopra il mare senza tenere conto dello z-buffer.

Il primo metodo invece è un po meno preciso, non sempre da risultati ottimi, ma essendo calcolato in 2d può essere molto veloce. Si tratta di creare un bakground bianco ed uno nero, al livello bianco gli si asegna tramite una boleana lo z-buffer della barca, al livello nero sempre tramite boleana lo z-buffer del mare, si compositano i due e si ottiene la barca senza la parte che verrà nascosta.

Con un altro merge si compone la barca direttamente su un nero infinitamente lontano e otteniamo l'intera siluette della barca.

Sottraiamo un immagine all'altra e otteniamo quello che va nascosto.

Sfuochiamo e tramite color correction rendiamo questa alpha più o meno grande.

Andiamo a sotrarre alla barca originale sia sul canale dell'alpha che su quello del colore il contributo appena creato.

A questo punto lo compositiamo sul mare. Facciamo poi la stessa cosa se serve per la barca gialla.

Il problema del pozetto e tanto facile quanto noioso da risolvere, avendo i render delle barche separati possiamo, tramite maschere o tramite paint, aggiungere sopra al nostro compositing parte della barca originale senza tenere conto ovviamente di z-buffer o alpha ricreati. Si può fare paint frame to frame oppure creare una shape da muovere a mano o tentare di fare un trak della scena, questo dipende dal tipo di scena, dal quanti fotogrammi bisogna modificare, da quanto è complessa la forma da seguire, se il contorno e sempre presente o se bisogna lavorare in maniera precisa sui bordi.

Nel mio caso ho adottato il paint frame to frame, anche per vedere come si comportava in fusion la nuova modalità multistroke. Ma questa è un altra storia.

Ti piace questo post? Pagalo!

Un condivisione è la moneta migliore con cui ripagare chi scrive. Se ti è piaciuto quello che hai letto o se lo hai trovato utile condividilo con i tuoi amici.

GooglePlus icon
LinkedIn icon
MySpace icon
Pinterest icon
whatsapp icon

L'articolo precedente: "Additive Mode"
L'articolo successivo: "Fusion Tips 1"

Aggiungi un commento