Microsoft DirectX 8.0 (C++) |
自然界では、光源から放射された光は、何千や何百万ではないにしても、何百もの物体に反射した末にわたしたちの目に届く。光は反射するたびに、その一部が物体の表面に吸収されたり、周囲に拡散し、その残りがほかの表面や私たちに達する。この過程は、光が減衰して消えてなくなるか、またはわたしたちが光が届いたことを知覚するまで繰り返される。
自然光の動きを完全にシミュレートする計算には、あまりにも膨大な時間がかかるため、リアルタイム 3D グラフィックスで使用できないことは明白である。そこで、速度を考慮して、Microsoft® Direct3D® のライティング モデルでは自然光の動きを大まかにシミュレートする。Direct3D では、最終的な色を作成する色成分、赤、緑、および青によって光を描く。詳細については、「ライティングとマテリアルのカラー値」を参照すること。
Direct3D では、光がサーフェスに反射したとき、光の色とサーフェス自体を数学的に処理することで、最終的にスクリーンに描画される色を作成する。Direct3D で使用するアルゴリズムに関する特定の情報については、「Direct3D のライティングにおける数学的計算」を参照すること。
Direct3D のライティング モデルは、大きく分けてアンビエント ライトとダイレクト ライトの 2 つがある。これらは互いに異なる属性を持ち、サーフェスのマテリアルとの相互作用も異なる。アンビエント ライトは、方向も光源も持たず、環境内を散乱している光で、環境光とも言われる。アンビエント ライトの強度は、どの位置座標においても下位レベルに保たれる。アンビエント ライトの適切な例としては、カメラマンが使用する間接照明がある。Direct3D のアンビエント ライトには、自然光と同様、実際の方向や光源はない。あるのは色と強度のみである。実際、アンビエント ライトのレベルは、シーン内の光を発するオブジェクトとはまったく関係しない。アンビエント ライトはスペキュラ反射を起こさない。
ダイレクト ライトは、シーン内の光源が生成する光である。ダイレクト ライトには常に色と強度があり、特定の方向に進む。ダイレクト ライトは、サーフェスのマテリアルと相互作用してスペキュラ ハイライトを生み、その方向はグーロー シェーディングなどのシェーディング アルゴリズムで係数として使用される。ダイレクト ライトの反射は、シーンのアンビエント ライトのレベルに影響を与えない。シーン内のダイレクト ライトを生成する光源にはさまざまな特性があり、それによってシーンをどのように照らすかが異なる。詳細については、「ライト」を参照すること。
さらに、ポリゴンのマテリアルには、ポリゴンが光をどのように反射するかを決める特性がある。マテリアルがどのようにアンビエント ライトを反射するかを示す単一の反射特性を設定し、マテリアルのスペキュラ反射率およびディフューズ反射率を決める個々の特性を設定する。詳細については、「マテリアル」を参照すること。