ランバート反射

最終更新日30 May 2017 13:17

lambertian.png

すべての方向の光は、同じ程度反射する、反射モデル。
拡散光にぴったりである。
その明るさは、視線方向が変わっても同じである。
だから、拡散光の計算には視線ベクトルは必要ない。
法線光源の方向にのみ依存する。

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

式をもっと実際にシェーダーに書くときに近い形に変形すると

(2)
\begin{align} I = C_{diff} E_L <\vec{n} \cdot \vec{l}> \end{align}
  • $I$放射輝度求めたい最終的なピクセルの色になる(r,g,b)
  • $cos\alpha = \vec{n} \cdot \vec{l}$
  • $< >$…0以下にならないようにクランプするという意味です
  • $E_L$…光源の色 irradiance放射照度 (r,g,b)
  • $C_{diff}$…diffuse色 物体の持つ色
float diffuse_intensity=max(dot(light,normal),0);//光源の拡散反射強度
gl_FragColor = diffuse_color*light_color*diffuse_intensity;
  • light….光の方向ベクトル。長さ1に正規化
  • normal…面の法線

デモ


by ShaderToy

ランバート反射のBRDF

(3)
\begin{align} \frac{C_{diff}}{\pi} \end{align}
  • $C_{diff}$..diffuse色
  • $\pi$$cos\theta$を半球積分した結果が$\pi$なのでここに$\pi$が来ている

not-pbr reflection-model


ファイル

サポートサイト Wikidot.com not-pbrreflection-model