Bloom (Işıma) Efekti
Gerçek dünyada aşırı parlak bir ışık kaynağına (örneğin yanan bir ampule, güneşe veya lazer ışınına) baktığınızda, ışık merceğin içinde kırılarak ışık kaynağının etrafında büyüleyici bir ışık halesi / parlama (Glow / Bloom) oluşturur.
Bloom efekti, oyuncuya sahnedeki nesnelerin gerçekten çok sıcak veya aşırı parlak olduğu hissini aşılar.
Bloom Pipeline Mimarisi
Bloom efekti 4 temel adımdan oluşur:
flowchart LR
A["HDR Sahne Renderı"] --> B["Parlak Alanları Ayır (MRT)"]
B --> C["Gauss Bulanıklığı (Ping-Pong)"]
C --> D["Orijinal Sahne + Bulanık Işıma Toplamı"]
D --> E["Ton Haritalama & Gama"]
1. Çoklu Render Hedefleri (MRT): Parlak Alanları Ayrıştırma
Sahneyi çizerken iki farklı dokuya aynı anda yazarız:
1. FragColor: Tüm sahne,
2. BrightColor: Yalnızca parlaklığı \(1.0\)'ı aşan alanlar!
2. İki Geçişli Gauss Bulanıklaştırma (Two-Pass Gaussian Blur)
2 boyutlu bir Gauss filtresini tek geçişte uygulamak \(O(K^2)\) işlem gerektirir. Ancak Gauss matrisi ayrıştırılabilir (separable) olduğu için: 1. Önce yatayda bulanıklaştırırız (\(O(K)\)), 2. Sonra dikeyde bulanıklaştırırız (\(O(K)\)).
İki adet FBO arasında (Ping-Pong tekniği) bu işlemi 5-10 kez tekrarlarız:
3. Katmanları Birleştirme (Additive Blending)
Son aşamada orijinal sahne ile bulanıklaştırılmış ışıma katmanını toplarız:
| bloom_final.frag | |
|---|---|
Sonuç: Neon lambalar, alevler ve büyülü ışık efektleri ekranınızda adeta parıldayacaktır!