ライティングにおける数学的計算

ライティングにおける数学的計算

Microsoft® Direct3D® のライティング モデルは、アンビエント ライト、ディフューズ ライト、スペキュラ ライト、エミッション ライトを対象とするものである。広範なライティング状況に対応できる十分な柔軟性を備えている。シーン内の光の総量は、グローバル イルミネーションと呼ばれ、次の方程式を使って計算する。

グローバル イルミネーション = アンビエント ライト + ディフューズ ライト + スペキュラ ライト + エミッション ライト

アンビエント ライトは均一なライティングである。あらゆる方向に均一で、オブジェクトのすべてのピクセルに同じ色を付ける。短時間で計算できるが、オブジェクトは平坦でリアルに見えない。Direct3D によるアンビエント ライトの計算方法については、「アンビエント ライト」を参照すること。

ディフューズ ライトは、ライトの方向とオブジェクトのサーフェイス法線の両方に依存する。ライトの方向と、サーフェイスの法線ベクトルの変化に伴い、オブジェクトのサーフェイス上で変化する。ディフューズ ライトは、オブジェクトの頂点ごとに異なるため計算に時間がかかるが、使用するとオブジェクトに陰影が生まれ、3 次元 (3D) の奥行きが出るという利点がある。Direct3D によるディフューズ ライトの計算方法については、「ディフューズ ライト」を参照すること。

スペキュラ ライトは、オブジェクトのサーフェイスに光が当たり、カメラに向かって反射するときに生まれる明るい スペキュラ ハイライトを識別する。ディフューズ ライトより強いが、オブジェクトのサーフェイス上でより急激に弱まる。スペキュラ ライトは、ディフューズ ライトより計算に時間がかかるが、使用するとサーフェイスをより繊細に表現できるという利点がある。Direct3D によるスペキュラ ライトの計算方法については、「スペキュラ ライト」を参照すること。

エミッション ライトは、輝きなど、オブジェクトが放射する光である。Direct3D によるエミッション ライトの計算方法については、「エミッション ライト」を参照すること。

3D シーンにこれらの種類のライティングをそれぞれ適用して、リアルなライティングを実現できる。さらにリアルなライティング エフェクトを実現するためには、ライトを追加する。ただし、その場合、シーンのレンダリングに時間がかかるようになる。デザイナが求めるエフェクトをすべて実現するため、一部のゲームでは通常利用可能な範囲を超えて CPU を使う。この場合、通常、テクスチャ マップを使うと同時に、ライティング マップと環境マップを使ってシーンにライティングを加えることにより、ライティング計算の数を最小限に抑える。

ライティングはカメラ空間で計算される。ライティング トランスフォームの計算方法については、「カメラ空間トランスフォーム」を参照すること。特殊な条件が存在する場合は、モデル空間で最適なライティングを計算できる。たとえば、法線ベクトルが常に正規化される (D3DRS_NORMALIZENORMALS が True である)、頂点ブレンディングが必要ではない、トランスフォーム行列が正射影行列であるなどの場合である。

アンビエント ライト、ディフューズ ライト、スペキュラ ライトの値は、指定したライトの減衰およびスポットライト係数の影響を受ける場合がある。アンビエント、エミッション、およびディフューズ成分について計算された値は、ディフューズ出力頂点色に格納される。これら両方に対する項は、ディフューズ方程式とスペキュラ方程式に含まれている。詳細については、「減衰とスポットライト係数」を参照すること。