フォンシェーディング
フォンシェーディング(英: Phong shading)は、3次元コンピュータグラフィックスにおける陰影計算の補間技法である。フォン補間と呼ばれることもある。ラスタライズされたポリゴン群をまたいだ法線ベクトルの補間によってピクセルの色を推測する技法であり、「ピクセル単位照明」(per-pixel lighting) を実現するための補間技法として利用される。グーローシェーディングやフラットシェーディングなどの他の補間技法との対比で、これを「フォンシェーディング」と呼ぶ。
この技法はユタ大学のブイ・トゥオン・フォンが考案したもので、1973年の博士論文で発表した。また、フォンシェーディングと同時に、フォンはフォン反射モデル(フォン照明モデル)を提唱した。フォン反射モデル自体は、フォンシェーディングだけでなくグーローシェーディングなど他の補間技法とも組み合わせて使うことがある。フォンシェーディングもまた、フォン反射モデル以外の反射モデルと組み合わせて使うこともできる。
概要
[編集]フォンシェーディングはグーローシェーディングより改良されており、滑らかな表面のシェーディングに関して、よりよい近似を提供する。フォンシェーディングは法線ベクトルが連続的に変化すると見なす。フォン補間手法は、フォン反射モデルのように小さい鏡面ハイライトを持つ反射モデルに適用するとき、グーローシェーディングよりも良い結果をもたらす。
グーローシェーディングの大きな問題は鏡面ハイライトが大きなポリゴンの真ん中あたりにあるときに顕著となる。グーローシェーディングではポリゴンの頂点の色を計算し、頂点間を全て補間するため、そのようなハイライトは見えなくなる。フォンシェーディングではこの問題に対処できる。
グーローシェーディングとは異なり、フォンシェーディングではポリゴンの頂点の法線ベクトルからポリゴン内の表面の法線ベクトルを線形補間で求める。シーン上の各ピクセルについてそのようにして法線ベクトルを求め、それぞれに反射モデルを適用してピクセルの色を求める。ピクセル毎に反射モデルの計算をするため、フォンシェーディングはグーローシェーディングよりも計算量が大きくなる。
リアルタイム処理系
[編集]リアルタイム処理系向けの3DCG APIのひとつであるDirect3Dには、固定機能シェーダーによる陰影モードD3DSHADEMODEのひとつとしてD3DSHADE_PHONGが用意されていたが、実装・サポートされることはなかった[1]。
プログラマブルシェーダーをサポートするハードウェアでは、ピクセルシェーダーもしくはフラグメントシェーダーにより実装されたフォンシェーディングを実行することができる。
最近[いつ?]のハードウェアには、ピクセルシェーダーやフラグメントシェーダーを使ってこのアルゴリズムの派生を実装しているものもある[要出典]。これは、法線ベクトルを各ポリゴンの2次色として符号化し、ラスタライザにそれをグーローシェーディングで補間させ、ピクセルシェーダーがそれを法線ベクトルとして解釈して各ピクセルの照明計算を行うという方法である。
フォン反射モデル
[編集]フォン反射は局所的照明 (local illumination) の経験的モデルである。粗い表面のランバート反射と滑らかな表面の鏡面反射を組み合わせて物体表面の反射を表している。これは、滑らかな表面では小さく強い鏡面ハイライトが見られ、鈍い表面ではハイライト部分が大きく徐々に弱まっていくという、フォン自身の定式化されていない観測に基づくものである。この反射モデルには環境光としてのアンビエント項 (ambient term) もあり、シーン全体の弱い散乱光を考慮している。