拡散光

拡散光は、光の方向とオブジェクト サーフェスの法線の両方によって決まります。 光の方向を変更し、サーフェスの法線ベクトルを変更すると、拡散光がオブジェクトのサーフェス上で変化します。 オブジェクト頂点ごとに変化するため、拡散光の方が計算に時間がかかりますが、オブジェクトに陰影が付き、3 次元 (3D) の奥行きが出るというメリットがあります。

任意の減衰効果について光の強さを調整した後、照明エンジンは、頂点法線の角度および入射光の方向から、頂点から反射する残りの光量を計算します。 照明エンジンは、指向性ライトについては、距離による減衰がないためこの手順をスキップします。 システムでは、拡散と鏡面の 2 種類の反射を考慮し、異なる指揮を使用してそれぞれの反射する光量を決定します。

反射の光量を計算した後、Direct3D は、現在のマテリアルの拡散および鏡面反射率プロパティにこれらの新しい値を適用します。 結果として得られる色の値は、ラスタライザーはグーロー シェーディングと鏡面ハイライトを生成するために使用する拡散および鏡面コンポーネントです。

拡散光は次の方程式で表されます。

拡散光 = sum[Cd*Ld*(N.Ldir)*Atten*Spot]

パラメーター 既定値 説明
Sum 該当なし 該当なし 各ライトの拡散コンポーネントの総和。
Cd (0,0,0,0) D3DCOLORVALUE 拡散色。
Ld (0,0,0,0) D3DCOLORVALUE 明るい拡散色。
× 該当なし D3DVECTOR 頂点法線
Ldir 該当なし D3DVECTOR オブジェクトの頂点からライトへの方向ベクトル。
Atten 該当なし FLOAT 光の減衰。 「減衰とスポットライト係数」を参照してください。
スポット 該当なし FLOAT スポットライト係数。 「減衰とスポットライト係数」を参照してください。

 

減衰 (Atten) またはスポット ライトの特性 (Spot) を計算するには、「減衰とスポット ライトの係数」を参照してください。

拡散コンポーネントは、すべての光が個別に処理されて補間されると、0 ~ 255 になるようにクランプされます。 生成された拡散照明値は、環境光、拡散光、放射光の値の組み合わせです。

この例では、オブジェクトの色は、ライトの拡散色とマテリアルの拡散色を使用しています。

この方程式では、生成されるオブジェクトの頂点の色は、マテリアルの色と光の色の組み合わせになります。

次の 2 つのイメージは、マテリアルの色がグレーで、ライトの色が明るい赤であることを示しています。

い球の灰色の球のイラスト

結果として作成されるシーンは、次のようになります。 シーン内の唯一のオブジェクトは球です。 拡散照明の計算では、マテリアルとライトの拡散色を取得した後、内積を使用して、ライトの方向と頂点法線の間の角度からその値を修正します。 その結果、球の背面は、球のサーフェスがカーブしながらライトから遠ざかるに従い暗くなります。

拡散光のある球体の図

拡散光と前の例の環境光を組み合わせると、オブジェクトのサーフェス全体に影が付けられます。 次の図に示すように、環境光はサーフェス全体に影を付け、拡散光はオブジェクトの 3D 形状を表現するのに役立ちます。

拡散光と環境光のある球体の図

拡散光は、環境光よりも計算の負荷が高くなります。 頂点法線とライトの方向に依存しているため、オブジェクトのジオメトリを 3D 空間で表現でき、環境光よりリアルな照明を生成できます。 鏡面ハイライトを使用すると、さらにリアルな外観を表現できます。

光源の計算