English version

00finale 1h 10m

Questo tutorial nasce dall'esperienza accumulata da me e altri utenti di treddi.com durante gli ultimi mesi, ricchi di test fatti per raggiungere una buona qualità nel rendering di interni. Voglio quindi iniziare ringraziando tutti quelli che hanno contribuito ai test e condiviso le proprie esperienze e impostazioni. In particolare ringrazio Stefano (gtsix) per la traduzione in inglese e Alessando (Pantich), che è stato il primo a leggere la bozza di questo tutorial e mi ha dato spunti interessanti per approfondire alcuni argomenti.  ;)

Il tutorial può essere seguito tranquillamente da chiunque utilizzi mental ray (su maya/3d max/xsi/budini e quant'altri)

Quello che andrò ad illustrare è uno dei tanti possibili metodi per questo tipo di illuminazione e vuole essere un punto di partenza, una base su cui poter iniziare le proprie sperimentazioni su mental ray, che come molti sapranno è da sempre considerato ostico da usare in questo tipo di rendering.

Alcuni dei passaggi che andrò a elencare sembreranno ripetitivi o poco significativi, ho deciso di elencarli tutti in maniera più chiara possibile proprio per dare la possibilità a voi di trovare e ottimizzare il vostro metodo personale, imparerete pian piano a raggruppare o eliminare alcuni dei passaggi elencati, si tratta solo di guadagnare esperienza. ;)

L'argomento è molto ampio e comprende tanti piccoli aspetti che in alcuni casi possono fare la differenza per la resa di un rendering finale. Per questo ho deciso di descrivere il metodo in maniera molto generale e cercare di toccare un po' tutti gli argomenti correlati, per chi avesse bisogno di approfondimenti può scrivermi (ovviamente non è detto che io abbia la risposta, ma ci provo insomma :P )
Nel tutorial darò per scontata una conoscenza di base sia di maya che di mental ray

Queste sono le sezioni in cui ho deciso di suddividere il tutorial:


1. Illuminazione di base
1.1 Scelta e posizionamento delle luci
1.2 Setting delle luci
1.2.1 Luce solare
1.2.2 Luce "diffusa"
1.3 Come bilanciare le luci
1.4 Final Gather
1.4.1 Impostare il Final Gather
1.5 Impostare il rendering finale
2. Altri tipi di illuminazione


1. Illuminazione di base
Per la preparazione di questo tutorial ho svolto svariate prove con diversi tipi di luci e impostazioni che potrete trovare qui
Quelle che vi proporrò in seguito saranno le luci che ritengo più performanti a livello di rendering, quindi sia in termini di rapporto qualità/velocità, sia in termini di corrispondenza a un'illuminazione fotorealistica.
Le mie prove partono dall'uso di due tipi di luci, una deputata a simulare la luce solare (o diretta) e l'altra che permette di simulare un effetto di luce "diffusa"


1.1 Posizionamento delle luci
Innanzitutto scarichiamo la scena che potete trovare nei seguenti formati:
.obj
.mb
.3dsmb

Aperta la scena vi troverete di fronte a una stanza in stile giapponese (già famosa su questo forum)
Impostate le unità di misura della scena in centimetri.
Ricordate che importando da .3ds o .obj il modello in Maya avrete le impostazioni "Visible in reflection" e "Visible in refraction" disabilitate, per cui dovrete andarle ad abilitare manualmente sui "Render Stats"

Andiamo a posizionare due luci

a. Luce solare
la prima luce avrà il compito di simulare la luce diretta.
tra le varie possibilità prese in considerazione, ho deciso di utilizzare una spot, più avanti vedremo le alternative posizioniamo uno spot abbastanza distante dalla stanza, in modo da riuscire a mantenere un angolo di apertura abbastanza basso (20° circa) vi ricordo che la spot non ha raggi paralleli, per cui tenere un cono di apertura basso serve proprio a cercare di dare ai raggi incidenti un effetto più vicino possibile alla realtà

