BlenderのSpecular(鏡面反射)を解説したときに、反射と屈折について少し詳細を省略したので、もう少し詳しく書きたいと思い、理解の補足として書いています。
※光学の専門家ではありません、かつBlenderやCGをする上での理解のため書いておりますので間違っている可能性もあります。
物質の材質とIOR
物質は光沢の強い金属や、ざらざらした石、透過したガラスやキラキラしたダイヤモンドなど様々な質感をしています。表面の粗さ(ラフネス)や、光をどれほど反射するか(または屈折するか:IOR)は物質の質感を決める重要な要素です。
ラフネス(表面の荒さ)は、ごつごつして凹凸だらけの泥団子でも磨けばつるつるになります。静かなときには平滑な水面も、波が立ったら表面はボコボコしてきます。ラフネスは物質にとっては変化する要素であり、固定された数値はありません。

Specularの記事でも書きましたが、IOR(Index of Reflaction:屈折率)とは、光が空気中から物質に入るときにどれだけ曲げるかの値です。(正確に言うとどれだけ光が遅くなるかの比率です。)
IORは物質ごとにおおよそ決まっている値です。そのため、私たちはキラキラと強く反射する石を見て「ダイヤモンドのような宝石だろう」と感じたり、まったく反射のないマットな表面を見て「これは紙のような素材だ」と判断するなど、見た目の手がかりから物質を推測しています。
そしてIORが高ければ高いほど反射が強くなっていきます。

光は「反射」と「屈折」をする
光は反射光と屈折光に別れる
右の画像を見てください。綺麗な水に空や木が映っています。
しかし、子供がいる手前の方は水底の小石が見えています。
画像の奥側では光が反射し周囲の風景を映し出し、手前では光が屈折して水の底に届いているから水底の小石が見えるということですね。
光は違う物質に当たると、入射したときのエネルギーを保存しながら屈折光と反射光に別れます。
場所によって光が反射したり屈折したり、または二つの状態が混ざり合っていて、見え方が変わってくるのです。


場所によって反射する強さは違う
場所によって光が反射したり屈折したり、または二つの状態が混ざり合っていて、見え方が変わってくるのです。

Fresnel Curve(フレネルカーブ)
反射の強さは入射角によっている
上記の水面の例のように、水面の場所によって屈折や反射をする強さが違うのは、光の入射角が関係しています。
ボールのような物体に光が当たると、表面の中心では、光がその部分の法線とぴったり一致し、入射角は0°になります。
一方、表面の端(ふち)に近づくほど、法線と光の角度は広がっていき、入射角は大きくなっていきます。
最も端では、入射角は90°に近づきます。
さっきの水面の場合、遠くを見て、入射角が大きくなればなるほど反射が強まっていきました。
入射角によって、光が反射する割合、屈折する割合が変わります。これをフレネル反射率といいます。

フレネル反射率とは?
光が空気(IOR ≒ 1.0)から別の物質(たとえば水やガラス)に入ろうとすると、一部は反射し、一部は物質の中に進んで屈折します。
入射した光を100%としたとき、それは物質の表面で反射する光と屈折して内部に進む光に分かれます。このうち反射される割合を「フレネル反射率」といい、その値は主に入射角と物質の屈折率(IOR)の2つの要素によって決まります。
ある物質に80°の入射角で光が入ったときに、入射光のうち60%が反射し、40%が屈折して内部に進んだとします。
このときのフレネル反射率 F(80°) は 0.6 となります。
この反射率を入射角(0°〜90°)で変化させてグラフにすると、フレネル(反射)カーブが描かれます。
右のグラフを見るとわかるように、入射角が小さいときは反射率は非常に低く、角度が大きくなるにつれて反射率が急激に増加し、最終的にはほぼすべてが反射されるようになります。かなり極端なカーブを描くのが特徴です。

物質のIOR(屈折率)によってフレネルカーブの曲線がどのように描かれるか決まっています。
IORが高いほどF0(入射角0°のフレネル反射率)が大きく、低いほど小さいです。
つまり、IORが高い水晶(約2)は中心部付近でも景色が反射して見えたりしますが、IORが低い水(約1.33)ではフチ近辺じゃないとほぼ反射していません。

Blenderでフレネルカーブを見てみよう
Blenderでフレネル反射率の違いを見てみます。
- Planeにチェック模様をつけます。
- CubeにGlassBSDFをつけて色は白にします。(Normalで波を再現しても良い)
- かなり拡大する(遠くの反射を確認したいので)
- HDRI画像で映り込みがわかりやすい背景を選択します。
これで背景の映り込みと透明な物質の下のチェックの模様まで透過しているかどうか確認できます。
Glass BSDFのIORを変化させて反射を観察しましょう。


IORが大きくなるほど近い場所でもくっきり反射しています。さらにチェックの屈折(歪み)も大きくなっていてわかりやすいですね。
ちなみにPrincipled BSDFノードのSpecularタブの中のIOR Levelという項目は、フレネルカーブ全体の強度を制御します。

BlenderマニュアルにはIOR Levelは「0のとき全ての反射を消し、0.5がそのまま、1で入射角が法線のとき(F0)の値を二倍にする」と書いてあります。
※IOR Levelは透過させた物体だと無効になるのか変化しませんでした
フレネルノードで反射と屈折を制御する
BlenderのFresnel(フレネル)ノードはフレネルカーブの値を出力しています。普通の物質(IORが1より大きく3周辺くらいまで)なら、中心の値が低くて周辺部分の値が高くなります。

このフレネルカーブの値を使って、屈折と反射を制御し、ガラスなどを再現できます。
右図がGlass BSDFノードを使ってガラスを表現したもの(IOR1.5)

下図がRefraction(屈折)BSDFとGlossy(光沢) BSDFを使ってガラスを再現したもの。

フレネルノードからフレネル反射率をMix Shaderノードのファクターに入れることで、「中心部は屈折」、「周辺部は反射」が表現できました。
IORやフレネルカーブを理解することは、リアルなマテリアルの再現につながります。自分で屈折や反射を制御し、オリジナルで面白いマテリアルを生み出すこともできるかもしれません。