アンビエント ライト
アンビエント ライト
アンビエント ライトは、シーンに均一なライティングをもたらす。アンビエント ライトは、頂点法線、ライトの方向、ライトの位置座標、範囲、減衰などのライティング要因に依存しないため、オブジェクトのすべての頂点を同様に照らす。最速のライティングであるが、得られる結果のリアリティは最も低い。Microsoft® Direct3D® には、ライトを作成しなくても使用できるグローバル アンビエント ライト属性が 1 つだけある。代わりに、ライト オブジェクトの設定によってアンビエント ライトを実現することもできる。シーンのアンビエント ライトは、次の方程式で表される。
Ambient Lighting = Ca*[Ga + sum(Lai*Atteni*Spoti)]
各パラメータについて次の表に示す。
パラメータ | デフォルト値 | 型 | 説明 |
---|---|---|---|
Ca | (0,0,0,0) | D3DCOLORVALUE | マテリアルのアンビエント色。 |
Ga | (0,0,0,0) | D3DCOLORVALUE | グローバルなアンビエント色。 |
sum | N/A | N/A | ライト オブジェクトのアンビエント ライトの合計。 |
Lai | (0,0,0,0) | D3DVECTOR | i 番目のライトのアンビエント色。 |
Atteni | (0,0,0,0) | D3DCOLORVALUE | i 番目のライトの減衰「減衰とスポットライト係数」を参照すること。 |
Spoti | (0,0,0,0) | D3DVECTOR | i 番目のライトのスポットライト係数「減衰とスポットライト係数」を参照すること。 |
Ca の値は次のいずれかである。
- 頂点色 1 (AMBIENTMATERIALSOURCE = D3DMCS_COLOR1 で、頂点の宣言で最初の頂点色を指定した場合)
- 頂点色 2 (AMBIENTMATERIALSOURCE = D3DMCS_COLOR2 で、頂点の宣言で 2 番目の頂点色を指定した場合)
- マテリアルのアンビエント色
注 いずれかの AMBIENTMATERIALSOURCE オプションが使われていて、頂点色が指定されていない場合は、マテリアルのアンビエント色を使う。
マテリアルのアンビエント色を使うには、次のサンプル コードに示すように SetMaterial を使う。
Ga はグローバルなアンビエント色である。これは、SetRenderState(D3DRENDERSTATE_AMBIENT) を使って設定する。Direct3D シーンには、グローバルなアンビエント色が 1 つある。このパラメータと Direct3D のライト オブジェクトは関連していない。
Lai は、シーン内の i 番目のライトのアンビエント色である。Direct3D の各ライトは一連のプロパティを持ち、その中の 1 つがアンビエント色である。sum(Lai) の項は、シーン内のすべてのアンビエント色の合計である。
例
この例では、シーンのアンビエント ライトおよびマテリアルのアンビエント ライトを使ってオブジェクトに色を付けている。コードを次に示す。
#define GRAY_COLOR 0x00bfbfbf // create material D3DMATERIAL9 mtrl; ZeroMemory( &mtrl;, sizeof(mtrl) ); mtrl.Ambient.r = 0.75f; mtrl.Ambient.g = 0.0f; mtrl.Ambient.b = 0.0f; mtrl.Ambient.a = 0.0f; m_pd3dDevice->SetMaterial( &mtrl; ); m_pd3dDevice->SetRenderState( D3DRS_AMBIENT, GRAY_COLOR);
方程式に従うと、オブジェクト頂点の色は、マテリアル色とライティング色を組み合わせた色になる。
これらの 2 つのイメージが示すように、マテリアルの色はグレー、ライトの色は明るい赤である。
この結果、次に示すようなシーンになる。シーン内の唯一のオブジェクトは球である。アンビエント ライトは、オブジェクトのすべての頂点を同じ色で照らす。頂点法線やライトの方向には依存しない。結果的に、球体は 2D の円のように見える。 これは、オブジェクトのサーフェイスにシェーディングの違いが生じないためである。
オブジェクトをよりリアルに見せるには、アンビエント ライトに加えてディフューズ ライトやスペキュラ ライトを適用する。