Platform SDK: DirectX

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

[C++]

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

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

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

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

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

dvFalloff 値が変化しても実際のライティングに与える影響はわずかであり、dvFalloff 値が 1.0 以外のときに形成されるフォールオフ曲線で若干のパフォーマンス低下が生じるのみである。このような理由から、ほとんどの場合、この値は 1.0 に設定する。

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

[Visual Basic]

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

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

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

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

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

falloff 値が変化しても実際のライティングに与える影響はわずかであり、falloff 値が 1.0 以外のときに形成されるフォールオフ曲線で若干のパフォーマンス低下が生じるのみである。このような理由から、ほとんどの場合、この値は 1.0 に設定する。

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