2006年度 システム情報科学特別演習(イントロダクトリセミナー)関連技術調査レポート

CGにおける照明のモデル化


中心投影や平行投影により投影された物体は、形状が正しく投影されているだけであって、リアリティのある色や明るさの情報を計算するためには、その陰影を生じる物理現象をモデル化する必要がある。そのためには、照明(光源)をモデル化するだけでなく、物体表面における光の反射、物体内部における光の透過などの物理現象もモデル化することが必要となる。

  1. 光源

光源とは光を放射する領域であり、実世界では自然の光源と人工的な光源に分類できる。自然光源としては太陽が代表的な光源であり、人工光源には電灯や炎などがあげられる。これらの光源から発せられている光はさまざまな波長の光を含む連続した分布となるが、それを計算機内で扱うことは難しいため、計算機内部では光の強さや色をディスプレイの表色系として用いられるRGB表色系で表す。そして光源は、その発光領域に応じて点光源と平行光源に大別できる。
点光源は空間内の一点から全方向に光を放射する光源であり、実際には発光している領域光源にも大きさがあるが、他の物体の大きさに比べて発光領域の十分小さくて無視できるものとする。このような点光源からの光は図1のように広がりながら進む。一方、平行光源は・・・・のうおうに光をある一定の方向にのみ放射する光源で、点光源が無限遠方に存在する場合とみなすことができる。一般に部屋の天井の電球、街路灯などは点光源として扱うことが多く、太陽光線はほぼ平行であることから、太陽は平行光源として扱われる。他にも線光源や面光源、形状を立体光源なども用いられることもあるが、点光源や平行光源に比べて処理が複雑になる。


図1 光源の種類

  • 光の反射、透過、屈折現象
  • このような光源から発せられた光は、物体の表面で反射、透過、屈折などの現象を生じる。この反射や透過の特性は、光源の種類や向き、物体表面の向きや表面の特性、物体の材質、視線の方向によって決まる。実際の空間では物体からの反射光や透過光が他の物体の光源となりうることから、これを綿密に計算することは非常に難しい。そこで、実際の光は次の3つに分類されるとし、これらを合わせることにより物体の表面の色を決定する。
    1:環境光(ambient light)
    2:反射光(reflected light)
     鏡面反射光(specularly reflected light)
     拡散反射光(diffusely reflected light)
    3:透過光(transmitted light)
    以下にそれぞれについて解説する。

    1:環境光

    環境光とは、その空間内に一様に分布する光であり、回折による光、壁や天井、他の物体からの反射光や透過光をすべてまとめたもので、その物体表面の位置や向きに関係なく一定であると考える。

    2:反射光

    反射光とは光源からの光が物体の表面などで反射された光であり、その現象の違いにより、鏡面反射光と拡散反射光に分類できる。鏡面反射光は、図2のように光がいったん物体内部に入り込み、再び物体表面から放射される光であるため、物体自身の色の光が観測される。


    図2 鏡面反射と拡散反射

    3:透過光

    物体が透明または半透明であれば光は通過する。そして、その透過後の光は物体の屈折率の影響により屈折したり、物体が特定の波長を吸収してしまう現象により色の変化を生じる。

    シェーディング(shading)

    光源や物体の材質などをもとにして投影像内の各点の明るさや色を決める手法をシェーディングと呼ぶ。実際の投影面は有限サイズの二次元配列が用いられ、これをフレームバッファ(frame buffer)と呼ぶ。このフレームバッファ内の一点を画素(pixel)と呼び、x軸に平行な画素の集まりを走査線(scanline)と呼ぶ。描画はこの画素単位で行われ、投影像の色や明るさを求めることは、投影像に含まれる各画素における色や明るさを求めることになる。
    物体が多面体である場合、各面の法線はその面上で一定であるから、その色や明るさも場所によらず一定となる。このように多面体の平面を一定の色や明るさで塗りつぶして陰影を表現する方法をコンスタントシェーディング(constant shading)と呼ぶ。曲面で構成されている物体の場合でも、多くの場合近似多面体で表現することが多い。このとき多面体で表現された形状モデルがなめらかな濃淡変化を求める必要があり、これをスムースシェーディング(smooth shading)と呼ぶ。代表的な手法として次の二つがある。
    1:グーローシェーディング(Gouraud shading)
    2:フォンシェーディング(Phong shading)

    グーローシェーディングでは、次のように任意の点の輝度を求める。
    (1) 多面体の各頂点において、その頂点が属する面の法線の平均値をその頂点の法線とする(図3)
    (2) 得られた法線から頂点の輝度を求める。
    (3)頂点の輝度を線形補間して同じ走査線上の異なる稜線上の二点の輝度を求める。
    (4)その走査線上の任意の一点の輝度を、(3)で求めた輝度から線形補間する。


    図3 頂点の法線の計算とグーローシェーディング

    これに対しフォンシェーディングでは次のように計算する(図4)
    (1)頂点が属する面の法線の平均値を計算し、それをその頂点の法線とする。
    (2)同じ走査線上の異なる稜線上の2点の法線を線形補間により求める。
    (3)その走査線上の任意の点の法線を、(2)で求めた法線から線形補間して求める。
    (4)得られた法線により、その点における輝度を計算する。


    図4 フォンシェーディング

    グーローシェーディングでは、多面体の各頂点における法線しか計算しないため、法線の方向に大きく影響を受ける鏡面反射光成分が不自然になることがある。これに対しフォンシェーディングでは各点において法線を求めているため、鏡面反射光成分もより精度よく計算できるが、法線ベクトルの計算に余分な手間がかかる。

    参考文献  
    「マルチメディア処理入門」新田恒雄他/著 朝倉書店


    調査担当: システム統合学研究室 鍋谷 知範 (提出年月日:2006年8月1日)