Gölge Haritalama (Shadow Mapping)
Gölgeler, 3 boyutlu bir sahneye gerçekçilik ve derinlik kazandıran en önemli görsel unsurdur. Gölgeler olmadan nesnelerin havada mı uçtuğu yoksa zemine mi bastığı anlaşılamaz.
Gerçek zamanlı grafiklerde gölge üretmenin en popüler ve standart algoritması Gölge Haritalama (Shadow Mapping) tekniğidir.
Gölge Haritalama Algoritmasının Mantığı
Algoritma çok temel bir sezgiye dayanır: Eğer bir nokta ışık kaynağının görüş alanındaysa aydınlıktır; eğer ışık ile o nokta arasında başka bir nesne varsa gölgededir!
Bunu tespit etmek için render işlemini iki geçişte (two-pass) yaparız:

- Geçiş 1 (Derinlik Haritası / Depth Map):
- Kamerayı ışık kaynağının yerine koyarız.
- Sahneyi yalnızca derinlik tamponuna (Z-buffer) çizeriz. Renk çıktısına ihtiyaç yoktur.
-
Oluşan dokuya Gölge Haritası (Shadow Map) denir. Bu harita, ışıktan görünen en yakın yüzeylerin mesafesini saklar.
-
Geçiş 2 (Sahne Renderı):
- Sahneyi normal oyuncu kamerasından çizeriz.
- Her bir piksel için, o pikselin dünya koordinatını ışık uzayına projekte ederiz.
- Pikselin ışığa olan mesafesi (\(z_{\text{current}}\)), gölge haritasındaki en yakın mesafeden (\(z_{\text{closest}}\)) büyükse, araya başka bir nesne girmiş demektir: Piksel gölgededir!
1. Geçiş: Derinlik FBO'su Kurulumu
Yalnızca derinlik bilgisi tutan bir Framebuffer (FBO) oluşturalım:
2. Geçiş: Fragment Shader'da Gölge Testi ve Gölge Aknesi Çözümü
Işık uzayındaki koordinatları \([-1, 1]\) aralığından \([0, 1]\) doku aralığına çevirip derinlik testi yaparız:
[!TIP] PCF (Percentage Closer Filtering): Gölge haritasından tek bir piksel okumak kenarlarda tırtıklı, pikselli gölgelere yol açar. Komşu 9 pikseli (\(3 \times 3\)) örnekleyip ortalamasını aldığımızda harika, yumuşak gölge sınırları elde ederiz!