フレネル反射

2010-03-12

fresnel

屈折率の物質から入射角で屈折率の物質に入るときの反射率はフレネル方程式で求められる。 入射面に対する光の平行成分の反射率は 、直交成分の反射率は となる、らしい。 偏光されてない光の場合の反射率となる(sqrtいらないの?)。

、屈折して出て行く角度のcosはで求められる。
float fresnel_reflectance(float cos_theta_i, float eta_i, float eta_t) {
float eta = eta_t / eta_i;
float D = 1.0 - 1.0 / sq(eta) * (1.0 - sq(cos_theta_i));
if (D >= 0) {
float cos_theta_t = sqrt(D);
float rp = (eta * cos_theta_i - cos_theta_t) / (eta * cos_theta_i + cos_theta_t);
float rs = (cos_theta_i - eta * cos_theta_t) / (cos_theta_i + eta * cos_theta_t);
float kr = 0.5 * (sq(rp) + sq(rs));
return kr;
} else {
return 1.0;
}
}

Balls under water

よくやるSchlickの近似

error

個人的には、フレネル反射って効果がいまいち微妙であまりありがたみわからないんだよね…。