次の方法で共有


減衰とスポットライト係数

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

減衰

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

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

各値の説明:

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

 

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

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

d = | Ldir |

各値の説明:

パラメーター 既定値 説明
Ldir 該当なし 3D ベクトル (x、y、z 浮動小数点値) 頂点の位置からライトの位置への方向ベクトル

 

d がライトの範囲を超えると、Direct3D はそれ以上減衰を計算せず、ライトから頂点へのエフェクトも適用しなくなります。

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

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

スポットライト係数

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

スポットライト係数の式

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

 

各値の説明:

rho = norm(Ldcs).norm(Ldir)

および

パラメーター 既定値 説明
Ldcs 該当なし 3D ベクトル (x、y、z 浮動小数点値) カメラ空間でのライトの負の方向
Ldir 該当なし 3D ベクトル (x、y、z 浮動小数点値) 頂点の位置からライトの位置への方向ベクトル

 

ライトの減衰を計算した後、Direct3D は、スポットライトのエフェクト (適用可能な場合)、サーフェスからのライトの反射角度、および現在のマテリアルの反射率も考慮して、頂点のディフューズ成分とスペキュラ成分を計算します。 詳しくは、「ライトの種類」の「スポットライト」をご覧ください。

光源の計算