Alta dinamica per le nostre retine

A chi tocca oggi? All’HDR, direi.

L’HDR è stato per lungo tempo una specie di mito: la diatriba tra “HDR vero” ed “HDR falso” mi ha divertito a lungo. Ovviamente il tutto era portato avanti dalle riviste, che purtroppo parlano a vanvera di quello che non sanno. Non si distaccano minimamente dalla stampa generalista che tanto scherniscono, ma vabbè.

Vediamo un po’ cos’è questo HDR. In primo luogo “HDR” è l’acronimo di

High Dynamic Range

Eh? Ma che vuol dire? Non sembra nemmeno una tecnica, ma una definizione. E’ proprio questo infatti. Dire che un gioco “Ha l’HDR” non ha molto senso, così come dire “l’HDR è un effetto”. Vediamo perchè.

Noi sappiamo che il nostro amato e stimato monitor ci può far vedere milioni di colori. Quanti, esattamente?

Prima di rispondere, credo sia sensato spiegarvi come funziona il nostro bulbo oculare (a me ha sempre fatto ridere la parola “bulbo”, a voi no? 😀 ).

Il nostro amatissimo ha sul fondo una roba chiamata “retina”. Sulla retina abbiamo due tipi di recettori: i bastoncelli ed i coni. I primi sono sensibili alla Luminanza, ossia ci dicono quanto forte è la luce.

I secondi sono invece sensibili al colore. I coni sono divisi in tre gruppi, quelli sensibili alle radiazioni basse, medie ed alte. Per essere più chiari, sono sensibili al rosso, al verde ed al blu. Questi recettori sono tutti sul fondo della retina, tranne dove c’è il nervo ottico (dove c’è una cosa non può essercene un’altra): è lì che c’è la famosa “zona cieca”.

Da qui capiamo finalmente perchè tutto il mondo della grafica gira attorno alla triade (o tristimolo) RGB: perchè il nostro occhio è fatto così.

Dicevamo prima: quanti colori possiamo rappresentare con il sistema RGB dei computer? Un sistema moderno ha 8 bit per ogni componente, quindi rappresenta numeri da 0 a 255. Lo 0 significa “niente colore”, mentre il 255 significa “colore a piena potenza”.

Se mettiamo i tre colori in fila, otteniamo un numero da 24 bit. A questo punto è facile: 2 elevato alla 24 è il numero di colori.

Quindi: 16.777.216

Tanti, vero? L’occhio ne vede circa 16 milioni, pensate un po’: quindi meno di quelli rappresentabili. Il che non significa che il monitor visualizza più colori di quelli che vediamo, ma ne parleremo un’altra volta.

Ok, torniamo all’HDR: dicevamo che se diamo 8 bit, abbiamo un range da 0 a 255 per componente. Questo range, che notiamo essere in numeri interi, viene convertito per fare i nostri conti in un range che varia da 0 ad 1, dove si lavora con numeri con la virgola (tipo 0.5, 0.8 e così via).

E se noi dessimo un range molto più ampio per componente? Tipo 10 o 32 bit ognuno? Potremmo avere un numero di tipo “float” (quindi con la virgola) che potrebbe andare su tutto il range dei float, quindi, chessò potrei scriverci dentro 100, oppure 1.000,6 oppure anche 1.000.000 .

Ecco, questo è l’HDR: avere i componenti del colore con range ampio, non tra 0 ed 1, ma che possa assumere valori molto più alti (o bassi).

Capiamo subito che non è un effetto in sè: è una specie di proprietà.

Quindi HDR non significa “il bagliore quando guardo il sole” o “quando esco dalla canverna sono accecato” o “al buio vedo fondamentalmente il rosso”: tutti questi sono effetti possibile grazie al fatto che stiamo facendo il rendering su superfici HDR (ossia con componenti RGB belle grosse), ma l’HDR è la proprietà della superficie, non l’effetto.

Detto questo, cerchiamo di capire perchè si è ritenuto necessario fare i conti in alta dinamica.

Nella realtà abbiamo luci estremamente forti: il sole, ad esempio, è una luce dannatamente intensa. Senza andare a prendere il sommo imperatore, però, possiamo limitarci ai suoi riflessi: quelli sul mare, ad esempio.

Queste luci sono intensissime ed è impossibile rappresentarle adeguatamente con un range che va solo da 0 ad 1: dovremmo perdere tantissima precisione. Per “tantissima” non intendo “da 0 a 2” ma circa 10 elevato alla 4 😀 (se parliamo di candele, l’unità di misura dell’intensità della luce)

