La maggior parte dei modelli di rendering, incluso il ray-tracing, suppongono un modello spaziale semplificato, altamente ottimizzato per la luce che entra nel nostro 'occhio' al fine di disegnare l'immagine. A questo modello si possono aggiungere la riflessione e le ombre per ottenere un risultato più realistico. Eppure, c'è un aspetto importante che manca! Quando una superficie ha una componente di luce riflettente, essa non solo appare nella nostra immagine, ma illumina anche le superfici vicine. E viceversa. Infatti, la luce rimbalza nell'ambiente finché non sia assorbita tutta l'energia luminosa (o fuoriesce!).
La luce re-irradiata trasporta le informazioni sull'oggetto che l'ha rilanciata, in particolare il colore. Dunque, non solo le ombre sono 'meno nere' a causa della luce reirradiata, ma anch'essa tende a mostrare il colore dell'oggetto vicino ben illuminato. Un fenomeno spesso citato come 'fuoriuscita di colore' (Figura 18-1).
In ambienti chiusi, l'energia della luce viene generata da 'emittenti' ed è rappresentata dalla riflessione o assorbimento delle superfici dell'ambiente. La percentuale di energia che lascia una superficie è chiamata 'radiosità' della superficie. Diversamente dai modelli convenzionali di rendering, i metodi di Radiosità calcolano prima di tutto le interazioni della luce in un ambiente in modo indipendente dalla vista, dopodiché, si possono effettuare, in tempo reale, i rendering di diverse viste.
In Blender, sin dalla versione 2.28, la Radiosità è sia uno strumento sia di rendering che di modellazione. Questo vuol dire che si può abilitare la Radiosità all'interno del rendering oppure usare la Radiosità per dipingere i colori dei vertici o la luminosità dei vertici delle proprie mesh, per un uso successivo.
A partire da Blender v2.31
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.