Phongの反射モデル

Phongの反射モデル（フォンのはんしゃモデル; ）とは、3次元コンピュータグラフィックスにおいて、モデリングされた面 (surface) 上の点に影をつけるための照明と陰影（シェーディング）モデルである。Phong照明、Phongライティングとも。
このモデルはユタ大学の理学博士である、によって開発され、1973年に"Illumination for Computer Generated Pictures"の題で学位論文として発表された。併せてこの論文中には、多角形面モデルからラスタライズされた個々のピクセルに対して、補間計算を行う方法も論述されていた。この補間技術は後述するようにPhongシェーディングとして知られている。
概要.
Phongの反射モデルでは、一般的なをより単純化して扱うことができる。このモデルでは、面上の点における陰影を決定する際に、次のような単純化ができる利点がある。
最初に、シーンにおける光源ごとに、鏡面反射成分 formula_1 と拡散反射成分 formula_2 を定義する。通常、それぞれRGB値である。また、アンビエント照明の制御は formula_3 でなされ、全ての光源の影響の総和として計算されることもある。
次に、それぞれの材質 (material; 普通、あるシーンにおいて物体面に対して1対1で設定される) について、以下のものを定義する。
さらに、すべての光源群の光を定義する。物体表面上の点からそれぞれの光源 (light) への方向ベクトルをformula_8と置き、この表面上の点における法線 (normal) をformula_9、面上のその点において光線が完全に反射 (reflect) される方向をformula_10とする。そして、(仮想的なカメラのような) 視点 (view) に向かう方向をformula_11とする。
表面上の各点における陰影つまり光の強度 formula_12 は、次の方程式を用いて計算できる。これがPhongの反射モデルである。
拡散反射光の項は視点の方向formula_11には影響を受けない。拡散反射光の項はその点から視点方向を含むすべての方向について等しいからである。一方で、反射ベクトルformula_10が視点ベクトルformula_11の向きに非常に近い場合のみ、鏡面反射光の項が大きくなる。これは、formula_10とformula_11の間の角度のコサイン、つまりformula_10とformula_11のそれぞれの正規化ベクトルの内積 (ドット積) に、formula_7のべき乗で効いてくるからである。formula_7が大きければ、ほとんど鏡のように反射するような表現となり、鏡面反射光のハイライト面積は非常に小さくなる。これは、反射時に視点方向が反射ベクトルからずれていれば、コサイン値は1より小さくなり、大きい値でべき乗するとほとんど0に近くなるからである。
色をRGB値で表現する場合、この式はR、G、B成分のそれぞれについて別々に計算するのが一般的である。
Phongの反射は経験に基づくモデルであって、光の相互作用の物理的な説明に基づくものではなく、非公式な観察によるものである。Phongは、光沢の強い表面は鏡面ハイライトが小さく、その輝度がすぐに落ち込んでいること、一方で光沢の鈍い表面は鏡面ハイライトが大きく、その輝度の落ち込みがよりゆるやかであることに気がついた。
この方程式をグラフィカルに表現すると以下のようになる。
環境反射光と拡散反射光の色は同じである。環境反射の項は均一であるのに対し、拡散反射の項の輝度は表面の方向によって値が変わることに注意すること。鏡面反射光の色は白色で、表面に当たった光のすべてをほとんど反射するが、それが照らすハイライトは非常に狭い。
メリットとデメリット.
OpenGLおよびDirect3DといったグラフィックスAPIを用いたリアルタイムレンダリングでは、描画速度などの制約から局所照明 (local illumination) モデルを採用することが多いが、Phong反射モデルはその単純さから計算量もリソース消費量も少なくて済むため、ソフトウェア (CPU) もしくはハードウェア (GPU) による固定機能シェーダーとして標準実装されていた（OpenGL 2.1およびDirect3D 9まで）。ハードウェア性能が向上し、プログラマブルシェーダーが一般化してからも、軽量さからPhong反射モデルが採用されることもある。なお固定機能の廃止されたOpenGL 3.1およびDirect3D 10以降では、Phong反射モデルの実現にはプログラマブルシェーダーが使用される。
一方で、極めて単純化されたおおざっぱな近似モデルであることから、表面下散乱や環境遮蔽といった複雑な拡散反射光や環境光による大域照明 (global illumination) 現象を記述することはできない。
Phongシェーディング補間法.
面上の点で色を計算する反射モデルに加えて、Phongはまた、曲面のパッチを表現するラスタライズされた三角形において、ピクセルごとの色を計算するための補間方法も開発した。これらの反射モデルと補間法のトピックは時々「Phongシェーディング」という用語として一緒に扱われる。しかし「Phongシェーディング」という用語は、あくまで補間のための方法にのみ使われるものである。