双方向反射率分布関数bidirectional reflectance distribution function(BRDF)

本物のページはこちら→brdf

双方向反射率分布関数(そうほうこうはんしゃりつぶんぷかんすう)は、光の反射モデルのひとつ。
BRDF(Bidirectional Reflectance Distribution Function)
ある方向からの入射光が各方向へどれだけ反射されるか。
マテリアルの特性を示す。

物理的に正しいBRDFにするためは2つの重要な決まりがあります

  1. エネルギー保存してないといけない。….反射光のトータル量(積分結果)は入射光の量を超えてはいけない。
  2. 相互性(Reciprocity)….入射角と反射角を交換しても関数の結果は同じ値になる $f(l,v) = f(v,l)$

BRDF関数の結果

RGB値。エネルギー値。

BRDFの式

おおまかにいうと、
与えられた入射方向に対する、反射方向の比になっている
BRDFは次のような関数であらわされる

(1)
\begin{equation} f(l,v) \end{equation}
  • l…incoming directions..入射方向 光のベクトル 光源が面に当たるまで
  • v…outgoing directions…反射方向 ビューベクトル 光が面に当たって人間の目に入るまで

BRDFは反射放射輝度の微分を放射照度の微分で割ったものである

(2)
\begin{align} f(l,v) = \frac{dL_o(v)}{dE(l)} \end{align}
  • $dE(l)$…ライトベクトルlの周りにごく微小の立体角があって、照らされた面の照度の値がdE
  • $dL_o(v)$…面に当たった光はあらゆる方向に反射しますが、その中でもビューベクトルv方向に反射している光の量がdL

つまりざっくりいうと、光が面が当たった時にどのぐらい反射するのかを示す関数がBRDF
関数の結果はRGBで出る。
光源が面光源ではなく、面積を持たない(という仮定の)点光源や平行光源だった場合、式はもっと簡単になる

(3)
\begin{align} f(l,v) = \frac{L_o(v)}{E_L\overline{cos}\theta_i} \end{align}
  • $E_L$…ライトベクトルlに対して垂直方向の面に当たったという仮定での光源の照度
  • $L_o(v)$…面に当たった光はあらゆる方向に反射しますが、その中でもビューベクトルv方向に反射している光の量
  • $\theta_i$…ライトベクトルlと面の法線nのなす角度

CGで使うときのBRDFの式

おおまかに表現すると

(4)
\begin{equation} f(l,v) = diffuse項+specular項 \end{equation}

BlenderのCyclesでいうところの

  • diffuse項…Diffuse BSDFノード
  • specular項…Glossy BSDFノード

に該当する。

Microfacet BRDF

see Cook-Torrance

BRDFのエネルギー保存の法則

(5)
\begin{align} \int_H^2(n) f(l,v) cos\theta d\omega \leq 1 \end{align}

BRDFの結果が1を超えないことがエネルギー保存の法則を守ることになる

BRDFは最終的にピクセルの色にどのように関わるのか?

レンダリング方程式のページへ
レンダリング方程式の中にBRDFが組み込まれています。

isotropic BRDFとanisotropic BRDF

isotropicは等方性 方向に依存しない。法線nの周りをまわっている限りどの方向でも同じ結果
ただし、l,n,vの相対的な位置関係は一緒にしておく。

anisotropicは方向に依存する。
実装はisotropic BRDFの方が簡単
isotropic BRDFは入力に3つのスカラー値だけでok

  1. $\phi$….光のベクトルとビューベクトルのなす方位角
isotropicでは不要だけどanisotropicでは必要なパラメータ
  1. $\phi_i$….光のベクトルの方位角
  2. $\phi_o$…ビューベクトルの方位角
  3. $\vec{t}$…光のベクトルとビューベクトルのタンジェントベクトル 面に沿ったベクトル

正規化BRDF

計算結果が0.0~1.0の間しか出ないものがちゃんと正規化されたBRDFモデル
Blinn-Phongのモデル,ランバートのモデルなどは結果が0.0~1.0とは限らない。
そこで、正規化するために何か掛け算する。
この掛け算する値のことをnormalization factor 正規化係数と呼び
これをかけた後のBRDFを正規化BRDFという。

面の反射特性を表す関数

そこに光が当たったら、どの程度の強さで反射するのか
分布を3次元的に示したもの。

物体表面、か表面の非常に浅い部分から反射した光しか取り扱うことができない。
面に対する半球体でしかない。

サポートサイト Wikidot.com