Processing math: 100%

屈折

2009-07-19

レイトレーサーを作るシリーズ:

屈折ベクトルrは、nを法線ベクトル、eを法線と垂直のベクトルとすると

r=esinθ2ncosθ2

光が屈折率の異なる物質に入射するとき、入射する光の角度と出て行く角度の間にスネルの法則:

η1sinθ1=η2sinθ2

が成り立つ。

refraction

また 、cosθ1=(v)ne=v(vn)nsinθ1

よって屈折ベクトルr

r=esinθ2ncosθ2=(v(vn)nsinθ1)(η1η2sinθ1)n1sin2θ2=(v(vn)n)(η1η2)n1(η1η2sinθ1)2=η1η2(v(vn)n)n1(η1η2)2(1cos2θ1)=η1η2(v(vn)n)n1(η1η2)2(1(vn)2)
  • 屈折率は、ダイヤモンドの 2.417 にしてみた
  • 手抜きで球の表面から入るときだけじゃなくて出るときにもちゃんと屈折させないとそれらしくならなかった
  • 画角を60度に変えたり
  • HLSLにはrefractという組み込み関数がある。全反射で屈折できなかったらどうするんだろうと少し心配。