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