Microsoft DirectX 8.0 (Visual Basic)

スポットライト フォールオフ モデル

スポットライトは、明るい内部コーンおよび外部コーンの 2 つの部分を持つ光のコーンを放射する。ライティングは、内部コーンの内側が最も明るく、外部コーンの外側にはライティングが存在しない。ライティングの強度は、この 2 つの領域の間で減衰する。一般に、このような減衰をフォールオフと呼ぶ。

頂点を照らす光の量は、頂点が内部コーンの内側にあるか、外部コーンの内側にあるかによって異なる。Microsoft® Direct3D® は、スポットライトの方向ベクトル (L) と頂点からスポットライトへのベクトル (D) の内積を計算する。この値は、2 つのベクトルがなす角度の余弦に等しく、ライティングのコーン角度と比較できる頂点位置座標を示すので、内部コーンまたは外部コーンのどちらに頂点があるかを判断するのに役立つ。次の図は、これら 2 つのベクトルの間の関係を示している。

システムは、この値をスポットライトの内部および外部コーンの角度の余弦と比較する。ライトの D3DLIGHT8 型の Theta および Phi メンバは、内部および外部コーンの角度の合計を表す。減衰は、全コーン角度にわたってではなく、ライティングの中心から頂点が離れることによって生じるため、Direct3D はコーン角度を半分に割ってから余弦を計算する。

ベクトル LD の内積が外部コーンの角度の余弦以下の場合、頂点は外部コーンの外側に存在し、ライティングで照らされない。LD の内積が内部コーン角度の余弦より大きい場合、頂点は内部コーンの内側に存在し、最大量のライティングで照らされる (ただし、距離の増加による減衰を考慮する)。頂点が 2 つの領域の間にある場合、Direct3D は次の公式を使用して頂点におけるライティングのフォールオフを計算する。

この公式では、If はライティングされている頂点におけるフォールオフ後の光の強度、a はベクトル LD がなす角度、f は外部コーンの角度の半分の角度、q は内部コーンの角度の半分の角度、p はスポットライトのフォールオフ プロパティ (D3DLIGHT8 型の Falloff) である。この公式では、頂点における光の強度を定める 0.0 〜 1.0 の値を求めて、ライトのフォールオフを示す。ライティングから頂点までの距離の係数として減衰も適用される。p 値は、D3DLIGHT8 型の Falloff メンバに対応し、フォールオフ カーブの形状を決定する。次の図は、Falloff 値によってフォールオフ カーブがどのように変化するかを示している。

Falloff 値が変化しても実際のライティングに与える影響はわずかであり、Falloff 値が 1.0 以外のときに形成されるフォールオフ カーブで若干のパフォーマンス低下が生じるのみである。これらの理由により、通常、この値は 1.0 に設定される。

詳細については、「距離の増加によるライトの減衰」を参照すること。