Quindi significa che con l’HDR il nostro monitor emetterà una luce intensa come quella vera? Certo che no, purtroppo (o per fortuna): alla fine di tutto, la nostra immagine dovrà finire su una superficie normale, in modo che l’hardware della scheda grafica possa prendere tale superficie e metterla sullo schermo.

Ma quindi? A che serve l’HDR? A niente? Detto così parrebbe di sì: se non si fa niente, l’immagine in alta dinamica viene semplicemente portata su quella a bassa per essere messa su schermo. Certo, tutti i valori maggiori di 1 verrebbero portati ad 1, creando una immagine inquietantemente sovraesposta.

E quindi? Ecco qui perchè “l’HDR” non è un effetto: di per sè non fa molto. Avendo però la superficie ad alta dinamica, possiamo fare tutta una serie di conti che non potremmo fare con una immagine a bassa dinamica. In nostro scopo è imitare il funzionamento della retina (o di una macchina fotografica, secondo quello che vogliamo fare), quindi per farlo abbiamo bisogno di una scena che abbia le luminanze belle alte, come nella realtà. Alla fine dei nostri conti, avremo una immagine in bassa dinamica, che potremo copiare nella memoria che andrà sullo schermo.

Ma che conti si fanno? Si possono fare dei conti per riprodurre l’abbagliamento dovuto al passare da una zona buia ad una zona chiara. Un’altro conto che possiamo fare serve a dare una colorazione differente alla scena, giacchè il nostro occhio si comporta diversamente a seconda della “quantità” di luce presente.

Il nostro occhio funziona diversamente a seconda della luce presente: ci sono fondamentalmente tre “funzionamenti” principali:

Visione Fotopica: E’ la condizione standard, diciamo una giornata luminosa e allora, con le tipe che prendono il sole al parco ostentando le loro carni.

Visione Scotopica: In questo caso, invece, la luce è molto bassa. Diciamo come quando tutta la stanza è buia e non filtra quasi niente dalle tapparelle ed è notte. Dopo qualche minuto (circa 10) il nostro occhio si abitua e ci farà vedere qualcosa. In questo caso i colori che vedremo maggiormente saranno quelli caldi (tipo il rosso).

Visione Mesopica: Una media tra i due casi precedenti. Diciamo che a questo livello riusciamo ancora a distinguere i colori.

Questi tipi di “visione” possono essere simulati solamente tramite conti su superfici in HDR.

So già che mi verrà posta questa domanda: perchè alcune schede non consentono l’Antialiasing e l’HDR assieme? La risposta è semplice: basta pensare a come funziona l’antialiasing.

In genere funziona così: si disegna la scena su una superficie molto più grande, per poi riscalarla su quella che andrà visualizzata (quindi 1024×768 o quello che preferite). Il rescale, giacchè viene fatto tramite media tra i vari pixel, nasconderà le brusche transizioni di colore, che generano l’aliasing. Siccome abbiamo visto che in HDR si fa il rendering da un’altra parte e non sulla superficie di rendering, capiamo subito che la cosa o la si gestisce apposta oppure niente antialiasing.

Per lungo tempo ho riflettuto se fosse necessario mettere delle formule: ho deciso che qui non ne metterò, ma il prossimo articolo ne sarà profuso. Ovviamente per il vostro sollazzo 😀

9 commenti su “Alta dinamica per le nostre retine

  1. OT: Che studi, Shaka? ComDig?

    IT: I tuoi articoli mi piacciono sempre, Monopoli, ma mi chiedo quanto avrei capito di quello che hai scritto senza le competenze che ho acquisito all’epoca facendo appunto l’esame di Informatica Grafica 😀
    Spero siano utili anche per i non scimmiati del campo 🙂

  2. Piaciuto.
    Cavoli, in uni al massimo da noi c’era elaborazione delle immagini (bello per carità, ma limitato a trattare immagini) perchè l’esame di grafica era una fuffa con un po’ di opengl (che non ho nemmeno fatto).
    E pensare che ci sono tante cose che volevo imparare…

  3. Avete capito? Quando al mare sbavate sulla tipa in topless, non state
    facendo lo sguardo da maniaco, è uno sguardo fotopico!

    Alex me ne insegna una ogni giorno di più 😀

    Bell’articolo, mette in chiaro parecchie cose.
    Do like it!

    La prossima volta voglio le formule :Q___

  4. Eccerto 😀 Sapete che ci sono un sacco di studi sul rendering della pelle? Ovviamente mi si potrebbe dire “Ma tu non ce l’hai, la pelle?”
    Allorchè fuggirei 😀

  5. Bellissimo articolo.
    Per curiosità quanto incide sul real-time questa opzione? Io ho provato il tuo esempio (mare che riflette sole con Terragen e Cinema4D) e diventa il rendering diventa luuuuuuuuuuuungo.

Rispondi

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.