Microsoft DirectX 8.0 (Visual Basic)

マテリアル プロパティ

マテリアル プロパティは、マテリアルのディフューズ、アンビエント反射、エミッション、およびスペキュラ ハイライト特性を詳細に指定する。Microsoft® Direct3D® は、D3DMATERIAL8 型にすべてのマテリアル プロパティを保持する。マテリアル プロパティは、そのマテリアルを使用するポリゴンをラスタ化するときに Direct3D が使用する色に影響する。スペキュラ属性を除き、各プロパティは、マテリアルが所定の種類のライトの赤、緑、および青成分をどのくらい反射するかを表す RGBA 色と、アルファ ブレンディング係数 (RGBA 色のアルファ成分) として指定する。マテリアルのスペキュラ属性は、色および強度で指定する。詳細については、「ライティングとマテリアルのカラー値」を参照すること。

ディフューズ反射とアンビエント反射

D3DMATERIAL8 型の diffuse および ambient メンバは、シーン内でマテリアルがアンビエント ライトとディフューズ ライトをどのように反射するかを指定する。ほとんどのシーンでは、アンビエント ライトよりもディフューズ ライトの方がずっと多く使用されるため、色の決定においてはディフューズ反射が最も大きく影響する。さらに、ディフューズ ライトは向きを持っているため、その入射角は反射の全体的な強度に影響を与える。ディフューズ反射は、ライトが頂点法線と平行に頂点に当るときが最も強い。入射角が大きくなるにつれて、ディフューズ反射のエフェクトは減少する。次に示すように、反射光の量は入射光と頂点法線がなす角度の余弦である。

アンビエント ライトと同様、アンビエント反射は向きを持たない。アンビエント反射は、レンダリングしたオブジェクトの見かけの色への影響は少ないが、全体の色に影響し、マテリアルから反射するディフューズ ライトがまったくないか、ほんのわずかであるときに最も目立つ。マテリアルのアンビエント反射は、D3DRS_AMBIENT フラグを指定して Direct3DDevice8.SetRenderState メソッドを呼び出すことでシーンに設定したアンビエント ライトの影響を受ける。

ディフューズ反射およびアンビエント反射は、ともに作用してオブジェクトで知覚される色を決める。これらは通常は同じ値である。たとえば、青色の水晶オブジェクトをレンダリングするには、ディフューズ ライトとアンビエント ライトの青成分のみ反射するマテリアルを作成する。この水晶を白色光で照らされた部屋に置くと青色に見える。しかし、赤色光しかない部屋では、同じ水晶でも黒く見える。これは、水晶のマテリアルが赤色光を反射しないためである。

エミッション

マテリアルを使用して、レンダリングしたオブジェクト自体が光を発しているように見せることができる。D3DMATERIAL8 型の emissive メンバを使用して、エミッション光の色と透明度を指定する。エミッションはオブジェクトの色に影響する。たとえば、暗いマテリアルを明るくし、発光色の一部になることができる。

マテリアルのエミッション属性を使用して、オブジェクトが光を発しているように見せることができる。この方法では、シーンにライトを追加する際のオーバーヘッドが発生しない。青色の水晶の例で、シーン内のほかのオブジェクトにはライトを照らさずに、水晶だけが輝いているように見せる場合は、エミッション属性を使用するとよい。エミッション属性を持つマテリアルが発する光は、シーン内のほかのオブジェクトで反射できる光ではないので注意すること。この反射光を得るには、シーン内に追加のライトを配置する必要がある。

スペキュラ反射

スペキュラ反射はオブジェクト上にハイライトを作成し、オブジェクトが輝いているように見せる。D3DMATERIAL8 型には、スペキュラ ハイライト色とマテリアルの全体的な輝きを指定する 2 つのメンバが含まれる。specular メンバを目的の RGBA 色 (最も一般的な色は白色または明るいグレーである) に設定して、スペキュラ ハイライトの色を決める。power メンバに設定する値は、スペキュラ エフェクトのシャープさを制御する。

スペキュラ ハイライトを使用すると、すばらしいエフェクトが得られる。再び青色の水晶を例として考える。power の値が大きいほど鮮明なスペキュラ ハイライトになり、水晶の輝きが増す。この値が小さいほどエフェクトの及ぶ領域は拡大するが、反射が鈍くなり水晶が霜で覆われたように見える。まったく光沢のないオブジェクトにするには、power メンバをゼロに設定し、specular の色を黒に設定する。思いどおりのリアルな表示になるように、さまざまな反射レベルを試してみる。次の図は、2 つの同じモデルを示している。左側のモデルではスペキュラ反射強度を 10 に設定し、右側のモデルではスペキュラ反射を設定していない。