次の方法で共有


照明の数学 (Direct3D 9)

Direct3D ライト モデルは、アンビエント、拡散、反射、放射光をカバーします。 これは、照明の状況の広い範囲を解決するのに十分な柔軟性です。 シーン内のライトの合計量をグローバル イルミネーションと参照し、次の式を使用して計算します。

Global Illumination = Ambient Light + Diffuse Light + Specular Light + Emissive Light 

アンビエント照明 (Direct3D 9) は一定の照明です。 これはすべての方向で一定であり、オブジェクトのすべてのピクセルを同じように色付けします。 計算は高速ですが、オブジェクトはフラットで非現実的に見えるままです。 Direct3D によるアンビエント照明の計算方法については、「アンビエント照明 (Direct3D 9)」を参照してください。

拡散光 (Direct3D 9) は、光の方向とオブジェクト サーフェスの法線の両方によって異なります。 これは、光の方向の変化と変化する表面の数字ベクトルの結果として、オブジェクトの表面全体で変化します。 拡散光はオブジェクトの頂点ごとに変化するため、計算に時間がかかりますが、オブジェクトをシェーディングして 3D 深度を与えるという利点があります。 Direct3D での拡散光の計算方法については、「拡散光(Direct3D 9)」を参照してください。

反射照明 (Direct3D 9) は、光がオブジェクトサーフェスに当たり、カメラに向かって反射したときに発生する明るい反射ハイライトを識別します。 拡散光よりも強く、オブジェクトサーフェス全体でより迅速に落ちます。 拡散光よりも反射照明の計算に時間がかかりますが、それを使用する利点は、サーフェスに重要な詳細を追加する点です。 Direct3D での反射照明の計算方法については、「反射照明 (Direct3D 9)」を参照してください。

放射光(Direct3D 9) は、オブジェクトによって放出される光です。たとえば、光彩です。 Direct3D での放射光の計算方法については、「放射光(Direct3D 9)」を参照してください。

これらの種類の照明をそれぞれ 3D シーンに適用することで、現実的な照明を実現できます。 アンビエント、放射、拡散コンポーネントに対して計算された値は、拡散頂点の色として出力されます。反射照明コンポーネントの値は、反射頂点の色として出力されます。 アンビエント、拡散、および反射ライトの値は、特定のライトの減衰とスポットライト係数の影響を受ける可能性があります。 減衰のしくみの詳細については、「減衰とスポットライト係数 (Direct3D 9)を参照してください。

より現実的な照明効果を実現するには、より多くのライトを追加します。ただし、シーンのレンダリングに時間がかかります。 デザイナーが望むすべての効果を実現するために、一部のゲームでは一般的に使用されるよりも多くの CPU パワーが使用されます。 この場合、テクスチャ マップを使用しながら、照明マップと環境マップを使用してシーンに照明を追加することで、照明計算の数を最小限に抑えるのが一般的です。

照明はカメラ空間で計算されます。 照明変換の計算方法については、「カメラ空間変換 (Direct3D 9)を参照してください。 特別な条件が存在する場合、モデル空間で最適化された照明を計算できます。通常のベクトルは既に正規化されています (D3DRS_NORMALIZENORMALSは True)、頂点ブレンドは必要ありません。変換マトリックスは直交しています。

ライトとマテリアル