Platform SDK: DirectX

ディフューズ反射モデル

[C++]

Direct3D では、次の公式を使用してディフューズ反射係数を計算する。

この公式では、Rd はディフューズ反射係数、D は光の方向、N は頂点法線である。ベクトル D は正規化される。ベクトル N は、D3DRENDERSTATE_NORMALIZENORMALS レンダリング ステートが有効になっている場合にのみ正規化される。ライティングの方向ベクトルに -1 を乗じて逆ベクトルにして、方向ベクトルと頂点法線の間の適正な関係付けを作成する。この公式の結果は -1.0 〜 1.0 の範囲の値である。この値は 0.0 〜 1.0 の範囲に制限され、頂点から反射されるライティングの強度を調整するために使用される。

ディフューズ反射係数を計算した後で、減衰率を考慮した頂点にあたる光を次のようなディフューズ反射公式に適用して、その頂点におけるディフューズ成分が決定される。次の公式は、アンビエント反射とディフューズ反射を組み合わせて頂点におけるディフューズ成分を作成する。

この公式では、Dv は頂点に対して計算されるディフューズ成分、Ia はシーン内のアンビエント ライト、および A は距離とスポット ライト エフェクトのために減衰した光源のライティング強度 (スポット ライト フォールオフ モデルで乗算された、距離の増加によるライトの減衰)。L 変数はライティングのプロパティを表し、V エントリは頂点色を表す。ここで、それぞれに適用されている添字 ad、および e は、色の種類のアンビエント (ambient)、ディフューズ (diffuse)、またはエミッション (emissive) を表す。公式で示すように、まず IaVa + Ve が計算され、すべてのアクティブなライティングの A(RdVdLd + VaLa) が加算される。

D3DRENDERSTATE_COLORVERTEX レンダリング ステートが有効になっている場合、D3DRENDERSTATE_AMBIENTMATERIALSOURCE および D3DRENDERSTATE_DIFFUSEMATERIALSOURCE レンダリング ステートに対して設定される値に基づいて V の色が選択される。これらのレンダリング ステートを D3DMATERIALCOLORSOURCE 列挙型のメンバに設定して、現在のマテリアルか、頂点の色を色ソースとして使用する。

詳細については、「スペキュラ反射モデル」を参照すること。

[Visual Basic]

Direct3D では、次の公式を使用してディフューズ反射係数を計算する。

この公式では、Rd はディフューズ反射係数、D の方向、N は頂点法線である。ベクトル D は正規化される。ベクトル N は、D3DRENDERSTATE_NORMALIZENORMALS レンダリング ステートが有効になっている場合にのみ正規化される。ライティングの方向ベクトルに -1 を乗じて逆ベクトルにして、方向ベクトルと頂点法線の間の適正な関係付けを作成する。この公式の結果は -1.0 〜 1.0 の範囲の値である。この値は 0.0 〜 1.0 の範囲に制限され、頂点から反射されるライティングの強度を調整するために使用される。

ディフューズ反射係数を計算した後で、その結果を次のようなディフューズ反射公式に適用して、その頂点におけるディフューズ成分が決定される。次の公式は、アンビエント反射とディフューズ反射を組み合わせて頂点におけるディフューズ成分を作成する。

この公式では、Dv は頂点に対して計算されるディフューズ成分、Ia はシーン内のアンビエント ライト、および A は距離とスポット ライト エフェクトのために減衰した高原のライティング強度 (スポット ライト フォールオフ モデル で乗算された、距離の増加によるライトの減衰)。L 変数はライティングのプロパティを表し、V エントリは頂点色を表す。ここで、それぞれに適用されている添字 ad、および e は、色の種類であるアンビエント (ambient)、ディフューズ (diffuse)、またはエミッション (emissive) を表す。公式で示すように、まず IaVa + Ve が計算され、すべてのアクティブなライティングの A(RdVdLd + VaLa) が加算される。

D3DRENDERSTATE_COLORVERTEX レンダリング ステートが有効になっている場合、D3DRENDERSTATE_AMBIENTMATERIALSOURCE および D3DRENDERSTATE_DIFFUSEMATERIALSOURCE レンダリング ステートに対して設定される値に基づいて V の色が選択される。これらのレンダリング ステートを CONST_D3DMATERIALCOLORSOURCE 列挙のメンバを設定して、現在のマテリアルか、頂点の色を色ソースとして使用する。

詳細については、「スペキュラ反射モデル」を参照すること。