Görüntü Tabanlı Aydınlatma (IBL) - Yaygın Işınım (Diffuse Irradiance)
Önceki bölümde ortam ışığını sabit bir renkle (vec3(0.03)) geçiştirdik. Ancak gerçek dünyada bir nesne, içinde bulunduğu odanın, gökyüzünün ve çevresindeki tüm nesnelerin yaydığı ışıkla aydınlanır.
Görüntü Tabanlı Aydınlatma (Image Based Lighting - IBL), sahneyi çevreleyen \(360^\circ\) yüksek dinamik aralıklı bir çevre görselini (HDRI panorama) devasa bir ışık kaynağı olarak kullanma tekniğidir!
Yaygın Işınım (Diffuse Irradiance) Mantığı
Bir yüzey noktası \(\mathbf{P}\), yüzey normali \(\mathbf{N}\) etrafındaki tüm yarıküreden (hemisphere) gelen ışığı toplar:
Bu integrali her piksel için gerçek zamanlı hesaplamak binlerce doku okuması gerektirir ve sistemi dondurur.
Bunun yerine integrali önceden hesaplarız (Pre-computation / Convolution): Çevre haritasını alıp yarıküre boyunca bulanıklaştırarak her pikseline o yöndeki ortalama gelen ışığı (Irradiance) yazarız!

HDRI Eşdikdörtgen Haritayı Küp Haritasına Çevirme
İnternetten indirilen .hdr dosyaları düz 2B eşdikdörtgen (equirectangular) formattadır. Bunu OpenGL küp haritasına çevirmek için bir küp çizer ve küpün içine kamera koyarak 6 yöne render alırız:
| equirectangular_to_cubemap.frag | |
|---|---|
Kıvrım (Convolution) Shader'ı
Yarıküre üzerinde Riemann toplamı ile küp haritasını evriştiririz (convolve):
Oluşan bu Yaygın Işınım Haritasını (Irradiance Map) kullanarak artık PBR shader'ında ortam aydınlatmasını tek satırda hesaplayabiliriz: