High Precision Dynamic Range (HPDR)
Chiunque osservi una scena 3D resta colpito dalla
complessità degli oggetti, dall'elevato numero di dettagli visualizzati e dal generale
realismo ottenibile. Un elemento estremamente complesso da riprodurre in una scena 3D ma
di elevatissima importanza nell'ottenimento di una visualizzazione realistica è
sicuramente la corretta riproduzione dell'illuminazione.
Questo è tanto più difficile quanto si alternano parti della scena con forte
illuminazione, con altre in ombra se non quasi completamente al buio.

L'immagine qui sopra riprodotta è proveniente da un demo
sviluppato da Paul Debevec alcuni anni fa per la Games Developer Conference, mirante
proprio a mostrare la complessità dell'illuminazione di una scena in presenza di forti
sorgenti d'illuminazione, alternate a parti al buio. Le elaborazioni richieste per
generare una scena di questo tipo, mantenendo piena leggibilità degli oggetti e dei
dettagli anche se con evidenti e forti contrasti d'illuminazione, sono elevatissime.
Nell'immagine, le parti con luce diretta sono estremamente
chiare, a contrasto con quelle in ombra nelle quali dominano i colori scuri ma
l'illuminazione riflessa permette di apprezzare il dettaglio delle superfici.
In passato è sempre stato molto difficile riuscire a
riprodurre al meglio questo tipo d'illuminazioni. I per-pixel frame buffer standard a
32bit, infatti, permettono di utilizzare solo 255 valori per indicare i differenti livelli
d'illuminazione di un oggetto, troppo pochi per poter rappresentare correttamente la
dinamica di una scena con forti alternanze di luci e ombre.
L'occhio umano riesce a percepire un dynamic range, tra
oggetti illuminati e non , pari a circa 14dB, con andamento logaritmico. Questo vuol dire
che vengono meglio definiti i particolari scuri più che quelli illuminati, visti più
indistintamente come luce e quindi tendenti al bianco.
Il dynamic range standard di un frame buffer a 32bit per pixel è pari a circa 2,4dB,
quindi insufficiente per la percezione dell'occhio umano a distinguere i dettagli.
La tecnologia NVIDIA High Precision Dynamic Lightning,
implementata nel chip NV40, permette di renderizzare scene così complesse ottenendo una
superiore dinamica. Questa tecnica utilizza 3 differenti fasi per ottenere il rendering
della scena: light transport, tone mapping e color and gamma correction.
Il grado con il quale le singole superfici della scena
riflettono la luce viene calcolato e salvato in uno speciale buffer HDR; il contributo di
più sorgenti luminose viene sommato. L'output dell'operazione di light transport è l'HDR
per-pixel radiance, valore che può essere pari a qualsiasi numero a seconda di quanto il
pixel e soggetto a illuminazione all'interno della scena. L'algoritmo calcola, quindi,
quali oggetti risultino visibili e quindi debbano essere mostrati nella scena.
Il risultato ottenuto è una compressione del livello dinamico dell'illuminazione presente
nella scena, ma comunque con una superiore precisione rispetto a quanto possibile con
altre tecniche.
Correzioni nei colori e nel gamma dell'immagine vengono
applicate così da meglio adattare la scena al tipo di display utilizzato. Per via
dell'andamento logaritmico della percezione dell'occhio umano, si richiede superiore
precisione in prossimità delle zone nere, dove i dettagli sono maggiormente visibili, e
inferiore vicino alle zone bianche.
Una tecnica spesso utilizzata per rendere la dinamica delle
luci al meglio è quella sRGB; a fronte di un gamma space a 8-bit e di un range da 0 a 1,
sRGB permette di avere maggiore precisione in prossimità dello 0, superfici scure,
rispetto a quelle più illuminate, riprendendo parte dell'andamento logaritmico
dell'occhio umano. Questo permette di ottenere un risultato qualitativamente superiore al
tradizionale RGB, ma con valori non lineari e comunque con un notevole margine di errore
al proprio interno.
sRGB si è rivelata essere una buona via per memorizzare i
colori, in quanto da un punto di vista di elaborazione richiede poca potenza di calcolo e
si abbina bene allo standard utilizzato da Microsoft per Windows e a quella che è la
tipica riproduzione di oggetti e immagini nel web.
sRGB, tuttavia, non è un valido strumento per gestire
illuminazione, soprattutto quando questa viene sovrapposta con più luci in una scena, in
quanto in sRGB i colori non possono essere sommati, e quindi le luci sommate. Per ottenere
questo risultato i colori devono essere convertiti, richiedendo ulteriori elaborazioni,
oppure si può evitare l'operazione di conversione ottenendo però una perdita di
dettaglio e di precizione.
La tecnologia EXR implementata nel chip NV40, derivata
direttamente dallo standard OpenEXR (sito web a questo indirizzo), permette di ottenere un dynamic range pari a 12dB,
con precisione logaritmica a 11bit. Queste specifiche sono già state integrate
all'interno delle API DirectX 9 e con NV40 trovano un pieno supporto hardware.
NV40 supporta nativamente sia EXR che sRGB; la seconda
tecnica è indicata per la memorizzazione dei colori dei pixel che compongono i singoli
oggetti di una scena, mentre EXR permette di elaborare cosa siano questi colori e come
questi siano soggetti alle differenti luci presenti all'interno della scena.

con EXR: differenza di 9000:1 tra le intensità delle sorgenti d'illuminazione

senza EXR: differenza di 100:1 tra le intensità delle sorgenti d'illuminazione
Osservando in dettaglio le due immagini si nota
come la prima vanti una superiore precisione dei dettagli, in modo particolare quando
questi sono meno soggetti alle luci. Le parti illuminate non diretttamente sono meno
soggette alla pura illuminazione, restituendo un dettaglio più fedele degli oggetti; in
particolare, basti confrontare la parte destra del pavimento nelle due immagini per vedere
il superiore dettaglio della prima scena.
|