Yüksek Dinamik Aralık (HDR)
Standart bir Framebuffer'da her bir RGB kanalı 8 bit ile saklanır (\([0, 255]\) veya \([0.0, 1.0]\)). Buna Düşük Dinamik Aralık (LDR - Low Dynamic Range) denir.
Gerçek dünyada ise bir mum alevi ile bir stadyum projektörü veya Güneş aynı parlaklıkta değildir! Güneş'in parlaklığı \(100.000\) iken iç mekan lambası \(1.0\) olabilir. Eğer tüm değerleri \([0.0, 1.0]\) aralığına zorlarsanız, tüm parlak alanlar saf beyaza (\(1.0\)) doyar ve detaylar kaybolur.
Yüksek Dinamik Aralık (HDR - High Dynamic Range), parlaklık değerlerini sınırsız kayan noktalı sayılar olarak saklayıp sahneyi çizme ve ardından ekrana uygun şekilde sıkıştırma sanatıdır.
Kayan Noktalı Framebuffer (GL_RGBA16F)
Renk tamponumuzun \(1.0\)'dan büyük değerleri kırpmaması (clamp etmemesi) için kayan noktalı bir FBO oluştururuz:
Artık ışık şiddetlerimizi vec3(100.0, 100.0, 100.0) gibi devasa fiziksel değerlerle tanımlayabiliriz!
Ton Haritalama (Tone Mapping)
HDR tamponundaki sınırsız değerleri monitörün gösterebileceği \([0.0, 1.0]\) LDR aralığına sıkıştırma işlemine Ton Haritalama (Tone Mapping) denir.
İki popüler yöntem:
1. Reinhard Ton Haritalaması
Erik Reinhard'ın klasik formülü; yüksek parlaklıkları yumuşak bir eğriyle \(1.0\)'a yaklaştırır:
2. Pozlama (Exposure) Ton Haritalaması
Fotoğraf makinelerindeki diyafram ve enstantane gibi çalışır:
Sonuç: Karanlık bir tünelden parlak güneşli bir güne çıktığınızda gözün veya kameranın ışığa alışması gibi dinamik pozlama efektleri uygulayabilirsiniz!