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