拡散反射 diffuse

diffuse.png

拡散反射は石膏やチョークの表面での反射のようにどの方向から見ても物体面の輝度がほぼ一定となる反射である。
乱反射ともいう。
入射した光がその物質内の浅い部分で多重散乱したあと、表面から放射された光である。
表面がなめらかな物体に光が当たると拡散反射は起きない
拡散反射は不均一な面で起こる様々な方向に光が反射されることである。

Diffuseの見た目

Diffuseに色を設定すると素材全体の色のように見えます。マットな印象です。

計算の仕方

物体面の輝度は光源の位置・方向物体面の向き(法線)、そして面の反射特性(material diffuse)に依存する。
鈍い、マットな反射(=色)。
光源の種類によって拡散反射の計算の仕方は違う。
最終的には

目に届く拡散反射成分の色=物質の拡散反射係数×光源の拡散反射成分×拡散反射強度

になる。
拡散反射強度は
拡散反射強度=光のベクトル・法線

に比例する。
これをランバートの余弦則と呼ぶ。

ランバートの余弦則を使う
入射された光は面で反射される。そして、この面からθ方向への光度は、ランバートの余弦則に基づき、面の法線方向の光度に対してcosθに比例して変化する。
しかし、この面をθ方向から見たときの輝度は、θ方向への光度を見かけ上の面積(dScosθ)で割った値で与えられるため、cosθは相殺され、この面をどの方向θから見た時でも輝度は一定になる。
その結果、面の輝度は視線方向には依存せず、平行光線の入射角の余弦cosαに比例して変化する。

(1)
\begin{align} I=K_d I_i \cos\alpha \end{align}
Kd
物体の拡散反射率(面の色を表している。)
Ii
入射光の色
α
面の垂直方向ベクトル(法線)と光源方向との角度。つまり、入射角。

cosということは、内積である。つまり、面の法線と光源方向ベクトルとの内積 に、入射光の強度をかけたのである。
平行光線が入射角αで平面を照射する場合を考える。
この時入射角余弦の法則から平面に入射する単位面積あたりの光束はcosαに比例して変化する。

平行光線で照射された場合の拡散反射光の強さIは次式で与えられる。

平行光源のつもりで話を進めよう。

(4)
\begin{align} I=K_d I_i \cos\alpha\\ if  \alpha \leq \frac{\pi}{2}\\ =K_d I_i max( \mathbf{n} \cdot \mathbf{l} ,0) \end{align}

コードで書くとこうなる

float diffuseLight=max(dot(_lightpos,_normal),0);

法線と光の方向ベクトルの間の角度が90度を超えたら、それは光があたってないのと同じ。
だから,0にしたい。
max()関数が、角度90以下の時だけ適用される働きをしている。

拡散反射率

dot(_lightpos,_normal)

ambient blender-material

サポートサイト Wikidot.com ambientblender-material