【Unity】【シェーダ】refract関数の使い方と屈折率について

refract関数の使い方と屈折率についてです。

refract?

シェーダで使える関数にrefract()というものがあります。
これは任意のベクトルと法線と相対屈折率を与えることで屈折方向のベクトルを得られるものです。

f:id:halya_11:20181202180553p:plain

相対屈折率?

屈折率には絶対屈折率と相対屈折率があります。
絶対屈折率は物質ごとに決まる屈折率です。
これに対して、二つの物質間の絶対屈折率の比を相対屈折率と言います。

光がどのくらい屈折するかは二つの物質の屈折率により決まるので、屈折方向の計算には相対屈折率が必要です。
refract関数の引数には相対屈折率を渡すのはこのためです。

ちなみにですが、絶対屈折率は真空を基準とした値であり、すなわち真空の絶対屈折率は1です。

相対屈折率の求め方

いま空気から水晶に光が差し込むことを考えます。

空気の絶対屈折率はほぼ1、水晶は1.5443です。
これらから、相対屈折率は1 / 1.5443 ≒ 0.6475 として求められます。

参考

屈折率 - Wikipedia