拡散光は、光の方向とオブジェクト サーフェスの法線の両方によって決まります。 光の方向を変更し、サーフェスの法線ベクトルを変更すると、拡散光がオブジェクトのサーフェス上で変化します。 オブジェクト頂点ごとに変化するため、拡散光の方が計算に時間がかかりますが、オブジェクトに陰影が付き、3 次元 (3D) の奥行きが出るというメリットがあります。
任意の減衰効果の光強度を調整した後、照明エンジンは、頂点法線の角度と入射光の方向を指定して、残りの光の反射量を計算します。 照明エンジンは、方向ライトの場合、距離を越えて減衰しないため、この手順に進みます。 システムは、拡散反射と反射という 2 つの反射タイプを考慮し、異なる数式を使用して、それぞれの反射する光の量を決定します。
Direct3D は、反射する光の量を計算した後、これらの新しい値を現在のマテリアルの拡散反射および反射反射率プロパティに適用します。 結果として得られるカラー値は、ラスタライザーが Gouraud シェーディングと反射ハイライトを生成するために使用する拡散および反射コンポーネントです。
拡散光は、次の式で説明する。
拡散光 = sum[Cd*Ld*(N.Ldir)*Atten*Spot]
パラメーター | 既定値 | 型 | 説明 |
---|---|---|---|
sum | 該当なし | 該当なし | 各ライトの拡散成分の合計。 |
Cd | (0,0,0,0) | D3DCOLORVALUE | 拡散色。 |
Ld | (0,0,0,0) | D3DCOLORVALUE | 光拡散色。 |
N | 該当なし | D3DVECTOR | 頂点法線 |
Ldir | 該当なし | D3DVECTOR | オブジェクト頂点からライトへの方向ベクトル。 |
Atten | 該当なし | FLOAT | ライト減衰。 「減衰とスポットライト係数」を参照してください。 |
スポット | 該当なし | FLOAT | スポットライト係数。 「減衰とスポットライト係数」を参照してください。 |
減衰 (Atten) またはスポットライトの特性 (スポット) を計算するには、「 Attenuation とスポットライト係数を参照してください。
拡散コンポーネントは、すべてのライトが個別に処理および補間された後、0 から 255 にクランプされます。 結果として得られる拡散光の値は、環境光、拡散光、放射光の値の組み合わせです。
例
この例では、オブジェクトは光拡散色とマテリアル拡散色を使用して色付けされます。
この式に従って、オブジェクト頂点の結果の色は、マテリアルの色と光の色の組み合わせになります。
次の 2 つの図は、グレーの素材の色と、明るい赤の明るい色を示しています。
結果のシーンを次の図に示します。 シーン内の唯一のオブジェクトは球です。 拡散光計算では、マテリアルと光の拡散色を取得し、ドット積を使用して、光の方向と頂点法線の間の角度によって変更します。 その結果、球のサーフェスがライトから離れると、球の背面が暗くなります。
拡散光と前の例のアンビエント照明を組み合わせると、オブジェクトのサーフェス全体がシェーディングされます。 次の図に示すように、アンビエント ライトはサーフェス全体をシェーディングし、拡散光はオブジェクトの 3D 形状を明らかにするのに役立ちます。
拡散光は、アンビエント照明よりも計算が集中します。 頂点の法線と光の方向に依存するため、3D 空間でオブジェクト ジオメトリを確認できるため、アンビエント照明よりもリアルな照明が生成されます。 反射ハイライトを使用すると、よりリアルな外観を実現できます。
関連トピック