Microsoft DirectX 8.0 (Visual Basic) |
Microsoft® Direct3D® では、ライトで照らされた頂点と光源の間の距離を、ライトの位置座標と頂点の間のベクトルのマグニチュードによって決定する。これを次の公式で表す。
この公式では、D は計算する距離、V はライトで照らされた頂点の位置座標、L は光源の位置座標である。D がライトの範囲 (D3DLIGHT8 型の Range メンバ) より大きい場合、Direct3D はそれ以上減衰計算を実行せず、ライティング エフェクトを頂点に適用しなくなる。距離がライティングの範囲内にある場合は、Direct3D は以下の公式を適用して、距離の増加に伴うポイント ライトおよびスポットライトのライトの減衰を計算する。ディレクショナル ライトは減衰しない。
この減衰公式では、A は計算した全減衰、D は光源から頂点までの距離である。attenuation0、attenuation1、および attenuation2 の値は、ライト オブジェクトの D3DLIGHT8 型のメンバによって指定される、ライティングの減衰定数である。対応するメンバはそれぞれ、Attenuation0、Attenuation1、および Attenuation2 である。
減衰定数は公式では係数になる。これらの係数に簡単な調整を加えることで、さまざまな減衰カーブを生成できる。Attenuation0 を 1.0 に設定して、減衰しない光を作成できる (ただし、範囲による制限がある)。また、いろいろな値を試してみて、さまざまな減衰エフェクトを出すことができる。
ライティングの最大範囲における減衰は 0.0 ではない。ライティングの範囲内でライティングが突然現れるのを防止するために、アプリケーションではライティングの範囲を増やすことができる。また、アプリケーションで、ライティング範囲における減衰係数が 0.0 に近づくように減衰定数を設定できる。減衰値をライティングの色の赤、緑、および青成分で乗算して、ライティングの強度を光が頂点まで進む距離の係数として定めることができる。
ライティング減衰を計算した後、Direct3D では、スポットライト エフェクト (適用する場合)、サーフェスからの光の反射角度、および現在のマテリアルの反射率を考慮して、その頂点に対するディフューズ成分とスペキュラ成分を算出する。詳細については、「スポットライト フォールオフ モデル」および「反射率モデル」を参照すること。