Phongの反射モデル

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

Phongの反射モデル(Phongのはんしゃモデル)とは、3次元コンピュータグラフィックスにおいて、モデリングされた面上の点に影をつけるための照明と陰影モデルである。

このモデルはユタ大学理学博士である、Bui Tuong Phongによって開発され、1973年に"Illumination for Computer Generated Pictures"の題で学位論文として発表された。 この中には、多角形でモデリングされた表面からラスタライズされた個々のピクセルに対して、補間計算を行う方法が論述されていた。この補間技術は、他の反射モデルが使われている今でさえも、Phongシェーディングと知られている。

Phongの反射モデルでは、一般的なレンダリング方程式をより単純化して扱うことができる。このモデルでは、表面上の点における陰影を決定する際に、次のような単純化ができる利点がある。

  1. このモデルは、局所的な反射モデルである。すなわち、ラジオシティのようなレイトレーシングで行うような二次反射を計算する必要はない。反射した光の減衰を補正するために、外部の環境光の項をレンダリングする際に加えている。
  2. 表面からの反射を3つの項目、すなわち鏡面反射拡散反射環境反射に分けている。

最初に、そのシーンにおいて個々の光源を用いてレンダリングするために、i_si_dの項を定義する。これらは、個々の光源における鏡面反射および拡散反射の項の彩度(普通はRGB値になる)である。1個のi_aの項は環境光を設定する。この項は時々、各々の光源の影響を足し合わせたものとして計算される。

次に、それぞれの材質(普通、あるシーンにおいて物体面に対して1対1で設定される)について、以下のものを定義する。

k_s: 鏡面反射係数。入射光に対する鏡面反射率
k_d: 拡散反射係数。入射光に対する拡散反射率(Lambert反射)
k_a: 環境反射係数。そのシーンをレンダリングした際のすべての点にもたらされる環境反射係数。
\alpha: その材質における光沢度であり、光沢のある点から反射する光がどのくらいの割合で反射するかを決める。

さらに、すべての光源群の光を定義する。物体表面上の点からそれぞれの光源への方向ベクトルをLと置き、この表面上の点における法線N、面上のその点において光線が完全に反射される方向をRとする。そして、(仮想的なカメラのような)視点に向かう方向をVとする。

それぞれの表面上の点I_pにおける陰影は、次の方程式を用いて計算できる。これがPhongの反射モデルである。

I_p = k_a i_a + \sum_\mathrm{lights} (k_d (L \cdot N) i_d + k_s (R \cdot V)^{\alpha}i_s).

拡散反射光の項は視点(V)の方向には向かっていない。拡散反射光の項はその点から視点方向を含むすべての方向に等しく存在するからである。しかしながら、反射ベクトルRが視点ベクトルVの向きに非常に近い場合のみ、鏡面反射光の項が大きくなる。これは、RVの間の角度のcos、つまりRVのそれぞれの正規化ベクトルの内積\alphaのべき乗で効いてくるからである。この時、\alphaが大きいならば、ほとんど鏡のように反射するように表現される。これは、反射時に視点が反射ベクトルに合っていないならば、cosの高次のべき乗は非常に速く0に収束するので、鏡面反射光は非常に小さくなる。

RGB値として色を表現しているときには、この方程式は普通R、G、Bの輝度それぞれについて個々に計算される。

Phongの反射は経験に基づくモデルであって、光の相互作用の物理的な説明に基づくものではなく、非公式な観察によるものである。Phongはとても輝いている表面は、鏡面ハイライトが小さくその輝度がすぐ落ち込んでいて、一方輝きが鈍い表面は鏡面ハイライトが大きく、その輝度の落ち込みがよりゆるやかであることに気がついた。

この方程式をグラフィカルに表現すると以下のようになる。

Phong方程式を説明した絵図

環境反射光拡散反射光の色は同じである。環境反射の項は均一であるのに対し、拡散反射の項の輝度は表面の方向によって値が変わることに注意すること。鏡面反射光の色は白色で、表面に当たった光のすべてをほとんど反射するが、それが照らすハイライトは非常に狭い。

Phongシェーディング補間法[編集]

表面上の点で色を計算する反射モデルに沿って、Bui Tuong Phongはまた、表面を構成するラスタライズされた三角形にあるピクセルすべてにおいて、色を計算することで補間する方法も開発した。このトピックは時々Phongシェーディングという用語として一緒に扱われる。しかしPhongシェーディングはあくまで補間のための方法にのみ使われるものである。

関連項目[編集]