Blinn-Phong Aydınlatma Modeli
Temel aydınlatma bölümünde öğrendiğimiz klasik Phong aydınlatma modeli, bilgisayar grafiklerinin ilk dönemlerinde gerçekçi ışık simülasyonu için harika bir yaklaşımdı. Ancak belirli bakış açılarında, özellikle de yüzey pürüzlülüğü düşük ve bakış açısı yatık olduğunda, parlama (specular) bileşeninde ani ve rahatsız edici ışık kopmaları (cutoff) meydana gelir.
Bu sorunu çözmek için James F. Blinn tarafından 1977 yılında geliştirilen Blinn-Phong modeli, günümüzde OpenGL ve DirectX uygulamalarında standart hale gelmiştir.
Phong Modelindeki Sorun Nedir?
Klasik Phong modelinde speküler parlama, yansıyan ışık vektörü \(\mathbf{R}\) ile kameraya bakan görüş vektörü \(\mathbf{V}\) arasındaki açı (\(\theta\)) üzerinden hesaplanır:
Eğer bakış vektörü ile yansıma vektörü arasındaki açı \(90^\circ\)'yi aşarsa, nokta çarpımı negatif olur (\(\mathbf{R} \cdot \mathbf{V} < 0\)) ve speküler katkı sıfıra eşitlenir (max(dot(R, V), 0.0)).
Bu durum, özellikle ışık kaynağı nesneye çok yakınken veya yüzey parlaklık üssü (\(\alpha\)) küçükken, parlamanın bir anda bıçakla kesilmiş gibi yok olmasına neden olur!
Blinn-Phong ve Yarıvektör (Halfway Vector)
Blinn-Phong modeli bu problemi, yansıyan ışın yerine Yarıvektör (Halfway Vector - \(\mathbf{H}\)) kavramını kullanarak çözer.
Yarıvektör, ışık yönü \(\mathbf{L}\) ile bakış yönü \(\mathbf{V}\) arasındaki açının tam ortasını gösteren birim vektördür:

Yarıvektör \(\mathbf{H}\) ile yüzey normali \(\mathbf{N}\) birbirine ne kadar yakınsa, kameraya yansıyan ışık miktarı o kadar fazladır! Speküler denklemimiz şuna dönüşür:
\(\mathbf{N}\) ile \(\mathbf{H}\) arasındaki açı hiçbir zaman \(90^\circ\)'yi aşmayacağı için, klasik Phong modelindeki o çirkin parlama kopmaları tamamen yok olur!
GLSL Fragment Shader Uygulaması
Klasik Phong ile Blinn-Phong arasında geçiş yapabilen modern bir fragment shader:
[!NOTE] Parlaklık Üssü (Shininess) Farkı: \(\mathbf{N}\) ile \(\mathbf{H}\) arasındaki açı, \(\mathbf{R}\) ile \(\mathbf{V}\) arasındaki açının yaklaşık yarısı kadardır. Bu yüzden klasik Phong ile aynı boyutta bir parlama elde etmek için Blinn-Phong'da üs değerini genellikle 2 ila 4 kat daha yüksek seçeriz (örneğin Phong için 8 ise, Blinn-Phong için 32).