次の方法で共有


環境光

環境光は、シーンに一定の照明を生成します。 頂点法線、光の方向、光の位置、減衰などの他の照明要素に依存していないため、すべてのオブジェクト頂点を同じように照らします。 環境光は、すべての方向において一定であり、オブジェクトのすべてのピクセルが同じように色付けされます。 計算は高速ですが、オブジェクトはフラットに見え、リアル感が劣ります。

アンビエント照明は最も速いタイプの照明ですが、最も現実的でない結果が生成されます。 Direct3D には、ライトを作成せずに使用できる 1 つのグローバルアンビエント ライト プロパティが含まれています。 または、環境光を提供する任意のライト オブジェクトを設定できます。

シーンのアンビエント照明は、次の式で説明します。

Ambient Lighting = Cₐ*[Gₐ + sum(Atteni*Spoti*Lai)]

ここで:

パラメーター 既定値 説明
Cₐ (0,0,0,0) D3DCOLORVALUE 素材のアンビエントカラー
Gₐ (0,0,0,0) D3DCOLORVALUE グローバルアンビエントカラー
Atteni (0,0,0,0) D3DCOLORVALUE ith ライトの光減衰。 「減衰とスポットライト係数」を参照してください。
スポットi (0,0,0,0) D3DVECTOR ith ライトのスポットライト係数。 「減衰とスポットライト係数」を参照してください。
sum 該当なし 該当なし 環境光の合計
Lai (0,0,0,0) D3DVECTOR ith ライトの光周囲の色

 

Cₐ の値は次のいずれかです。

  • AMBIENTMATERIALSOURCE = D3DMCS_COLOR1 で、1 つ目の頂点色が頂点の宣言で指定されている場合は、頂点色 1。
  • AMBIENTMATERIALSOURCE = D3DMCS_COLOR2 で、2 つ目の頂点色が頂点の宣言で指定されている場合は、頂点色 2。
  • マテリアルアンビエントカラー。

AMBIENTMATERIALSOURCE オプションが使用されていて、頂点色が指定されていない場合は、マテリアルのアンビエント色が使用されます。

 

マテリアルアンビエント カラーを使用するには、次のコード例に示すように SetMaterial を使用します。

Gₐ はグローバルアンビエントカラーです。 これは SetRenderState(D3DRS_AMBIENT) を使用して設定します。 Direct3D シーンには 1 つのグローバルアンビエント カラーがあります。 このパラメーターは Direct3D ライト オブジェクトに関連付けされていません。

Lai は、シーン内の ith ライトのアンビエント カラーです。 各 Direct3D ライトには一連のプロパティがあり、そのうちの 1 つはアンビエント カラーです。 sum(Lai) という用語は、シーン内のすべてのアンビエント カラーの合計です。

この例では、オブジェクトの色は、シーンの環境光と素材のアンビエント色を使用しています。

#define GRAY_COLOR  0x00bfbfbf

Ambient.r = 0.75f;
Ambient.g = 0.0f;
Ambient.b = 0.0f;
Ambient.a = 0.0f;

この式に従って、オブジェクト頂点の結果の色は、マテリアルの色と光の色の組み合わせになります。

次の 2 つの図は、グレーの素材の色と、明るい赤の明るい色を示しています。

灰色の球の図赤い球の図

結果のシーンを次の図に示します。 シーン内の唯一のオブジェクトは球です。 環境光は、すべてのオブジェクト頂点を同じ色で照らします。 頂点の法線やライトの方向には依存しません。 その結果、オブジェクトのサーフェスの周囲にシェーディングの差が生じないため、球体は 2D の円のように見えます。

周囲光を含む球の図

オブジェクトをよりリアルに見せるために、周囲光に加えて拡散光または反射照明を適用します。

光源の計算