Visualtricks | Renderizzare Rifrazioni + Ombre Area da 2 a 50 volte più velocemente!

From the Blog

feb
27

Renderizzare Rifrazioni + Ombre Area da 2 a 50 volte più velocemente!

Posted by Visualtricks on febbraio 27th, 2012 at 4:01 pm

Salve a tutti. Chiuque si sia ritrovato a dover rappresentare bottiglie e bicchieri con liquidi all’interno e più in generale oggetti con rifrazioni complesse in presenza di ombre area e Illuminazione Globale, si sarà accorto dei tempi di render biblici che questo tipo di combinazione comporta. Le responsabili principali dell’aumento dei tempi sono proprio le luci area, o meglio le ombre area che proiettano, che possono far lievitare i tempi anche di 30 volte. Normalmente quindi, dove la scena lo consente, invece delle ombre area si usano ombre morbide con buona risoluzione, ma il risultato chiaramente non è sempre il massimo.

Come fare allora ad avere ombre area e rifrazioni senza dover prendere ferie tra un render e l’altro ? Ebbene un modo c’è, ed anche se non consente un controllo fine sulle ombre, può ridurre i tempi di render da 2 a 50 volte e quindi vale quantomeno la pena provare. Il trucco alla base di questo metodo è utilizzare dei piani con materiale luminoso al posto delle luci area, vediamo come.

Il Set e gli oggetti

Per prima cosa ci servono un set e degli oggetti con cui fare un po’ di prove. Non mi dilungo molto sulla loro costruzione perchè non è l’argomento di questo post, ma vediamo come realizzare alcune parti. Per fare il limbo potete utilizzare un piano ed un deformatore Piega o qualsiasi atro metodo vi sia più congeniale.

Poi ci serve un oggetto con cui testare le rifrazioni: in questo caso costruiamo un barattolo di vetro con del liquido al suo interno. Ci possono essere diverse strade per modellare oggetti del genere ma tenete presente che quando si tratta di rifrazioni la geometria è fondamentale..piccole imperfezioni o basso numero di poligoni possono incidere pesantemente sulla resa del materiale. Penso che il metodo migliore in questo caso sia disegnare una spline del profilo del barattolo e ruotarla con una SweepNURBS. Una volta disegnata la spline potete usare (in modalità Punti) il comando Crea Contorno per dargli “spessore” o disegnare a mano anche quello, l’importante è che sia una spline aperta e che i punti all’apertura siano perfettamente allineati: in questo modo quando inseriamo tutto nella Sweep otteniamo una geometria chiusa.

Per fare il liquido utilizziamo la stessa tecnica e duplichiamo la spline appena creata per avere un buon punto di partenza. Creiamo la seconda forma cancellando i punti esterni ed aggiungendo quelli necessari a chiudere la geometria del liquido. A discrezione potete modellare il bordo a contatto con il barattolo in modo da simulare una leggera capillarità. Una volta modellato il liquido assicuriamoci che sia di pochissimo più grande della parte interna al barattolo, in modo che i due solidi si compenetrino leggermente.

-

Illuminazione

Come vi ho detto, con questo metodo non useremo luci vere e proprie ma dei piani luminosi. Possiamo quindi aggiungere alla scena un semplice piano lasciando tutti i parametri di default eccetto l’orientamento, che impostiamo su +Z in modo da avere l’asse Z perpendicolare al piano. Facciamo questo cambiamento perchè permette di usare successivamente un tag Target per orientare il piano verso un punto di riferimento.  Selezioniamo quindi il piano nel manager oggetti e dal menù Tags -> Cinema4D Tags assegnamo un tag Target. Negli attributi del target impostiamo l’oggetto bersaglio che in questo caso può essere il barattolo appena creato. A questo punto possiamo creare altre due copie del piano e posizionarle/dimensionarle proprio come se fossero luci area. Per questo test ne metteremo una molto grande in alto sopra gli oggetti, una sulla destra e una sulla sinistra.Aggiungiamo anche una camera per riprendere il nostro soggetto.

-

