Phongの反射モデル
From Wikipedia, the free encyclopedia
Phongの反射モデル(フォンのはんしゃモデル; 英: Phong reflection model)とは、3次元コンピュータグラフィックスにおいて、モデリングされた面上の点に影をつけるための照明と陰影(シェーディング)モデルである。Phong照明、Phongライティングとも。
概要
定義
解説
Phongの反射モデルでは、一般的なレンダリング方程式をより単純化して扱うことができる。このモデルでは、面上の点における陰影を決定する際に、次のような単純化ができる利点がある。
- このモデルは、「局所的な」反射モデルである。すなわち、ラジオシティのようなレイトレーシングで行うような二次反射を計算する必要はない。反射した光の減衰を補正するために、環境光の項をレンダリングする際に加えている。
- 反射を鏡面反射成分・拡散反射成分・環境反射成分の和で表現
この方程式をグラフィカルに表現すると以下のようになる。
鏡面反射成分
Phongの反射モデルにおける鏡面反射成分(スペキュラ、specular)は鏡面反射に類する成分である。
鏡面反射成分は鏡面反射の数学的モデルではない。これは鏡面ハイライトの経験的モデルであり[1]、Phong の「光沢の強い表面はハイライト中心から輝度が急激に落ち、面積が小さい」「光沢の鈍い表面はハイライト中心から輝度がゆるやかに落ち、面積が大きい」という観察を上手く再現するように設計されている。
この成分の挙動は光沢度 で強く制御される。 を取る反射ベクトル と視点ベクトル の内積が のべき乗で減衰することで、鏡面反射が見える角度()に近い条件でのみ に応じた急激さでハイライトが発生する。なお、光沢度 と素材の物理的特性の対応は考慮せずモデル化されており、値は都度経験的に設定される[2]。
拡散反射成分
Phongの反射モデルにおける拡散反射成分(ディフューズ、diffuse)は拡散反射を表現する成分である。
環境反射成分
Phongの反射モデルにおける環境反射成分(アンビエント、ambient)は環境光の反射を表現する成分である。
環境反射成分はランバート反射でモデル化されている。ただし環境光は全方向にあたる、すなわち常に反射面へ垂直に入射する。このため環境光の方向ベクトル で表現すると が常に成立し、環境反射成分は環境光の単なる重み付けになる。
色
環境反射光と拡散反射光の色は同じである。環境反射の項は均一であるのに対し、拡散反射の項の輝度は表面の方向によって値が変わることに注意すること。鏡面反射光の色は入射光の色と同一である。
色をRGB値で表現する場合、この式はR、G、B成分のそれぞれについて別々に計算するのが一般的である[独自研究?]。
メリットとデメリット
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シェーディング」という用語は、あくまで補間のための方法にのみ使われるものである。