コンピュータグラフィックス 第5回

レンダリング(2)


シェーディング

光源によって照らされた、物体の面の明るさや色を求める際に、 光の物理手な性質や法則をシェーディングモデルに導入することにより、 リアルな画像を生成することができる。

シェーディングの基礎と概要

3次元CGにおいて、光の当たり具合によって濃淡が変化する部分の明るさを 計算して表示することを「シェーディング (shading) 」とよぶ。

他の物体や面によって光が遮られた領域には影 (shadow) ができる。 影を表示するには、影付け (shadowing) の処理が必要となる。


放射量と測光量

光は電磁波であり、エネルギーは放射によって伝播し、波長の違いは色として認識される。 光の物理エネルギーは放射量(radiant quantities)として、 人間の眼が感じる明るさは測光量(luminous quantities)として扱われる。


シェーディングモデル

光源によって照らされた物体を表示するための物理モデルが 「シェーディングモデル(shading model, 照明モデル、ライティングモデルとも言う)」。

光源の種類には平行光線、点光源、線光源、面光源がある。

光と物質の相互作用で光は分類できる。

シェーディングモデルの発展

反射光を拡散反射成分と鏡面反射成分に分けて計算してから加えあわせる方法が 開発され広く利用されている。 より一般的な反射を扱うために、 面の反射特性を表す BRDF (Bidirectional Reflectance Distribution Function: 双方向反射分布関数) を用いたモデルも開発されている。

これらは物体表面や非常に浅い部分からの反射しか扱えなかったが、 サブサーフェススキャッタリング(Subsurface Scattering: 表面下散乱)という、 内部の比較的深い部分で多重散乱した後に表面に出てくる光を精密に モデル化して取り扱う方法(双方向深層散乱反射分布関数を用いる) も開発され、大理石や人間の肌をリアルに 表示できるようになった。


鏡面反射は「フォンのモデル(Phong illumination model)」が開発され、 さらに「ブリンのモデル (Blinn model for specular reflection)」や 「クック・トランスのモデル (Cook-Torrance illumination model)」 が開発された。

環境光

「環境光(ambient light)」とは間接光を非常に大まかに近似したもので、 周囲からくる一様な光である。 環境光に照らされた物体面の反射光の強さ$I$ は $k_a$を環境光に対する反射率、 $I_a$を環境光の強さとすると $I = k_a I_a$ となる。環境光は陰や影の領域にもある程度の明るさを与えるために 用いられる。 間接光を精度良く計算する手法に「ラジオシティ法 」がある。

拡散反射

「拡散反射 (diffuse reflection)」とは、 入射した光が物体内部の浅い部分で多重散乱したあと、表面から放射された 光である。 石膏やチョークの表面での反射のように、どの方向から見ても物体面の 輝度が一定となる反射である。

鏡面反射

「鏡面反射 (specular reflection)」は、物体表面での直接反射によって生じた光である。 金属表面などでは、鏡面反射によりハイライト (highlight)を生じる。 入射角と等しい反射角となる正反射方向に強く反射される。


鏡面反射の計算よく用いられる「フォンのモデル」では、 視点方向と正反射方向のなす角 γ により、鏡面反射成分を cos n γ で減少させる。 入射光の強さを $I_i$, 視線方向と正反射光のなす角を γ , 面の鏡面反射率を $W(\alpha)$ とすると、 鏡面反射光の強さ $I$ は $I = W(\alpha) I_i \cos^{n}\gamma$ となる。 入射光の波長によって鏡面反射律は異なるが、通常は一定値として計算することが多い。

より精密なモデルである 「ブリンのモデル」では、「面を微小な完全鏡面反射面の集まりと考えて、その微小な面の 法線を特定の分布にしたがって設定する」。 さらに改良した 「クック・トランスのモデル」では、 反射率が光の波長に依存することや、反射率分布の入射角に依存することを 考慮して計算する。

完全鏡面反射・透過・屈折

鏡のような完全鏡面反射特性をもつ物体では正反射方向の物体が表面に映り込む。 透明や半透明な物体では、光が透過してその先の物体が映り込む。 このような物体の計算にはレイトレーシング法が用いられる。


散乱・減衰

光が通過する媒体に散乱粒子が含まれる場合には、散乱 (scanttering)や 減衰 (attenuation) が起きる。3次元空間内での光の散乱・減衰を 物理的なモデルに基づいて表現するためには、レイ・トレーシング法を 拡張した「レイマーチング法 (ray marching algorithm)」が用いられる。 3次元空間中を進むレイに沿って微小距離ずつ移動しながら、レイ上の 点における散乱光を求め、視点に到達するまでの減衰を考慮して散乱光を 計算する。


スムーズシェーディング

曲面を小さなポリゴンで近似して表示を行うことが多い。


影付け

光源からの光が物体に当たると、その物体の背後に影ができる。 このような影の領域を求める処理を影付け (shadowing) という。

本影と半影

平行光線や点光源によって生じる影は、影の領域がはっきりわかる本影となる。 面光源のような大きさを持つ光源から生じる影は、その一部に光が届く半影となる。


