\\ Home : Articoli : Stampa
HDR (High Dynamic Range)
Di RobyDx (del 21/01/2007 @ 13:15:18, in Shader Library, linkato 2076 volte)

L'HDR (High Dynamic Range) è un nuovo modo di creare la luce. Prendiamo ad esempio una foto che inquadra un oggetto ed una fonte di luce. Se con un programma diminuiamo la luminosità vedremo che l'oggetto diventa più scuro ma che anche la luce diventa più scura. Questo è sbagliato. La luce dovrebbe mantenere la sua luminosità molto più a lungo. Per ovviare a questo si usano come render target non più il backbuffer a 32bit( 8 per colore equivalenti a 256 variazioni) ma a 64 e 128bit (corrispondenti a 65536 e 4 miliardi di variazioni). Questo permette di dare ai colori maggiori differenze cromatiche. Di questa texture mostreremo a video solo un intervallo (lo schermo rimane sempre a 32bit). Il risultato sarà che per una scena in ombra le luci saranno comunque visibili. Questo nuovo approccio è applicabile in moltissimi modi, dall'applicazione di environment map agli oggetti (quindi luci precalcolate tramite texture cubiche), alla possibilità di creare effetti di bloom molto più realistici. Nel demo che riporto una scena viene illuminata a 64bit (valori di luce non più limitati ad 1,1,1 ma a 256,256,256) con forti variazioni di colore a seconda del materiale. La scena viene quindi sfumata con 2 blur (uno verticale ed uno orizzontale), applicato un bloom e successivamente viene variata l'esposizione e la gamma. Il risultato sarà che gli oggetti illuminati brilleranno in modo molto marcato ricoprendo in parte gli oggetti in ombra che si troveranno fra noi e quello illuminato.

Esempio Shader HDR

  • VB.Net 2003 o framework 1.1, directX9.0c febbraio
  • linguaggio usato: HLSL tramite file FX
  • requisiti hardware: VS_2_0, PS_2_0, supporto renderTarget A16R16G16B16F
  • schede video geforce 5200 o superiori, ati 9500 o superiori

    HDR.zip 400Kb