Università degli Studi di Trieste Corso di Laurea Specialistica in Ingegneria Informatica Elementi di Grafica Digitale High Dynamic Range Rendering in OpenGL Studente: Alberto Dotta - 81700080 Docente: Matjaz Hmeljak
Definizione L' HDR, acronimo di High Dynamic Range, è una tecnica utilizzata in computer grafica e in fotografia per consentire che i calcoli di illuminazione possano essere fatti in uno spazio più ampio (un high range appunto) e si possano rappresentare valori di illuminazione molto alti o molto bassi Le tecniche HDR sono fondate sulla natura fisica della luce. Per i calcoli si utilizzano le stesse unità di misura della fotometria, dove, per esempio, al sole viene assegnato un valore di luminosità milioni di volte più grande di quello del monitor del personal computer L'HDR dà la possibilità di immortalare una scena avendo poi il totale controllo sull'immagine finale; ad esempio è possibile esporre nuovamente la foto, correggendo o perfezionando il risultato finale.
High Dynamic Range Ciascun pixel composto da 3 colori primari (RGB); in questo modo ciascun pixel è salvato a 24 bits e il valore di ciascun componente può variare da 0 a 255 HDR utilizza un range dinamico più grande di quello usuale: ogni pixel può rappresentare: contrasto maggiore range dinamico maggiore.
High Dynamic Range
Exposure Un immagine HDR possiede tutte le informazioni necessarie per simulare il tempo di esposizione
Tone Mapping Tone Mapping è un applicativo che procede a fare una mappatura delle diverse aree di densità dell'immagine,individuando ogni area di valore diverso, ed esaltandola separatamente dalle altre, ottenendo a seconda dell'intensità voluta un iper-saturazione dei colori, un innalzamento del contrasto, con risalto di dettagli prima poco visibili. Può essere applicato ad una singola immagine, o alla risultante di una fusione di più fotogrammi con esposizione diversa. Monitors CRT o LCD e proiettori, hanno tutti una gamma dinamica limitata che è inadeguata a riprodurre la gamma completa di intensità della luce presente nelle scene naturali.
Real Time HDR Rendering HDR contiene valori contrari a quelli delle immagini classiche Esistono 2 formati per manipolare immagini HDR Radiance (si possono elaborare pixel molto luminosi senza perdita di precisione per quelli più scuri) OpenEXR (utilizzato principalmente per la produzione di film, supporta diverse gamme di colore) HDR in OpenGL: Frame buffer object (estensione di OpenGL per effettuare flexible off-screen rendering) GLSL (OpenGL( Shading Language; ; basato sul linguaggio di programmazione C, creato per dare agli sviluppatori maggior controllo diretto sulla pipeline grafica senza il bisogno di utilizzare linguaggio assembly o hw specifici).
GLSL: Buffer formats & limitations Estensione FBO disponibile ma non consistente in tutte le schede video Limitazioni: GL_RGBA32F (128bit/color) LENTO Non tutte le schede supportano filtering bilineare opengl 2.0 supporta non-power power-of-two textures
Environment mapping and associated shaders Metodi di mapping più conosciuti Cube Mapping: : punto di vista indipendente
Environment mapping and associated shaders 6 texture per ogni faccia del cubo, per il mapping serve un vettore 3D, che è quello che ha origine dal centro del cubo ed interseca una faccia
Environment mapping and associated shaders Sphere Mapping: : punto di vista fisso
Effetti utilizzati in OpenGL Reflection Refraction Effetto Fresnel Dispersione Cromatica
Reflection Reflection in computer grafica è utilizzata per emulare specchi e superfici lucide //color of the material uniform vec4 matcolor; //Cube Map Uniform samplercube env; //Reflection factor Uniform float reflectionfactor; //Reflected Vector Varying vec3 R; void main (){ gl_fragcolor = mix(matcolor matcolor, tecturecube(env env,, R), reflectionfactor);}
Reflection
Refraction Refraction è il cambiamento di direzione di un'onda dovuto ad un cambiamento nella relativa velocità //Cube Map Uniform samplercube env; //Refracted vector varying vec3 R; void main (){ gl_fragcolor = texturecube(env env,, R);}
Refraction
Effetto Fresnel Quando un raggio di luce colpisce il contorno tra due materiali, parte della luce viene riflessa sulla superficie e parte della luce viene rifratta attraverso la superficie. L equazione di Fresnel descrive in maniera precisa questo fenomeno e descrive il comportamento della luce quando si muove tra indici di rifrazione differenti. La riflessione di luce è conosciuta come riflessione Fresnel //Cube Map Uniform samplercube env; //Reflected and refracted vectors varying vec3 reflectedvector, refractedvector //Reflection factor based on fresnel equation varying float reffactor; void main (){ //Read cube map vec4 reflectedcolor = texturecube(env env, reflectedvector); vec4 refractedcolor = texturecube(env env, refractedvector); //mix reflected and refracted colors gl_fragcolor=mix(refractedcolor refractedcolor, reflectedcolor, reffactor);}
Dispersione Cromatica Dispersione cromatica è un fenomeno che causa la separazione di un onda in componenti spettrali con diverse lunghezze d onda d (dipendenza velocità onda/lunghezza d onda) d //Cube Map uniform samplercube env; //Reflected and refracted vectors varying vec3 R, TRed, TGreeen, TBlue; //Reflection factor based on fresnel equation varying float reffactor; void main (){ //Read cube map for reflected color vec4 refractedcolor; refractedcolor.r=texturecube(env env, TRed).r.r; refractedcolor.g=texturecube(env env, TGreen).g.g; refractedcolor.b=texturecube(env env, TBlue).b.b; //mix reflected and refracted colors gl_fragcolor=mix(refractedcolor refractedcolor, reflectedcolor, reffactor);}
Dispersione Cromatica
HDR Rendering Process Si attiva un float FBO per fare il render della scena; Lo sky box è renderizzato utilizzando il cube map,, letto da un file.hdr e memorizzato nel formato GL_RGBA16F in modo da contenere valori HDR; Si disegna la maglia al centro della scena con un solo effetto (riflessione, rifrazione, effetto Fresnel o dispersione cromatica); Vengono estratte le aree più luminose dell immagine in un FBO HDR. La texture è ridotta di dimensioni un numero desiderato di volte tramite filtering bilineare; L immagine di base viene composta sommando tutte le texture ridotte; Si prende un HDR framebuffer con la scena e gli effetti desiderati; bisogna poi convertire l immagine l HDR in LDR, applicando un operatore di tone mapping alla texture.
HDR Rendering Process Render Sky Box Add Mesh Compose Final Image + Extract Bright Areas 1/4 1/2 1/8 + Downsample texture & blur Additive Blending Final Image Bloom Mask
Esempi di Esposizione
Comparazione tra HDR e LDR
Conclusioni High Dynamic Range Rendering e Imaging mostrano una scena virtuale in maniera più reale,, controllando l immagine l con l esposizione ed altri effetti. HDR è ancora un tecnica giovane e di conseguenza non è utilizzata spesso nell industria; schede video recenti con shaders e buffer che supportano floating point fanno si che il rendering HDR possa emergere in prodotti commerciali come i videogames. Anche se gran parte degli hardware attuali possono utilizzare immagini HDR, i nostri schermi possono solo rendere colori a 32bit. Questo è il motivo per cui il tone mapping può essere applicato con lo scopo di mappare i valori HDR ai valori limitati di uno schermo Si stanno attualmente sperimentando schermi HDR, ma possiamo sperare, in un futuro non molto lontano, di poter essere equipaggiati con un completo hardware HDR.
Bibliografia OpenGL: http://opengl.org http://opengl.org/documentation/specs/version2.0/glspec20.pdf http://nehe.gamedev.net OpenGL Shading Language: http://oss.sgi.com/projects/ogl-sample/registry/arb/glslangspec.full.1.10.59.pdf sample/registry/arb/glslangspec.full.1.10.59.pdf http://www.lighthouse3d.com/opengl/glsl http://www.mathematik.uni-dortmund.de/~goeddeke/gpgpu/tutorial.html OpenGL Cube Map Texturing: http://developer.nvidia.com/object/cube_map_ogl_tutorial.html The CG tutorial: http://developer.nvidia.com/object/cg_tutorial_home.html Shaders for game programmers and artists: http://www.courseptr.com/downloads/chapterview/00924-ch8prev.pdf ch8prev.pdf High Dynamic Range Rendering: http://www.gamedev.net/reference/articles/article2208.asp Dynamic Range in Digital Photography: http://www.cambridgeincolour.com/tutorials/dynamic-range.htm range.htm Tone Mapping: http://en.wikipedia.org en.wikipedia.org/wiki/tone_mapping http://graphics.cs.uni graphics.cs.uni-sb.de/courses/ss02/cg2/ /ss02/cg2/folien/12tonemapping.pdf Paul Debevec home page: http://www.debevec.org GPU sdk: http://www.ati.com www.ati.com/developer http://developer.nvidia.com Free 3d models: http://www.turbosquid.com