減衰とスポットライト係数 (Direct3D 9)

全体照明の方程式の拡散光および反射光コンポーネントには、光の減衰とスポットライト コーンを表す項が含まれています。 ここでは、これらの項について説明します。

減衰

ライトの減衰は、ライトの種類、およびライトと頂点間の距離に依存します。 減衰を計算するには、次の式のいずれかを使用します。

Atten = 1/( att0i + att1i * d + att2i * d²)

各値の説明:

パラメーター 既定値 説明 Range
att0i 0.0 FLOAT 一定減衰係数 0 ~正の無限大
att1i 0.0 FLOAT 線形減衰係数 0 ~正の無限大
att2i 0.0 FLOAT 2 次減衰係数 0 ~正の無限大
d 該当なし FLOAT 頂点の位置からライトの位置までの距離 該当なし

 

  • Atten = 1 (指向性ライトの場合)
  • Atten = 0 (ライトと頂点との距離がライトの範囲を超えている場合)

att0、att1、att2 の値は、 D3DLIGHT9 の減衰 0、減衰 1、および減衰 2 メンバーで指定されます。

ライトと頂点との距離は常に正の値になります。

d = | Ldir |

各値の説明:

パラメーター 既定値 説明
Ldir 該当なし D3DVECTOR 頂点の位置からライトの位置への方向ベクトル

 

d がライトの範囲 ( つまり D3DLIGHT9 構造体の Range メンバー) より大きい場合、Direct3D はそれ以上減衰計算を行いません。また、ライトから頂点への効果は適用されません。

減衰定数は、式の中では係数として機能します。これらに簡単な調整を加えることで、さまざまな減衰カーブを生成できます。 Attenuation1 を 1.0 に設定すると、範囲によって制限されたまま、減衰しないライトを作成できます。いろいろな値を試して、さまざまな減衰エフェクトを生成してください。

ライトの最大範囲における減衰は、0.0 ではありません。 ライトがライトの範囲内になったときに突然表示されるのを防ぐために、アプリケーションでライトの範囲を増やすことができます。 また、ライトの範囲で減衰係数が 0.0 に近づくように、アプリケーションで減衰定数を設定することもできます。 減衰値をライトの色の赤、緑、および青の成分で乗算することにより、ライトの強度は、ライトが頂点まで移動する距離の係数として増減されます。

スポットライト係数

次の式は、スポット ライト係数を指定します。

スポットライト係数の式

パラメーター 既定値 説明 Range
rhoi 該当なし FLOAT スポットライト i のコサイン (角度) 該当なし
phii 0.0 FLOAT スポットライトの半影の角度 (ラジアン) [thetai, pi)
thetai 0.0 FLOAT スポットライトの本影の角度 (ラジアン) [0, pi)
falloff 0.0 FLOAT 減衰係数 (-infinity, +infinity)

 

各値の説明:

rho = norm(Ldcs).norm(Ldir)

および

パラメーター 既定値 説明
Ldcs 該当なし D3DVECTOR カメラ空間でのライトの負の方向
Ldir 該当なし D3DVECTOR 頂点の位置からライトの位置への方向ベクトル

 

光の減衰を計算した後、Direct3D では、該当する場合はスポットライト効果、サーフェスから光が反射する角度、その頂点の拡散成分と反射成分を計算するための現在のマテリアルの反射率も考慮されます。 詳細については、「 SpotLight」を参照してください。

照明の計算