Phongの反射モデル

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

概要

[編集]

Phongの反射モデルは環境光反射・拡散反射鏡面反射の和として定義される(⇒ #定義)。環境光反射は入射光の重み付けで、拡散反射成分はランバート反射で、鏡面反射は経験的な式でモデル化されている(⇒ #解説)。このモデルはユタ大学理学博士である、ブイ・トゥオン・フォン英語版によって開発され、1973年に"Illumination for Computer Generated Pictures"の題で学位論文として発表された。

上記論文ではポリゴンメッシュモデルのシェーディングにおける法線ベクトル補完手法も提案されている。これはPhongシェーディングとして知られる。

定義

[編集]

光源・反射面(点)・撮像面(点)が配置された3次元空間について考える。

以下のように光源を定義する:

  • : 反射面から光源への方向ベクトル
  • : 入射光強度の鏡面反射成分
  • : 入射光強度の拡散反射成分
  • : 環境光強度

以下のように反射面(点)を定義する:

  • : 反射面の法線ベクトル
  • : 鏡面反射係数
  • : 拡散反射係数
  • : 環境反射係数
  • : 光沢度 (shininess)
  • : 面上のその点において光線が完全に反射される方向

以下のように撮像面(点)と出力を定義する:

  • : 反射面から視点への方向ベクトル
  • : 反射光強度

これらに基づき、Phongの反射モデルは以下の式で定義される:

複数光源を扱う場合、光源の種類に応じた成分[注 1]を単に加算する。

解説

[編集]

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

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

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

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シェーディング」という用語は、あくまで補間のための方法にのみ使われるものである。

脚注

[編集]

注釈

[編集]
  1. ^ 環境光源なら第一項のみ、それ以外なら第二項と第三項を足す。

出典

[編集]
  1. ^ "cosine law .. this shading offers only a very rough approximation ... it does not allow for any of the specular properties of the material, i.e. the ability of the material to generate highlights by reflection" Phong 1975, pp. 312–313 より引用。
  2. ^ "W(i) and the power n express the specular reflection characteristics of a material. ... These numbers are empirically adjusted ... no physical justifications are made." Phong 1975, p. 315 より引用。

参考文献

[編集]
  • Phong, Bui Tuong (1975). "Illumination for computer generated pictures". Communications of the ACM. 18 (6): 311–317. doi:10.1145/360825.360839

関連項目

[編集]