Veniamo alla parte interessante, accendiamo la luce ! Per iniziare abbiamo bisogno di tre materiali luminosi da assegnare ai piani quindi aggiungiamo un materiale ed attiviamone il canale Luminance. Nel campo Texture carichiamo uno shader Layer e entriamo nei suoi parametri. Dato che gli shader di cinema permettono risultati a 32bit (in HDR insomma) voglio usare una tecnica simile a quella che si usa in AfterEffects per trasformare un immagine 8bit in immagine HDR, e cioè duplicare l’immagine e sovrapporla in modalità Aggiungi (se vi interessa un tutorial su questa tecnica vi consiglio questo http://www.videocopilot.net/tutorials/earthquake_with_32bpc/ ). In questo caso non usiamo un immagine ma uno degli shader di cinema, in particolare il Gradient. Richiamiamo quindi lo shader Gradient e impostiamo la sfumatura su colori caldi, cambiando il tipo da verticale a 2D-Box; una volta contenti della sfumatura duplichiamo lo shader e cambiamo il metodo di fusione su Add. Come ultima cosa impostiamo nei parametri principali del canale Luminance, il metodo di fusione della texture su Moltiplica, così potremo controllare la luminosità semplicemente aumentando il Brightness e infine nel tab Illumination del materiale, attiviamo la voce GI Area Light.

-

Per le altre due luci potete sbizzarrirvi nel combinare tra loro i vari shader che cinema mette a disposizione, in questa scena ho creato altri due materiali luminosi, uno con toni più caldi e uno con toni freddi, sempre utilizzando vari tipi di Gradiente stratificati.

-

Una volta contenti degli shader possiamo applicarli ai piani mantenendo la luce calda a sinistra e quella fredda a destra del nostro oggetto.

Materiali

Dato che vogliamo testare le rifrazioni, abbiamo bisogno di materiali adatti…partiamo dal vetro del barattolo. Per il vetro utilizziamo queste impostazioni:

  • Speculare molto stretto e puntiforme (leggere Pro e Contro più in basso)
  • Riflessione attivata con uno shader Fresnel caricato nella texture, il Fresnel impostato su Physical con il preset per il vetro
  • Trasparenza attivata con lo stesso indice di rifrazione del Fresnel (1.517), colore di assorbimento sul verde chiaro e distanza 150cm

Per fare il liquido (per adesso dell’acqua) duplichiamo il vetro e impostiamo il fresnel sul preset dell’acqua (IOR 1.333). Copiamo il Fresnel ed incolliamolo nel campo Texture della Trasparenza, abilitando al suo interno la voce Invert. Cambiamo di conseguenza anche l’indice di rifrazione della trasparenza ed il colore di assorbimento, stavolta sull’azzurro.

Rendering

Bene, possiamo iniziare a fare qualche prova. Dopo aver assegnato i materiali agli oggetti, attiviamo nelle impostazioni di render l’Illuminazione globale. Utilizziamo il metodo di default e cioè l’Irradiance Cache, cambiando i parametri come segue:

  • Diffuse depth : 2
  • Stochastic Samples e Record Density: Low
  • Smoothing e Oversampling:  Minimal

Manteniamo i parametri di proposito bassissimi per velocizzare le prove dato che quello che ci interessa è il render delle rifrazioni e non tanto la qualità dell’illuminazione globale (per il momento). Possiamo lanciare un render di prova !

Questo chiaramente è quello che succede sul mio computer, i risultati possono variare in funzione di processori e ram. Come si vede sia la fase di prepass che la fase di render sono super veloci e tutto il render impiega circa 33 secondi, non male ! (dimenticavo, l’antialiasing è impostato su Migliore). Giusto per documentazione, vediamo però cosa succede usando invece 3 luci area posizionate e dimensionate esattamente come i piani, con più o meno le stesse caratteristiche di colore dei materiali luminosi, stessi parametri di render per quanto riguarda la GI.

Come vedete già la fase di prepass della GI è più lenta, ma sicuramente quello che colpisce è la lentezza del render vero e proprio..tanto che ho dovuto mettere in pausa il video per non annoiarvi a morte. Il render completo impiega poco meno di 26 MINUTI! Certo comparando i due risultati si può vedere come il render con luci area permetta di ottenere ombre molto definite, ma a un discreto prezzo in termini di tempo.

Con il sistema dei piani luminosi invece, risparmiando un sacco di tempo sul render vero e proprio, possiamo spenderne un po’ di più per il calcolo della GI aumentandone i valori. In questa prova ad esempio i valori della GI sono:

  • Diffuse depth : 2
  • Stochastic Samples e Record Density: Medium
  • Smoothing e Oversampling:  Medium

per un tempo totale di render all’incirca di 10 minuti, meno della metà del render con luci standard (e quasi tutto il tempo in più si ha nel prepass della GI). In questo caso si può vedere come sia le ombre che la GI risultino più definite e naturali. È possibile infine ridurre ulteriormente i tempi utilizzando il motore Fisico (stessi parametri GI come sopra) impostandolo su Adaptive: in questo caso il render scende a circa 3 minuti, ottenendo la stessa qualità del render qui a fianco.

 

Pro e Contro

Tra i pro c’è sicuramente il tempo risparmiato! In più si possono creare moltissimi tipi di texture e shaders da assegnare ai piani, per avere illuminazioni molto particolari. Ci sono alcune limitazioni da tenere presenti per quanto riguarda i materiali luminosi. Innanzi tutto non essendo vere e proprie luci, non generano speculare. Questo è un problema più o meno strascurabile quando gli oggetti da renderizzare sono di per sè riflettenti, ma nel caso di altro tipo di superfici (o cmq per generare anche gli specular nella scena) si può sempre creare qualche luce con solo Specular attivato (quindi niente ombre, diffuse, o GI illumination) e Show in Reflection disattivato (pannello Details della luce). I materiali luminosi inoltre non generano Caustiche, anche questo da tenere presente.

 

Download

Se volete fare delle prove potete scaricare la scena nella sezione Downloads. All’interno trovate la scena impostata con i piani già pronti (con un piccolo xpresso che vi permette di passare dall’illuminazione del piano a quella della luce con un clic) più qualche preset di materiale trasparente che ho preparato durante le prove. Chiaramente i tempi di render variano anche in base alle caratteristiche del materiale, un materiale trasparente con Dispersione impiega più tempo per essere disegnato sullo schermo. In casi del genere un’ottima soluzione può essere il nuovo motore di render Fisico impostato su modalità Progressiva (fermo restando l’uso della GI standard) perchè ci evita di dover trovare il giusto equilibrio di campioni per le dispersioni dei vari materiali…basta lasciare il render a cuocere finchè non siamo soddisfatti della pulizia. Le immagini che seguono sono realizzate con quest’ultimo sistema.

 

Bene, spero vi sia sembrato interessante e che vi divertirete con le rifrazioni !

Ciaps

Visual

 

 

 

Lascia un Commento


Preview

One Response to Renderizzare Rifrazioni + Ombre Area da 2 a 50 volte più velocemente!

  1.  

    |