|目次 または フレームありの目次|



5.5 スムーズ・シェーディング

 物体(特に曲面)上の各点について、その座標値や法線ベクトルを求め、与えられた光源に対する輝度を計算してシェーディングすることは、計算時間の増加を招きます。

曲面を多角形によって近似し、多角形の頂点のみにおいて輝度計算し、多角形内では補間処理により内挿する方法があります。この処理をスムーズ・シェーディング(smooth shading)といいます。また、多角形内の輝度を一定値にしてしまう方法を、コンスタントシェーディングといいます。 この場合、人間には多角形同士の境界での輝度の差が実際より誇張されて感じます。この現象は、マッファバンド効果といわれます。

 スムーズ・シェーディングには次の2つの方法があります。

(1) 輝度の補間

 この方法は、グロー(Gouraud)のスムーズ・シェーディングと呼ばれます。曲面を多角形に分割し、各多角形の各頂点での輝度を求めておき、まず、多角形と走査線との交点(図5.20の点L,R)での輝度を 線形補間によって求め、

図5.20
図5.20: 輝度の補間によるスムーズシェーディング

 次に走査線上の各画素(例えば、図のP)での輝度を線形補間により求めます。すなわち、多角形(例えば頂点 A, B, C,Dよりなる多角形)内部における点Pの輝度は次式によって求められます。
  (5.11)
  (5.12)

 ここで、
,,,,およびはそれぞれ点A,B,C,D,LおよびRにおける輝度です。
図5.21
図5.21: 法線ベクトルの計算

 なお、多角形の頂点における法線ベクトルは、その頂点(図5.21の点P)を含む多角形の法線ベクトルの平均値を用います。

この方法では、輝度のみ補間することから、ハイライトの計算が正しくできない欠点があります。

たとえば、多角形の内部にハイライトがある場合、頂点のみで輝度を求めた場合いずれの頂点もハイライトは求まっていないのでそれらから補間したのでは、当然ハイライトは生じません。また、補間は線形補間であるため、多角形同士の境界部ではスムーズに明るさが変化するのではなく、折れ線的に変化します。

すなわち、マッファバンド効果は減少するが、完全にスムーズになるとは限りません。

(2) 法線ベクトルの補間

 この方法は、フォン(Phong)のスムーズ・シェーディングと呼ばれます。

図5.22
図5.22: 法線ベクトルの補間によるスムーズシェーディング

 曲面を多角形に分割し、各多角形の各頂点での法線ベクトルを求めておき (図5.21参照)、まず、多角形と走査線との交点 (図5.22の点L,R)での法線ベクトルを線形補間により求め、次に走査線上の各画素(例えば、図のP)での法線ベクトルを線形補間により求めます。
 すなわち、多角形内の点Pでの法線ベクトルは、式(1)と同様な方法によって求まります。
 ここで、
,,,,,,,,で置き換えればればよいです。
 補間により得られた法線ベクトルと光源の位置から点Pにおける輝度を計算することができます。この方法は、前述の方法と比べてより精度のよい方法であり、ハイライトが計算できます。

 図5.23にコンスタントシェーディングと スムーズシェ−ディングの比較を示します。

図5.23 (a)
(a)constant shading
図5.23 (b)  図5.23 (c)
(b)Gouraud shading        (c)Phong shading
図5.23: スムーズシェーディングの比較例

 なお、図(b)はグローシェーディングで、図(c)は多角形近似しない方法での隠面処理後 フォンシェーディングを施したものです。
ここで、コンスタントシェーディングをした多角形を、Javaで実際に体験してみましょう。



前のページへ

次のページへ