次の方法で共有


照明の数学 (Direct3D 9)

Direct3D の照明モデルは、環境光、拡散光、反射光、放射光を扱います。 これにより、さまざまな照明の状況に十分対応することができます。 シーン内のライトの合計量をグローバル イルミネーションと参照し、次の式を使用して計算します。

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

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

拡散光 (Direct3D 9) は、ライトの方向とオブジェクトサーフェスの法線の両方に依存します。 これは、光の方向と変化する面の数字ベクトルの結果として、オブジェクトの表面全体で変化します。 オブジェクト頂点ごとに変化するため、拡散光の方が計算に時間がかかりますが、オブジェクトに陰影が付き、3 次元 (3D) の奥行きが出るというメリットがあります。 Direct3D での拡散光の計算方法については、「拡散光 (Direct3D 9)」を参照してください。

反射照明 (Direct3D 9) は、ライトがオブジェクトサーフェスに当たり、カメラに向かって反射したときに発生する明るい反射ハイライトを識別します。 拡散光よりも強く、オブジェクトサーフェス全体でより迅速に落ちます。 反射光の方が拡散光よりも計算に時間がかかりますが、反射光を使用すると、表面の表現力が格段に向上します。 Direct3D で反射照明がどのように計算されるかを確認するには、「反射照明 (Direct3D 9)」を参照してください。

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

現実的な光は、これらの種類の光をそれぞれ 3D シーンに適用することによって実現できます。 環境、放射、および拡散コンポーネントに計算される値は、拡散頂点の色として出力されます。鏡面反射コンポーネントの値は、反射頂点の色として出力されます。 環境光、拡散光、反射光の値は、特定の光の減衰とスポットライト要素の影響を受けます。 減衰のしくみの詳細については、「 減衰とスポットライト係数 (Direct3D 9)」を参照してください。

より現実的な照明効果を出すため、多くの照明を追加できますが、シーンのレンダリングに時間がかかります。 デザイナーが望むすべての効果を出すため、一部のゲームでは一般に使われているより多くの CPU 能力を使っています。 この場合、テクスチャ マップを使うと同時に照明マップと環境マップを使ってシーンに照明を追加することにより、照明計算の数を最小限に減らすのが一般的です。

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

ライトとマテリアル