減衰とスポットライト係数 (Direct3D 9)
グローバル 照明方程式の拡散光および反射照明コンポーネントには、光の減衰とスポットライト コーンを表す用語が含まれています。 これらの用語については、以下で説明します。
減衰
ライトの減衰は、ライトの種類と、ライトと頂点の位置の間の距離によって異なります。 減衰を計算するには、次のいずれかの式を使用します。
Atten = 1/( att0i + att1i * d + att2i * d²)
どこ:
パラメーター | 既定値 | 種類 | 形容 | 範囲 |
---|---|---|---|---|
att0i | 0.0 | 浮く | 定数減衰係数 | 0 ~ +無限大 |
att1i | 0.0 | 浮く | 線形減衰係数 | 0 ~ +無限大 |
att2i | 0.0 | 浮く | 2 次減衰係数 | 0 ~ +無限大 |
d | N/A | 浮く | 頂点位置からライト位置までの距離 | N/A |
- Atten = 1 (ライトが方向ライトの場合)。
- Atten = 0 (ライトと頂点の間の距離がライトの範囲を超える場合)。
att0、att1、att2 の値は、D3DLIGHT9の減衰 0、減衰 1、および減衰 2 メンバーによって指定されます。
ライトと頂点の位置の間の距離は常に正です。
d = |Ldir |
どこ:
パラメーター | 既定値 | 種類 | 形容 |
---|---|---|---|
Ldir | N/A | D3DVECTOR | 頂点位置からライト位置への方向ベクトル |
d がライトの範囲 (つまり、D3DLIGHT9 構造体の Range メンバー) より大きい場合、Direct3D ではそれ以上減衰計算が行われず、ライトから頂点への影響は適用されません。
減衰定数は数式の係数として機能します。簡単に調整することで、さまざまな減衰曲線を生成できます。 減衰 1 を 1.0 に設定すると、減衰しないが範囲によって制限されるライトを作成することも、さまざまな値を試してさまざまな減衰効果を実現することもできます。
光の最大範囲での減衰は 0.0 ではありません。 ライトがライトの範囲にあるときにライトが突然現れるのを防ぐために、アプリケーションはライトの範囲を増やすことができます。 または、減衰係数が光の範囲で 0.0 に近づくように、アプリケーションで減衰定数を設定できます。 減衰値には、ライトの色の赤、緑、青の各成分が乗算され、ライトが頂点に移動する距離の係数としてライトの強度がスケーリングされます。
Spotlight Factor
次の式は、スポットライト係数を指定します。
スポットライト 係数する
パラメーター | 既定値 | 種類 | 形容 | 範囲 |
---|---|---|---|---|
rhoi | N/A | 浮く | スポットライト i のコサイン(角度) | N/A |
phii | 0.0 | 浮く | ラジアンでのスポットライト i の Penumbra 角度 | [thetai, pi) |
thetai | 0.0 | 浮く | ラジアンにおけるスポットライト i の Umbra 角度 | [0,pi) |
フォールオフ | 0.0 | 浮く | フォールオフ係数 | (-infinity、+infinity) |
どこ:
rho = norm(Ldcs).norm(Ldir)
そして:
パラメーター | 既定値 | 種類 | 形容 |
---|---|---|---|
Ldcs | N/A | D3DVECTOR | カメラ空間の光の方向の負の値 |
Ldir | N/A | D3DVECTOR | 頂点位置からライト位置への方向ベクトル |
光の減衰を計算した後、Direct3D では、該当する場合はスポットライト効果、サーフェスから光が反射する角度、その頂点の拡散成分と反射成分を計算する現在のマテリアルの反射率も考慮されます。 詳細については、「SpotLight」を参照してください。
関連トピック
-
照明 の 数学