環境光は、シーンに一定の照明を生成します。 頂点法線、光の方向、光の位置、減衰などの他の照明要素に依存していないため、すべてのオブジェクト頂点を同じように照らします。 環境光は、すべての方向において一定であり、オブジェクトのすべてのピクセルが同じように色付けされます。 計算は高速ですが、オブジェクトはフラットに見え、リアル感が劣ります。
アンビエント照明は最も速いタイプの照明ですが、最も現実的でない結果が生成されます。 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 の円のように見えます。
オブジェクトをよりリアルに見せるために、周囲光に加えて拡散光または反射照明を適用します。
関連トピック