light type プロパティは、使用している光源の種類を定義します。 ライト型は、ライトの D3DLIGHT9 構造体の Type メンバーの D3DLIGHTTYPE C++ 列挙型の値を使用して設定されます。 Direct3D には、ポイント ライト、スポットライト、方向ライトの 3 種類があります。 各タイプは、さまざまなレベルの計算オーバーヘッドで、シーン内のオブジェクトを異なる方法で照らします。
ポイント ライト
ポイント ライトはシーン内の色と位置を持っていますが、単一の方向はありません。 次の図に示すように、すべての方向に均等に光が放たれます。
ポイント ライト図
電球はポイント ライトの良い例です。 ポイント ライトは減衰と範囲の影響を受け、頂点ごとにメッシュを照らします。 照明中、Direct3D は、ワールド空間におけるポイント ライトの位置と、点灯する頂点の座標を使用して、ライトの方向と、光が移動した距離のベクトルを導き出します。 どちらも頂点法線と共に使用され、サーフェスの照明に対する光の寄与を計算します。
方向ライト
方向ライトは、位置ではなく、色と方向のみを持っています。 平行光を放射します。 つまり、方向ライトによって生成されるすべてのライトは、同じ方向にシーンを通過します。 太陽のような無限近くの距離にある光源としての方向光を想像してみてください。 方向ライトは減衰や範囲の影響を受けないため、Direct3D が頂点の色を計算するときに考慮されるのは、指定した方向と色だけです。 照明係数の数が少ないため、使用する計算負荷が最も低いライトです。
スポットライト
スポットライトには、光を放射する色、位置、方向があります。 次の図に示すように、スポットライトから放射される光は、明るい内側の円錐と大きな外側の円錐で構成され、2 つの間で光の強度が低下します。
内側の円錐と外側の円錐図
スポットライトは、減衰、減衰、および範囲の影響を受けます。 シーン内のオブジェクトの照明効果を計算する場合、これらの要因と各頂点への距離ライトの移動距離が計算されます。 各頂点に対してこれらの効果を計算すると、スポットライトは Direct3D 内のすべてのライトの計算に最も時間がかかります。
D3DLIGHT9 C++ 構造体には、スポットライトでのみ使用される 3 つのメンバーが含まれています。 これらのメンバー (Falloff、Theta、Phi) は、スポットライト オブジェクトの内側と外側の円錐の大きさと小ささ、およびそれらの間の光の減少を制御します。
シータ値はスポットライトの内部円錐のラジアン角度で、Phi 値は光の外側の円錐の角度です。 フォールオフ値は、内側の円錐の外縁と外側の円錐の内側の端との間の光強度の低下を制御します。 ほとんどのアプリケーションでは、フォールオフを 1.0 に設定して、2 つのコーン間で均等に発生するフォールオフを作成しますが、必要に応じて他の値を設定できます。
次の図は、これらのメンバーの値と、それらの値がスポットライトの光の内側と外側の円錐にどのように影響するかを示しています。
スポットライトは、明るい内側の円錐と外側の円錐の 2 つの部分を持つ光の円錐を出力します。 ライトは内側の円錐の中で最も明るく、外側の円錐の外側には存在せず、2 つの領域間で光の強度が減衰します。 この種類の減衰は、一般にフォールオフと呼ばれます。
頂点が受け取る光の量は、内側または外側の円錐内の頂点の位置に基づいています。 Direct3D は、スポットライトの方向ベクトル (L) と光から頂点 (D) までのベクトルのドット積を計算します。 この値は、2 つのベクトル間の角度のコサインと等しく、光の円錐角度と比較して頂点が内側または外側の円錐のどこにあるかを判断できる頂点の位置のインジケーターとして機能します。 次の図は、これら 2 つのベクトル間の関連付けをグラフィカルに表したものです。
スポットライトの方向ベクトルと頂点からスポットライトへのベクトルの
この値は、スポットライトの内側と外側の円錐角度のコサインと比較されます。 ライトの D3DLIGHT9 構造では、シータと Phi のメンバーは、内側と外側の円錐の合計円錐角度を表します。 頂点が (コーン角度全体ではなく) 照明の中心から離れていると減衰が発生するため、ランタイムはコサインを計算する前に、これらの円錐角度を半分に分割します。
ベクトル L と D のドット積が外側の円錐角度のコサイン以下の場合、頂点は外側の円錐の向こうにあり、光を受け取らなくなります。 L と D のドット積が内側の円錐角度のコサインより大きい場合、頂点は内部コーン内にあり、最大光量を受け取ります。距離に対する減衰を考慮します。 頂点が 2 つの領域の間のどこかにある場合、フォールオフは次の式で計算されます。
どこ:
- がフォールオフ後の光強度である
- アルファは、ベクトル L と D の間の角度です。
- Theta は、内側の円錐の角度です
- Phi は外側の円錐の角度です
- p はフォールオフ
この数式では、0.0 ~ 1.0 の値が生成され、減衰を考慮して頂点でのライトの強度がスケーリングされます。 光からの頂点の距離の係数としての減衰も適用されます。 次のグラフは、さまざまなフォールオフ値がフォールオフ曲線に与える影響を示しています。
からの頂点距離のグラフ
実際の照明に対するさまざまなフォールオフ値の影響は微妙であり、1.0 以外のフォールオフ値でフォールオフ曲線を形成することでパフォーマンスが低下します。 このような理由から、通常、この値は 1.0 に設定されます。
関連トピック