b. luce "diffusa"
create una luce point (omni per 3d studio) e attivate negli attributi della luce relativi a mental ray l'opzione "Area Light", spostate la luce fino a farla combaciare con la finestra e ingranditela in modo che i bordi si avvicinino all'apertura reale della stessa (tenerla un po' più piccola serve ad avere meno problemi di sovraesposizione sui muri vicini)

in figura potete vedere i miei posizionamenti:
posiz
posiz2


1.2 Setting delle luci
Per capire il comportamento delle luci consiglio di iniziare le prove con una luce alla volta.

Assegnate a tutto il modello uno shader bianco (consiglio un lambert o un dgs senza glossy e specular)


1.2.1 Luce solare
Ciccate sulla point e disabilitatela (eliminate le spunte su "Illuminates by Default", "Emit Diffuse", "Emit Specular")

Ciccate sulla spot e nelle proprietà attivate le ombre raytrace, impostazioni di default (potete dare un leggero angle ai raggi se preferite)

Andate nel "Renderglobal" > "Quality Presets" e impostate "Preview"
eseguendo il primo render di prova con valori di default, otterrete qualcosa di simile:
01spot diretta

Aumentate l'intensità della luce fino a raggiungere un buona illuminazione nelle zone esposte.

Ora attivate la GI nel "Renderglobal"   e impostate la la "Global Illum Accuracy" a 512, tenendo il "Global Illum Radius" a 0 (default)
Cambiate le impostazioni del "Raytracing" (4-4-8 dovrebbero andare bene)
Attivate anche l'impostazione "Emit Photons" nelle proprietà della luce e eseguite le prove per riuscire a illuminare le parti della stanza non esposte a luce diretta.
Ricordatevi che le proprietà della luce spot dipendono dalla distanza in cui si trova dall'oggetto, per cui, avendo posto la spot lontano dalla stanza avrete da aumentare di parecchio l'intensità dei fotoni (io ad esempio sono arrivato a 185.000.000) per arrivare a un risultato del genere:
02spot 10kphotons

Ora aumentate il numero dei fotoni a 500.000 e renderizzate.
Avrete un rendering del genere:
03spot 500kphotons

Vi consiglio di attivare la voce "Progressive Messages" ("Renderglobal" > "Translation" > "Progressive messages") , in modo da poter controllare i tempi di rendering delle varie prove.


1.2.2 Luce "diffusa"
Ora andiamo ad eseguire gli stessi passaggi per la point (che abbiamo precedentemente trasformato in mental ray area light)
- Disabilitiamo la spot (ricordate anche la spunta su "Emit Photons" )
- Attiviamo le ombre raytrace sulla point; consiglio di utilizzare per la luce un "Decay linear", - Stesse impostazioni della spot per i fotoni, tranne per l'intensity che sarà molto inferiore (io in questo caso sto utilizzando 100.000)
- Eseguite le stesse prove fatte per la spot

Solo luce diretta (non preoccupatevi della granulosità delle ombre, andremo a sistemarla in seguito, nelle impostazioni del render finale)
04point diretta

luce diretta + fotoni
05point 500kphotons


1.3 Come bilanciare le luci

Attiviamo entrambe le luci e andiamo a fare un render
se siete stati abbastanza accorti avrete un illuminazione abbastanza equilibrata, avrete probabilmente da diminuire una delle due luci (a seconda degli effetti che vorrete ottenere)

ecco la mia prova:
06spot point GIonly

non spaventatevi troppo per le zone sovraesposte, quando andremo ad attivare il final gather si vedranno molto meno (in ogni caso, se volete fare una piccola prova, fate un render region delle zone più significative, attivando semplicemente il final gather con le seguenti impostazioni:
rays 100 min max radium: 0/0 e disabilitando la spunta "rebuild photon map")
questo è il mio risultato:
07spot point GIonly fgtest
Se avete problemi di zone eccessivamente illuminate o artefatti il mio consiglio è diminuire leggermente l'intensità dei fotoni della spot e diminuire leggermente l'intensità della point (preferibile in presenza di bruciature nella parti più esposte all'area light)

Ora che la luce sembra equilibrata iniziamo a ottimizzare la GI
Questo è il pannello su maya:
08GI settings

brevemente le impostazioni principali sono:
- "Global Illum Accuracy",che abbiamo già impostato a 512 e, come dice anche il nome, rappresenta la qualità della photon map

- "Global Illum Radius", andremo ad impostarlo tra poco, il valore di default è 0, con questa impostazione mental ray calcola da solo l'impostazione migliore per il render (e questo nel 90% dei casi può già andare bene), per ottimizzare i tempi di rendering noi andremo a calcolare a mano il radius migliore

- "Max Photon Depth", "Max Reflection Photons" e "Max Refraction Photons", sono le impostazioni dei famosi bounces, il numero dei rimbalzi che faranno I fotoni prima di fermarsi. Il primo valore indica il totale, per cui reflection+refraction avranno al massimo 5 rimbalzi.

Ora si tratta di decidere il radius e il depth per la GI.
Per il depth io ho ottenuto dei buoni risultati tenendo quello di default (5-5-5). Ricordate che maggiore è il depth utilizzato e maggiore sarà la luce nelle zone meno esposte, di contro avrete anche tempi di rendering maggiori.
Per il radius, come detto, si tratta sostanzialmente di un'ottimizzazione per i tempi di rendering
Eseguite un rendering come in precedenza (solo GI) con radius 0
controllate i tempi:
09s p gi rad0

iniziate ad usare dei radius bassi (partite da 1) e aumentate fino ad avere un risultato paragonabile al primo render con radius 0, ma con tempi più bassi (vi ricordo che il radius è espresso in unità locali della scena)
eseguite le prove disabilitando la spunta "rebuild photon map", in modo da velocizzare al massimo i test (ricordate che valori minimi in questa fase possono risultare molto importanti nel rendering finale)
qui trovate gli effetti del radius sulla scena:
10s p gi rad1
11s p gi rad10
12s p gi rad15
13s p gi rad20
io ho scelto radius = 15


1.4 Final Gather

siamo arrivati al tanto discusso Final Gather
per queste prove, se non modificherete le opzioni delle luci o dei materiali nella scena, potrete tenere disabilitata la spunta "Rebuild Photon Map"

ecco il pannello di maya:
14FG settings
Per avere un'idea di come funzioni il final gather vi consiglio questo link:  
http://www.lamrug.or...n2003/img0.html

Provo a farvi un riassunto, ma prendete questa spiegazione con le molle perché è un argomento molto complesso e non ho le conoscenze necessarie per approfondire più di tanto l'argomento ;)
Per chi non fosse interessato a una descrizione teorica, può procedere con la parte pratica del tutorial, saltando alla sezione 1.4.1

In sostanza il final gather permette di calcolare e salvare in una mappa informazioni locali di irradianza. Il calcolo del final gather è suddiviso in due parti:

1- precomputation
durante questa prima fase l'immagine viene suddivisa tramite una griglia esagonale/triangolare, per ciascun punto della griglia viene tracciato un raggio dalla camera alla scena, nel momento in cui il raggio incontra una geometria della scena vengono fatti partire dei raggio in uno spazio emisferico, che permettono di calcolare le informazioni locali di irradianza.

2- extra computatio & interpolation
la seconda fase avviene durante il rendering (oppure, in parte, in precedenza, se viene spuntata l'opzione "Precompute Photon Lookup"). La mappa salvata precedentemente viene riutilizzata e avviene l'interpolazione dei risultati tramite la dimensione del min/max radius, ovvero per ciascun punto calcolato in precedenza i risultati di irradianza locale vengono interpolati all'interno del range tra il raggio minimo e massimo. Nel caso questa zona di influenza (definita dal max radius), venisse oltrepassata, il final gather provvedere a far partire altri raggi.

Per osservare gli effetti del final gather sulla scena potete attivare la modalità diagnostica andando su "Renderglobal" > "Diagnostics" > "Diagnose Finalgather"
il rendering vi restituirà in verde i punto calcolati durante la prima fase del final gather (precomputation) e in rosso quelli aggiunti nella fase di rendering
15fg diagnose

Dopo questa breve infarinatura passo a spiegarvi i parametri che vedete nel renderglobal.
"Min/Max Radius" come detto rappresentano i valori tramite cui il final gather interpola i risultati di irradianza locale, quindi sostanzialmente, valori molto bassi restituiranno maggiori dettagli, ma anche maggiori tempi di calcolo.
"Min/Max Radius" possono essere espressi in unità del modello (cm nel nostro caso) oppure in pixel (per chi usa mental ray 3.4 può attivare questa impostazione semplicemente spuntando "View (Radii in pixel size)", per chi utilizza versioni precedenti rimando a questo link sempre sul sito del LAmrUG.
Il vantaggio di lavorare in pixel è semplice, è molto più immediato trovare i valori di interpolazione desiderati ragionando in pixel (sull'immagine aster), piuttosto che sulle unità di misura impostate nel modello.
I "Final Gather Rays" non sono altro che i raggi che partono a emisfera da ciascun punto di final gather calcolato: maggiore è il numero di raggi, maggiore sarà l'accuratezza del calcolo locale dell'irradianza (non del calcolo complessivo, visto che in questo caso rientrano anche i min/max radius usati)
Il Radius non ha niente a che vedere con la lunghezza dei raggi del final gather, questa misura viene definita dal "Falloff start/stop" (su cui non mi dilungherò ulteriormente).
Un altro importante parametro è il filter, che permette di eliminare alcune macchie dovute a valori anomali di irradianza locale (bruciature in genere), valutando i valori di irradianza vicini tra loro. L'uso di questo filtro influisce sia sul tempo di render, sia sulla qualità del final gather
Altri parametri importantissimi sono i "Trace Depth", "Trace Reflection" e "Trace Refraction" che concettualmente funzionano come i depth (i rimbalzi) della Global Illumination.
L'ultima spunta "Secondary Diffuse Bounces" (presente solo su menral ray 3.4) attiva il famoso multibounces, che però non prenderemo neanche in considerazione in questo tutorial, visto che viene disabilitato nel caso di utilizzo della Global Illumination.

"Preompute Photon Lookup" permette di anticipare una parte dei calcoli che il final gather fa durante la fase di rendering, questa impostazione è molto utile in caso di animazione, proprio perché si riducono i tempi della fase rendering.


1.4.1 Impostare il Final Gather

Ecco i miei parametri per i test

usate come "Rays": 50 (per mental ray 3.3 usate almeno 100-200)
portate il "Filter" da 0 a 1
lasciate il "Radius" a 0 e lanciate il render a risoluzione bassa (400x300)

questo è il mio risultato:
16s p fg rad0

ora si tratta di ottimizzare il radius, chi è già soddisfatto dei test col radius di default può partire da
quelli andando a cercare nell'Output Windows quali valori mental ray ha assegnato e cercando di migliorarli come detto, radius basso= maggiori dettagli e maggiore noise in genere per le mie prove parto sempre da valori di radius basso usando pochi rays per non pesare troppo sui tempi dei test, con dei render region delle zone che più mi interessano cerco di capire qual è il migliore  compromesso tra dettaglio e tempi di render

ecco una prova con vari radius:
17s p fg rad0.1 1
18s p fg rad1 10
19s p fg rad5 50

A questo punto aumentate il radius in modo da riuscire a "spalmare" al meglio l'effetto puntinato che avrete con radius basso (ovviamente questa impostazione dipende dalla scala che state utilizzando, in genere 1-10 da dei buoni risultati nel rapporto tempo/qualità)
trovato il radius fate dei render region nella zona in cui notate artefatti aumentando progressivamente i rays (il risultato è strettamente legato alla versione di mental ray che state usando, la versione 3.4 è ottimizzata anche per valori di rays molto bassi, riuscendo a restituire immagini senza artefatti, la versione 3.3 (o inferiori) ha bisogno di valori più alti) fino ad arrivare a un buon compromesso
20s p fg rad2 15 rays200


1.5 Rendering Finale

per il rendering finale ci sono alcuni valori importanti da impostare, vi do una panoramica di quelli che utilizzo più frequentemente, senza entrare troppo nei particolari.


1.5.1 I materiali
Per riuscire ad ottenere dei render fotorealistici i materiali utilizzati sono fondamentali.
Vi consiglio di iniziare ad approfondire lo studio sui materiali di mental ray, in particolare sul dgs, il dielectric e alcune varianti interessanti (dgs_fresnel, l_glass), il tutorial di Alessandro (Pantich) sull'argomento è un ottimo inizio.

I vantaggi di questi materiali sono fondamentalmente di due tipi: minori tempi di rendering, migliore comportamento alla luce.
Nel caso in cui abbiate intrapreso il tutorial usando un Lambert potete accorgervi delle differenze semplicemente assegnando a tutta la scena un DGS senza glossy ne riflessioni e facendo qualche test (ricordate che il per utilizzare il dgs, come gli altri materiali di mental ray, con i fotoni dovete impostare nello "photon shader" anche il dgs_photon o il mib_photon_basic, altrimenti la scena non riuscirà a ricevere fotoni)
Per impostare una scena vi consiglio inoltre di iniziare con un materiale di un tipo e continuare con quello (se avete impostato la scena con un lambert cercate di utilizzare materiali maya anche quando andrete ad assegnare i veri materiali agli oggetti della scena, in questo modo vi evitate spiacevoli sorprese per il diverso comportamento alla luce).


1.5.2 Anti-Aliasing quality


Per il rendering finale è importantissimo ottimizzare l'AA in modo da non avere fastidiosi effetti di aliasing
Il mio consiglio è l'ulitizzo del filtro Mitchell, che in mental ray offre il miglior rapporto qualità/velocità

Importantissime sono le impostazioni di "Numbers of Samples" e "Contrast Threshold"

Il "Min Sample Level" indica il numero minimo di raggi che mental ray utilizza.
Il "Max Sample Level" (come dice anche il nome), il valore massimo.

n.b.
I valori di sampling in mental ray per Maya NON crescono linearmente, ma esponenzialmente
quindi se utilizzate 0 samples avrete 1 raggio, 1 samples: 4 raggi, 2 samples: 16 raggi e così via. Questo significa che valori eccessivamente alti portano via tantissimo tempo nel rendering
(in 3dmax i parametri sono diversi e corrispondono al numero di raggi, quindi quello che per Maya è il valore 0 in 3d Max sarà 1, ecc)

Come viene definito l'uso di min o max samples?
Attraverso il "Contrast Threshold". Questo è un parametro che viene spesso trascurato, ma è fondamentale per riuscire ad arrivare alla migliore resa possibile.
Se in un'area del render si supera il valore di contrasto indicato, mental ray userà il max samples, se il contrasto rimane sotto la soglia userà il min samples (questo è utile in zone con colori uniformi, in cui non ha senso utilizzare valori alti di samples)
Per un'analisi approfondita di Contrast Threshold e AA vi rimando al sito del LAmrUG

Queste le impostazioni che suggerisco:
Mitchell 4 | 4

Min samples 0 (o -1) (per 3d max 1 o 1/4)
Max samples 2 (per 3d max 16)

R 0,05
G 0,05
B 0,05


1.5.3 Area Light Sampling

Questo parametro regola il noise generato dalle ombre di raytrace delle Area Light di mental ray
Nel nostro caso dovremo selezionare la Point e andare nel pannello di "Mental ray" > "Area Light".
Per riuscire a "ripulire" perfettamente la scena è importante capire il funzionamento dei seguenti parametri:
"Sampling": numero di samples usato per le ombre.
"Low Level": indica il numero di bounces (reflection/refraction depth) oltre il quale mental ray inizia a smette di utilizzare il parametro di "Sampling" e inizia a utilizzare i "Low Samples".
Se viene utilizzato il valore 0 (default), mental ray non userà mai i low samples
"Low Samples": valore di sampling che può essere impostato per I secondary bounces delle ombre.

Per avere dei risultati buoni suggerisco i seguenti parametri:

Samples 6-6 (max 8-8)
Low Level 0 (o 2)
Low Samples 3-3 (o 4-4)

Esempio Area Light Samples default (3-3)
21arealight 3 3 2 2
Samples 6-6
22arealight 6 6 4 4

23final bn


1.5.4 Colore della luce

Per riuscire a trovare la migliore resa fotorealistica in questo tipo di rendering è fondamentale l'uso dei colori della luce.
Su mental ray 3.4 avete una utility nuova, che io rittengo fondamentale, in cui potete utilizzare il colore della luce in gradi Kelvin
Lo schema da seguire è il seguente:
24colortemp

il trucco è impostare un valore molto vicino alla luce solare diretta per la spot e un valore più vicino a una skylight per l'area light

Mib_cie_d
25mib cie d

Nel caso stiate usando una versione di mental ray precedente alla 3.4 utilizzate un colore tipo giallo/arancio  
per entrambe le luci e un azzurro leggero per il colore dei fotoni
26color


1.5.5 Bsp
Il Binary Spatial Partitioning è un parametro fondamentale per ottimizzare i tempi di rendering in mental ray.
Anche in questo caso occorrerebbe un tutorial a parte solo su questo parametro per riuscire ad essere esaustivo dell'argomento. Vi consiglio vivamente di consultare ancora una volta il sito del  
LAmrUG per trovare maggiori delucidazioni su cosa sia e come agisca il BSP.
Il mio consiglio è: fate delle prove di rendering in piccolo, oppure dei render region di zone significative, e confrontate i tempi di rendering, provate con Depth a partire da 40 e scendete di 3 in 3 (37-34-31)
In genere utilizzo valori di Depth attorno al 30, ma questo ovviamente dipende dal tipo di scena.


1.5.6 Output framebuffer
Mental ray non ha un vero e proprio controllo sul tonemapping, ma esistono varie tecniche per riuscire a gestire  
questo aspetto fondamentale del render.
Una possibilità è utilizzare il parametro "gamma" ( "Render Global" > ""Framebuffer" > "gamma") che ci permette di migliorare la luminosità, specialmente delle parti in ombra (valori inferiori a 1 di default corrispondono a maggiore luminosità)
Il mio consiglio però ricade su un'altra scelta, ovvero esportare in un formato 32bit e effettuare il tonemapping in post.
Mental ray, dalla versione 3.3, supporta il formato OpenExr, di cui potrete trovare notizie e plugin per alcuni programmi sul sito ufficiale OpenExr
Questo formato offre maggiori vantaggi rispetto al formato .hdr (in quanto ha una maggiore gamma dinamica) e al .tif (in quanto permette di immagazzinare i dati in metà spazio rispetto a un RGBA 16bit)

Per chi usa la versione 3.4 di mental ray è molto semplice usare l'exr, nel "Framebuffer" impostate RGBA (float) 4x32bit e tra gli "image format" scegliete OpenExr.
Per chi usa la versione 3.3 le cose si compliano, in questo caso vi consiglio di scaricare da questo sito il mrclasses di Gonzalo Garramunos e usare negli output shader della vostra camera l'output_exr, questo vi permetterà di salvere in .exr ;)

Per riassumere questi sono i valori da me utilizzati per il rendering finale visibile a inizio pagina.

- RENDER GLOBAL
AA Quality

Samples -1  |  2
Mitchel: 4  |  4
Contrast R: 0,05
Contrast G: 0,05
Contrast B: 0,05
Contrast A: 0,1

Raytracing
Reflection: 4
Refraction: 4
Max Trace Depth: 8

GI
Accuracy: 512
Radius: 15
Max Photon Depth: 5
Max Reflection Photon: 5
Max Refraction Photon: 5

Final Gather
Rays: 400
Min / Max Radius: 2 | 15
Filter: 1
Trace Depth: 2
Trace Reflection: 1
Trace Refraction: 1

- Altri parametri:
Area Light
Sampling: 6 | 6
Low Level: 0


2.0 Altri tipi di illuminazione

Come ho già accennato prima di scrivere il tutorial ho effettuato diverse prove per scegliere le luci che meglio si adattassero a questo tipo di illuminazione.
Questo è un elenco di luci usate con i relativi risultati, se state cercando un tipo particolare di illuminazione potete scegliere tra varie combinazioni possibili

(Luce solare + luce diffusa)

Direct + physical
27direct physical

Direct+ point(arealight)
28direct point

Direct+ spot(arealight)
29direct spot

Spot + physical
30spot physical

Spot + spot(arealight)
31spot spot

spero vi sia di aiuto, fatemi sapere cosa ne pensate :)
mi scuso con tutti per eventuali (e molti probabili) errori di battitura e inesattezze, ma il tutorial è diventato talmente lungo, che mi è un po' passata la voglia di ricontrollarlo per l'ennesima volta. :P

ciau

Mat
http://www.imodesti.com


- Riferimenti:
http://www.lamrug.org
http://www.jupiter-jazz.com/
http://www.impresszi...RaySampling.htm

---
Questo articolo è stato importato automaticamente dal forum il 31/lug/2014
Per vedere il post originale e/o i commenti sul forum prima di quella data clicca qui