平行光線・点光源による影


大きさを持つ光源による影



大域照明モデル

写実的な下像を作成するためには、間接光も考慮してシェーディングを行う 大域照明モデルが必要となる。

ラジオシティ法

間接光は場所と入射方向によりその強度が異なる。

ラジオシティ法は、相互反射を考慮することにより写実的な画像を 生成することができ、生成された画像の特徴は次の通り。

シーンを構成するポリゴンを小さなパッチに分割し、各パッチのラジオシティ (放射発散度)を未知数としたラジオシティ方程式(連立1次方程式)を作成する。 そしえ反復法を用いてこのラジオシティ方程式を解くことにより各パッチから 放射されるラジオシティを求める。パッチ分割を行いラジオシティ方程式を 作成する際には、パッチ同士のラジオシティの授受の割合を表す フォームファクタ(form factor)を計算する必要がある。


パッチ分割後の2つのパッチの関係が図4.87である。 パッチ$i$ のラジオシティ $B_i$ は, 「パッチ自体の発光成分 $E_i$ と 「ほかの全てのパッチから放射されたラジオシティを反射した成分」 から構成される。

$n$は分割されたパッチ数、$\rho_i$ はパッチiの反射率、 $F_{ij}$はパッチ$i$からパッチ$j$へのフォームファクタとして、 パッチ$i$のラジオシティ $B_i$は $\displaystyle B_i = E_i - \rho_i \Sigma^n_{j=1} F_{ij} B_j$ となる。

各パッチに対して $B_i$ を作成し、 それらの式を行列形式で表すと式(4.50)

フォトンマップ法

拡散反射環境下では、 ラジオシティ法は光の相互反射を考慮したリアルな画像を生成できる方法である。 しかし、鏡面反射をもつ物体や屈折の生じる透明な物体がシーンに含まれている 場合に生じる集光減少(コースティック、caustic) を表現することは困難であった。

レイトレーシング法を拡張したフォトンマップ法(photon map algorithm) は 拡散反射法での光の相互反射とあわせてこのような集光減少を統一的に取り扱う ことができる。

フォトンマップ法は、処理の効率化のために、レンダリングの際に影響を 持つ光の成分により3種類のフォトンマップを使用する。

フォトンマップ法では、2段階のレイトレーシングを行うことにより、光の 相互反射を考慮したレンダリングを行う。

  1. 第1段階:フォトンマップの構築
  2. 光源からフォトンを放出し、フォトンのトレースを行う。 鏡面反射成分をもたない面にフォトンが到達したときは、フォトンマップに そのフォトンの情報を登録する。 基本的に再帰処理をともなうレイトレーシング法でフォトンの追跡を行うが、 物体表面にあたった場合にフォトンを反射・屈折させてトレースを繰り返すか どうかは確率的に決定される。

  3. 第2段階:フォトンマップを利用した描画
  4. 分散レイトレーシングを用いて、フォトンマップの情報を参照しながら レンダリングを行う。


マッピング

3次元物体面や曲面上にさまざまな模様をマッピング(写像)し、それらがちょうど はりつけられたように表示を行う方法である。

マッピングの概要

物体の表面の細かな凹凸や模様を直接ポリゴンでモデル化するには手間が大きすぎるので、 マッピングにより3次元物体と画像などを対応づけて、模様や凹凸の効果を付加する。

テクスチャマッピング

「テクスチャ (texture)」とははりつける模様や画像のことであり、 2次元テクスチャをはりつけて表示することをテクスチャマッピング (texture mapping) という。


物体面上の各点と、テクスチャ上の点を対応づける方法は以下の通り。


テクスチャマッピングではアンチエイリアシング (anti-aliasing) に注意する必要がある。



バンプマッピング

模様の代わりに凹凸を物体表面上にマッピングする。 物体面上の計算点における高さをテクスチャの濃淡の変化に応じて法線方向に微小距離 だけ移動させたと仮定して、その点での法線ベクトルを求める。 この法線ベクトルを用いてシェーディングを行うことにより物体表面の凹凸を 表現する。


環境マッピング

反射による周囲の映り込みをマッピングによって擬似的に表現する手法。 リフレクションマッピング (reflection mapping) ともよぶ。 表示する物体を取り囲むように半径の大きい球や立方体を仮想的に設置して、 その内面に周囲の環境が映り込んだテクスチャをはりつける。 そして、物体面上で反射したレイと仮想球との交点を求め、 その点でのテクスチャの色を求める。

レイトレーシングと比べるとすくない計算量で反射を擬似的に表現できるが、 1回の反射しか扱うことができないので物体同士が映り込むようなシーンは 扱うことができない。


ソリッドテクスチャ

大理石や木材のテクスチャを物体の各面に貼りつけたとき、 面の境界部分で模様をあわせるのは困難である。 そこで、ソリッドテクスチャでは 3次元空間でテクスチャと定義しておき、それをさまざまな形状に 切り出して表示する。