From BlenderWiki

Jump to: navigation, search
Blender3D FreeTip.gif
IMPORTANT! Do not update this page!
We have moved the Blender User Manual to a new location. Please do not update this page, as it will be locked soon.

Radiosity Rendering

Il metodo per la Radiosità di Blender

Prima di tutto un po' di teoria! Se si vuole si può saltare alla sezione successiva, e tornare indietro se ci saranno domande. Alla fine degli anni ottanta ed all'inizio dei novanta la Radiosità ha costituito un argomento caldo della computer grafica 3D. Sono stati sviluppati molti metodi diversi. La soluzione che ha avuto più successo è basata sul metodo del "raffinamento progressivo" con uno schema di "suddivisione adattativa". E questo è quello che usa Blender. Per essere in grado di sfruttare al massimo il metodo della Radiosità di Blender, è importante capire i seguenti principi:

  • Metodo degli elementi finiti
Molti metodi per la grafica computerizzata o la simulazione, assumono una esemplificazione della realtà con 'elementi finiti'. Per una soluzione visiva attraente (ed anche provata scientificamente), non è sempre necessario immergersi a livello molecolare dei dettagli. Invece, il problema si può ridurre ad un numero finito di elementi rappresentativi e ben descritti. È risaputo che tali sistemi convergono rapidamente in una soluzione stabile ed affidabile.

Il metodo della Radiosità è un esempio tipico di metodo ad elementi finiti in quanto ogni faccia viene considerata un 'elemento finito' e le sue emissioni di luce vengono considerate nel loro insieme.

  • Patches (Toppe) ed Elementi
