RADIOSITY Algoritmo di calcolo della luce realistica DENIS COSSUTTA LAUREA SPECIALISTICA INGEGNERIA INFORMATICA A.A. 2005/2006 INTRODUZIONE • meccanismo ray tracing utilizzato per modellare la riflessione speculare e la rifrazione senza dispersione, facendo uso di una luce ambientale non direzionale, che tiene conto di tutti i contributi dell’illuminazione globale • e le radiazioni e le riflessioni tra oggetti? • tutta l’energia emessa o riflessa da ogni superficie è responsabile della sua riflessione e dell’assorbimento da parte di altre superfici • radiosity = somma dei rapporti in base ai quali la superficie emette energia, riflettendola e trasmettendola ad ogni altra superficie RADIOSITY • le superfici considerate nel metodo di radiosity possono emettere luce, a differenza di quelle considerate nel ray tracing: ognuna di esse può essere modellata come una sorgente luminosa estesa, avente un’area finita • Il termine radiosità indica la quantità di energia che lascia una superficie, data dalla somma della quantità di energia che emette essa stessa e la quantità di energia ricevuta da altre superfici che riflette • metodo radiosity – modello di illuminazione fisico che assume che tutte le superfici siano dei riflettori di luce diffusa costante e che le interazioni tra di esse si risolvano usando equazioni lineari. La soluzione di questo sistema di equazioni lineari è l’output finale che può essere usato per renderizzare le superfici della scena RADIOSITY • Il metodo considera la suddivisione o tessellamento dell’ambiente in un numero finito di elementi di dimensione limitata, chiamati patch, ognuno dei quali emette e riflette luce in modo uniforme sull’intera area • una singolo patch emana : luce diretta e/o indiretta • luce diretta : luce che l’oggetto riceve direttamente dalla sorgente luminosa • luce indiretta : luce riflessa su un oggetto da altri oggetti RADIOSITY : equazione generale • negli altri algoritmi la luce veniva trattata separatamente dalle superfici che illuminava • il radiosity permette a qualsiasi superficie di emettere luce, in modo che tutte le sorgenti di luce vengono considerate come se avessero un’area • ipotizziamo di suddividere l’ambiente in un numero finito n di patch di area finita, che emettono e riflettono luce uniformemente in tutta la loro area. Si ha che per ogni patch i: RADIOSITY : equazione generale dove: Bi è la radiosità totale emessa dalla superficie i Ei è la luce emessa propriamente dalla superficie i ρj è un valore adimensionale e corrisponde al valore di riflettenza della superficie che determina la frazione dell’energia totale incidente rflessa dalla superficie i Bj Aj è l’energia totale emessa dalla superficie j con area Aj (radiosità per area) Fj-i è la frazione di energia che lascia la superficie j e che investe la superficie i. Questo valore tiene conto della forma e dell’orientamento di ogni superficie ed è chiamato fattore di forma RADIOSITY : equazione generale • l’equazione indica la relazione esistente tra l’energia emessa da una superficie unitaria e l’energia entrante nella superficie unitaria, vista come somma della luce direttamente emessa e della luce riflessa • la luce riflessa viene determinata calcolando, rispetto al coefficiente di riflessione della patch, la somma della luce incidente, che non è altro che la somma della luce che lascia un’unità di area della patch j-esima e che raggiunge la patch i-esima RADIOSITY : equazione generale - semplificazione In ambienti diffusi vale la seguente relazione di reciprocità tra i fattori di forma Fi-j Fj-i : Fi-j Ai = Fj-i Aj Si ottiene quindi la seguente formula finale: RADIOSITY : equazione generale – forma matriciale • • in questo modo, risolvendo il sistema, troviamo la radiosità per ogni patch che può essere resa da qualsiasi punto di vista con un qualsiasi algoritmo di visualizzazione una volta ottenuto il valore di radiosity della patch, si possono calcolare i valori per ogni vertice. I casi sono due: - se un vertice è all’interno di una superficie, gli viene assegnato il valore medio della radiosità delle patch che lo condividono - se il vertice è sui bordi della superficie, si trovano le patch che lo condividono e il vertice interno piu vicino. Poi si confrontano la media della radiosità della patch con la media della radiosità dei due vertici RADIOSITY : esempio Si consideri la figura sottostante: • • • la radiosità del vertice e è data da : Be =(B1 + B2 + B3 + B4)/4 per calcolare la radiosità del vertice b sui bordi per prima cosa si deve trovare il vertice interno più vicino che in questo caso è e. Poi si impone (Bb + Be)/2=(B1 + B2)/2 da cui si ricava Bb =B1 + B2 - Be per calcolare la radiosità del vertice a sui bordi, prima si deve trovare il vertice interno più vicino che in questo caso è e. Poi si impone (Ba + Be)/2= B1 da cui si ricava Ba =2B1- Be RADIOSITY : calcolo dei fattori di forma • I fattori di forma rappresentano la misura di quanta luce proveniente dalla patch j colpisce una patch i • Cohen e Greenberg implementarono un algoritmo per approssimare i form factors RADIOSITY : calcolo dei fattori di forma Il fattore di forma da un’area differenziale dAi ad un’area differenziale dAj , dove Hij può assumere valori 0 o 1 a seconda che dAj sia visibile o meno da dAi è data da: RADIOSITY : calcolo dei fattori di forma Per determinare Fdi,j , cioè il fattore di forma da un’area differenziale dAi ad un’area finita Aj , integriamo sull’area della patch j In questo modo il form factor da Ai ad Aj è l’area media dell’equazione precedente sulla patch i RADIOSITY : approssimazione dei form factors • se noi assumiamo il punto centrale di una patch come rappresentante di tutti gli altri suoi punti, possiamo approssimare Fi,j con Fdi,j, computato per dAi nel centro della patch i-esima • Alcuni studiosi hanno cercato un modo più semplice per calcolare Fdi,j • Nusselt ha mostrato che questa quantità si può calcolare mediante due proiezioni successive: innanzitutto bisogna proiettare quelle parti di Aj che sono visibili da Ai su una semisfera unitaria, centrata in dAi, successivamente quest’area sulla superficie della semisfera viene proiettata ortograficamente sul cerchio unitario che costituisce la base della semisfera RADIOSITY : approssimazione dei form factors - Nusselt RADIOSITY : approssimazione dei form factors – Cohen e Greenberg • Cohen e Greenberg proposero di proiettare Aj nella metà superiore di un cubo centrato su dAi con la faccia superiore parallela alla superficie. • Ogni faccia dell’ ‘emicubo’ è divisa in piccole celle quadrate di ugual area • Aj viene quindi proiettato sulle facce dell’emicubo • Si pensi ad ogni faccia del cubo come una pellicola su cui viene impresso ciò che una patch vede in ognuna delle 5 direzioni (5 facce dell’emicubo) RADIOSITY : approssimazione dei form factors – Cohen e Greenberg • Ad ogni cella p dell’emicubo è associato un valore del fatore di forma: • Dato un sistema di riferimento per il semicubo, la cui origine è posta nel centro della faccia inferiore, otteniamo: • Da cui si ha che: RADIOSITY : approssimazione dei form factors – Cohen e Greenberg • Per una faccia laterale perpendicolare all’asse x dell’emicubo abbiamo che: • Da cui si ha che: • Si può approssimare Fdi,j per qualsiasi patch j sommando i valori di ∆Fp associati ad ogni cella p nelle proiezioni sull’emicubo di Aj RADIOSITY : substructuring • Per migliorare il risultato di una soluzione radiosity, si deve incrementare il numero n di patch, ma in questo modo si andrebbe ad aumentare il tempo di calcolo poiché la complessità è O(n2) • Per evitare di incrementare in modo quadratico le suddivisioni delle patch si suddivide in modo adattativo le patch in sotto patch solo nelle zone in cui si trova un gradiente di radiosità alto RADIOSITY : substructuring • ogni qualvolta viene suddivisa una patch i, i form factor Fsj da ogni sottopatch s a ogni patch j vengono calcolate mentre ogni form factor delle patch alle sottopatch di i non vengono calcolate • dopo che una patch i viene suddivisa, i valori calcolati precedentemente di ogni form factor della patch alle altre sono sostituiti da un valore più accurato calcolato sulle m sottopatch di i • la radiosità di ogni sottopatch s di una patch i può essere calcolata come: RADIOSITY : substructuring • l’algoritmo può iterare suddividendo sempre più le patch dove c’è un’alto gradiente di radiosità fino al punto di raggiungere un risultato soddisfacente • le radiosità finali delle sottopatch saranno poi usate per determinare la radiosità dei vertici RADIOSITY : raffinamento progressivo • il costo dell’algoritmo di radiosity visto fino a questo momento è molto elevato • l’idea di base sarebbe creare una prima immagine non accurata e migliorarla in seguito usando un algoritmo incrementale • con la definizione attuale di radiosity questo meccanismo non è realizzabile • alcuni studiosi tuttavia hanno sviluppato un algoritmo per il raffinamento progressivo di radiosity, senza la necessità di precalcolare e memorizzare i fattori di forma • le equazioni lineari vengono risolte in modo progressivo RADIOSITY : raffinamento progressivo • Le differenze fra i due metodi sono perciò le seguenti: Modello classico Raffinamento progressivo Il calcolo della radiosity della patch i-esima viene basato sulla stima delle altre patch, raccogliendo la luce dell’ambiente Si considera invece la radiosity emanata da una patch verso il resto dell’ambiente, piuttosto che quella ricevuta Ogni termine dell’equazione di radiosity esprime l’effetto della patch j sulla radiosity della patch i Bi dovuto a Bj è uguale a ρjBj Fij , per ogni j Si vuole determinare: Bj dovuto a Bi è uguale a ρjBi Fji , per ogni j RADIOSITY : raffinamento progressivo • Il metodo tradizionale raccoglie la luce del resto dell’ambiente sulla generica patch, mentre l’approccio del raffinamento progressivo emana la radiosità da una patch verso l’ambiente • il nuovo calcolo però richiede la conoscenza di Fji ,cioè del fattore di forma dell’area Aj all’area Ai, da calcolare in semicubi separati, • sfruttando però la relazione esistente tra fattori di forma reciproci possiamo dedurre che l’effetto su Bj dovuto a Bi è uguale a: per ogni j • per risolvere questa equazione per ogni j, sono necessari soltanto i form factors calcolati usando un solo emicubo centrato sulla patch i RADIOSITY : raffinamento progressivo • se i fattori di forma possono essere calcolati velocemente, allora la memoria da essi occupata può essere rilasciata non appena la radiosity da essi emanata viene lanciata nell’ambiente • ad ogni passo dell’algoritmo dobbiamo avere a disposizione memoria solo per un singolo semicubo e per i suoi fattori di forma • Nell’iterazione, le patch più significative, cioè che contribuiscono ad illuminare maggiormente le altre, vengono calcolate prima mentre quelle con poca energia, cioè che hanno meno impatto sulle altre, sono lasciate per ultime • l’algoritmo itera fino a quando non si raggiunge una tolleranza accettabile RADIOSITY : illuminazione ambientale • alcuni studiosi hanno proposto di aggiungere un termine di illuminazione ambientale per compensare la bassa luminosità delle immagini iniziali • un modo per stimare questo termine è quello di usare una somma pesata delle patch che ancora non hanno emanato radiosità • Per prima viene calcolata una riflessione diffusa media • questa equazione viene usata per calcolare un fattore di riflessione complessivo R che tenga conto dei cammini differenti attraverso cui l’energia può viaggiare da una patch all’altra: RADIOSITY : illuminazione ambientale • Infine, una stima del termine ambientale viene eseguita facendo riferimento a quest’ultima quantità R: • Questo termine ambientale viene poi utilizzato come argomento per calcolare la radiosità della patch: RADIOSITY : esempi 1.o esempio immagine senza radiosity immagine con radiosity il fascio di luce si ferma alla prima iterazione, lasciando al buio gli oggetti 2 e 3 parte della luce rimbalza illuminando anche gli oggetti 2 e 3 con intensità decrescente con il prolungarsi delle iterazioni RADIOSITY : 2. o esempio Queste tre ripetizioni della stessa immagine mostrano lo stato di avanzamento del metodo a raffinamento progressivo di radiosity: la prima immagine viene prodotta alla prima iterazione, la seconda alla seconda iterazione e la terza immagine alla quarta iterazione Riferimenti bibliografici • http://www.panebianco3d.com/i_tutorials-lightwaveradiosity_01.htm • www.siggraph.org/education/materials/HyperGraph/radiosi ty/overview_1.htm • http://psycho.usr.dsi.unimi.it/~spa/corso9798/t610.html • http://www.cg.tuwien.ac.at/research/rendering/rays-radio/ • http://web.cs.wpi.edu/~matt/courses/cs563/talks/radiosity.ht ml