Nell'universo della Radiosità, si fa distinzione tra due tipi di facce 3D:
Patches(toppe o chiazze).
Sono triangoli o quadrangoli capaci di spedire energia. Per una rapida soluzione è importante avere il minor numero possibile di tali patch. Ma, per velocizzare le cose l'energia viene modellata come se fosse distribuita dal centro della Patch, la dimensione delle patch dovrebbe quindi essere sufficientemente piccola da rendere realistica la distribuzione dell'energia. (Per esempio quando un piccolo oggetto viene posto sopra il centro della Patch, tutta l'energia spedita dalla Patch viene oscurata da tale oggetto, anche se la patch è più grande! Tale patch dovrebbe essere suddivisa in patch più piccole).
Elementi.
Sono triangoli o quadrangoli che ricevono energia. Ciascun Elemento è associato ad una Patch. Infatti, le Patch sono suddivise in tanti piccoli Elementi. Quando un elemento riceve energia, ne assorbe parte di essa (a seconda del suo colore) e passa la parte restante alla Patch, per ulteriori irradiazioni. Dato che gli Elementi hanno anche facce che vengono mostrate, è importante tenerle il più piccole possibile, per evidenziare i bordi di piccole ombre e sfumature (gradienti) di luce.
  • Raffinamento Progressivo
Questo metodo parte con l'esame di tutte le Patch disponibili. Si seleziona la Patch 'inesplosa' con l'energia maggiore per sparare tutta la sua energia all'ambiente. Gli Elementi nell'ambiente ricevono tale energia, e la sommano all'energia 'inesplosa' delle Patch a loro associate. Quindi il processo riparte per la Patch che ora ha la maggior energia 'inesplosa'. Questo continua per tutte le Patch finché non sia più ricevuta alcuna energia, o finchè l'energia 'inesplosa' è diventata inferiore ad un certo valore.
  • Il metodo dell'emicubo
Il calcolo di quanta energia ciascuna Patch dia ad un Elemento è fatto con l'uso degli 'emicubi'. Posizionato esattamente nel centro della Patch, un emicubo (letteralmente 'metà di un cubo') consiste di 5 piccole immagini dell'ambiente. Per ciascun pixel in queste immagini, viene codificato e colorato un certo Elemento visibile, e quindi si può calcolare la quantità di energia trasmessa. Specialmente con l'uso di hardware specializzato il metodo dell'emicubo può essere significativamente accelerato. In Blender, però, il calcolo dell'emicubo è fatto "via software". Infatti questo metodo è una esemplificazione ed una ottimizzazione della formula della Radiosità 'reale' (differenziazione del fattore di forma). Per tale ragione la risoluzione dell'emicubo (il numero di pixels delle sue immagini) è approssimata e la sua accurata regolazione è importante per evitare scalettature [aliasing] artificiose.
  • Suddivisione adattativa
Dato che la dimensione delle patch e degli elementi in una Mesh definiscono la qualità della soluzione della Radiosità, sono stati sviluppati degli schemi di suddivisione automatica per definire la dimensione ottimale delle Patch e degli Elementi. Blender ha due metodi di suddivisione automatica:
1. Subdivide-shoot Patches.
Sparando energia all'ambiente, e confrontando i valori dell'emicubo con l'attuale valore matematico del 'fattore di forma', la rilevazione degli errori indica la necessità di una ulteriore suddivisione della Patch. I risultati sono Patch più piccole ed un tempo di soluzione più lungo, ma una soluzione a più alto realismo.
2. Subdivide-shoot Elements.
Sparando energia all'ambiente, e rilevando i cambiamenti più evidenti di energia (gradienti) all'interno di una Patch, gli Elementi di tale Patch vengono suddivisi di un ulteriore livello. Ne risultano Elementi più piccoli e tempo di soluzione più lungo e probabilmente una maggiore scalettatura [aliasing], ma un alto livello di dettaglio.
  • Rappresentazione e Post Processing
La suddivisione degli Elementi in Blender è 'bilanciata', questo vuol dire che ciascun Elemento differisce al massimo di '1' livello di suddivisione con i suoi limitrofi. Questo è importante per una piacevole e corretta rappresentazione della soluzione della Radiosità con le facce ombreggiate con Gouraud. Solitamente dopo la soluzione, si hanno migliaia di piccoli Elementi. Filtrandoli e rimuovendo i 'doppioni', il numero di Elementi si riduce significativamente senza distruggere la qualità della soluzione della Radiosità. Blender immagazzina i valori dell'energia in valori a 'virgola mobile'. Questo rende possibile l'impostazione di spettacolari situazioni di illuminazione, cambiando i valori di moltiplicazione e di gamma standard.
  • La Radiosità per la Modellazione
Il passo finale può essere la sostituzione delle Mesh di ingresso con quella della soluzione della Radiosità (pulsante Replace Meshes). A questo punto i colori al vertice vengono convertiti da un valore a 'virgola mobile' ad un valore RGB a 24 bits. I vecchi Oggetti Mesh vengono cancellati e sostituiti con uno o più nuovi Oggetti Mesh. Si possono quindi cancellare i dati della Radiosità con Free Data. I nuovi Oggetti assumono un Materiale di default che consente un loro rendering immediato. Per lavorare coi colori al vertice, sono importanti due impostazioni in un Materiale:
VColPaint.
Questa opzione tratta i colori al vertice come una sostituzione del normale valore RGB nel Materiale. Bisogna aggiungere delle Lampade per vedere i colori della Radiosità. Infatti, si può usare l'illuminazione e l'ombreggiatura di Blender come al solito, e lasciando che si 'veda' una Radiosità pulita nel rendering.
VColLight.
I colori al vertice [vertexcolors] vengono aggiunti alla luce durante il rendering. Anche senza Lampade, si potrà vedere il risultato. Con questa opzione, i colori al vertice vengono pre-moltiplicati dal colore RGB del Materiale. Questo consente una regolazione fine della quantità di 'luminosità della Radiosità nel rendering finale.

Come ogni cosa in Blender, le impostazioni della Radiosità vengono memorizzate in un blocco di dati [datablock]. Esso è legato ad una Scena, e ciascuna Scena in Blender può avere un diverso 'blocco' di Radiosità. Tale funzionalità si usa per dividere ambienti complessi in Scene con solutori di Radiosità indipendenti.

Il Rendering con la Radiosità

Si supponga di avere una scena pronta, e di volerne effettuare il Rendering della Radiosità. La prima cosa da comprendere quando ci si occupa della Radiosità è che non è necessaria alcuna lampada, ma sono richieste solo le mesh con un materiale con la proprietà Emit maggiore di zero, dato che saranno le sorgenti di luce. Si può costruire la scena di prova mostrata in BSG.RAD.F.S68.101, essa è abbastanza semplice. Basta fare un grande cubo per la stanza, dare dei materiali diversi alle pareti, aggiungere un cubo con un parallelepipedo al suo interno, ed aggiungere un piano con un valore di Emit diverso da zero vicino al tetto, per simulare l'area luminosa (Allestimento per il test della Radiosità.). Si assegnano i Materiali come al solito all'immissione dei modelli. Il valore RGB del Materiale definisce il colore della Patch. Il valore 'Emit' di un Materiale indica se una Patch debba essere caricata di energia all'avvio della simulazione della Radiosità. Il valore 'Emit' viene moltiplicato con l'area di una Patch per calcolarne l'ammontare iniziale di energia non emessa.

Facce emittenti
Si Controlli il numero di patch 'emittenti' sulla console di Blender! Se è zero non succederà nulla di interessante. Serve almeno una patch emittente per avere luce e generare una soluzione.


Allestimento per il test della Radiosità.

Quando si assegnano i materiali ci si assicuri che tutti abbiano attivato il selettore Radio per abilitare il Pannello Shader dei pulsanti del sub-contesto Material (Il materiale abilitato per la Radiosità.).

Il materiale abilitato per la Radiosità.

Si noti che l'emissione di luce è gestita dalla direzione delle normali di una mesh, quindi il piano che emette luce dovrebbe avere la normale che punta in giù ed il cubo esterno (la stanza) dovrebbe avere le normali che puntano all'interno, (sono da ribaltare!). Ci si sposta nel sub-contesto della Radiosità Manual-Part-XII-RadButton.png nel contesto Shading. I Pannelli, mostrati in I pulsanti della Radiosità per il rendering della radiosità., sono due: Radio Rendering che gestisce la Radiositè quando viene usata come uno strumento per il rendering (caso attuale) e Radio Tool, che gestisce la Radiositè come strumento di modellazione (sezione seguente).

Radiosity buttons for radiosity rendering.

I pulsanti definiscono:

  • Hemires: - La risoluzione dell'emicubo; le immagini codificate in colore usate per cercare gli elementi che siano visibili da un 'colpo di Patch', e che quindi ricevano energia. Gli emicubi non vengono immagazzinati, ma ricalcolati ogni volta per ogni Patch che spara energia. Il valore 'Hemires' determina la qualità della Radiosità ed aumenta significativamente il tempo di soluzione.
  • Max Iterations: - Il numero massimo di iterazioni della Radiosità. Se posto a zero la Radiosità andrà avanti fino a verificare il criterio di convergenza. Si è energicamente avvisati di impostare un numero diverso da zero, di solito maggiore di 100.
  • Mult:, Gamma: - Lo spazio dei colori [colourspace] della soluzione di Radiosità è più dettagliato di quello espresso con semplici valori RGB a 24 bit. Quando gli Elementi vengono convertiti in facce, i loro valori di energia vengono convertiti in colore RGB usando i valori Mult e Gamma. Col valore di Mult si può moltiplicare il valore dell'energia, con Gamma si può cambiare il contrasto dei valori di energia.
  • Convergence: - Quando la quantità di energia non irradiata in un ambiente è più bassa di tale valore, la soluzione della Radiosità si ferma. L'energia non irradiata in un ambiente viene moltiplicata per l'area delle Patch. Durante ciascuna iterazione, parte dell'energia viene assorbita, o scompare quando l'ambiente non è un volume chiuso. Nel sistema di coordinate standard di Blender un tipico emettitore (come nei files di esempio) ha un'area relativamente piccola. Il valore di convergenza viene diviso per un fattore 1000 prima di verificare per questa ragione.

Si imposta Max Iterations: a 100 e ci si sposta nel Contesto della Scene e nel Sub-contesto Render (F10). Si cerca il Pulsante Interruttore Radio (Abilitazione della Radiosità nella Pulsantiera del Rendering.) nel pannello Render e lo si imposta ad 'on' per abilitare la Radiosità, quindi il pulsante Render! (F12).

Abilitazione della Radiosità nella Pulsantiera del Rendering.

Il rendering impiegherà più tempo del solito, nella console si noterà avanzare un contatore aumentare. Il risultato sarà molto mediocre (Il rendering della Radiosità per mesh grossolane (a sinistra).) in quanto il rendering della radiosità automatica non esegue un affinamento adattativo! Si selezionano tutte le mesh, una dopo l'altra, e in Modo Edit si suddividono almeno tre volte. La stanza, che è molto più grande delle altre mesh, la si può anche suddividere quattro volte. Si imposta Max Iterations un po' più in alto, 300 o più. Si provi ancora il Rendering (F12). Questa volta il rendering durerà più a lungo ma i risultati saranno molto migliori, con ombre morbide e perdita di colore (Il rendering della Radiosità per mesh più raffinate (a destra).).

Il rendering della Radiosità per mesh grossolane (a sinistra) e mesh più raffinate (a destra).
Nota
Nel Rendering della Radiosità Blender agisce come per un normale rendering, questo vuol dire che le textures, le Curve, le Superfici ed anche gli Oggetti Duplicati nei Frame [Dupliframed] vengono gestiti correttamente.