この記事にはプロモーションが含まれています。

【Blender4.4】反射と屈折:フレネルカーブとフレネルノードの関係

blender

BlenderのSpecular(鏡面反射)を解説したときに、反射と屈折について少し詳細を省略したので、もう少し詳しく書きたいと思い、理解の補足として書いています。

※光学の専門家ではありません、かつBlenderやCGをする上での理解のため書いておりますので間違っている可能性もあります。

スポンサーリンク

物質の材質とIOR

物質は光沢の強い金属や、ざらざらした石、透過したガラスやキラキラしたダイヤモンドなど様々な質感をしています。表面の粗さ(ラフネス)や、光をどれほど反射するか(または屈折するか:IOR)は物質の質感を決める重要な要素です。

ラフネス(表面の荒さ)は、ごつごつして凹凸だらけの泥団子でも磨けばつるつるになります。静かなときには平滑な水面も、波が立ったら表面はボコボコしてきます。ラフネスは物質にとっては変化する要素であり、固定された数値はありません。

Specularの記事でも書きましたが、IOR(Index of Reflaction:屈折率)とは、光が空気中から物質に入るときにどれだけ曲げるかの値です。(正確に言うとどれだけ光が遅くなるかの比率です。)

IORは物質ごとにおおよそ決まっている値です。そのため、私たちはキラキラと強く反射する石を見て「ダイヤモンドのような宝石だろう」と感じたり、まったく反射のないマットな表面を見て「これは紙のような素材だ」と判断するなど、見た目の手がかりから物質を推測しています。

そしてIORが高ければ高いほど反射が強くなっていきます。

BlenderでIORを変化させていったときの反射の強さの変化
物質IOR(屈折率)
空気1.0003(≒1)
1.33
ガラス(一般)1.50〜1.52
1.51
ダイヤモンド2.42
材料の屈折率5種類の一覧表

材料の屈折率一覧表 《光学》を参考にしています。

スポンサーリンク

光は「反射」と「屈折」をする

光は反射光と屈折光に別れる

右の画像を見てください。綺麗な水に空や木が映っています。

しかし、子供がいる手前の方は水底の小石が見えています。

画像の奥側では光が反射し周囲の風景を映し出し、手前では光が屈折して水の底に届いているから水底の小石が見えるということですね。

光は違う物質に当たると、入射したときのエネルギーを保存しながら屈折光反射光に別れます。

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

水辺では水底が見えているが、遠くの場所では空や木が映り込んでいる

場所によって反射する強さは違う

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

近いほど屈折の光で水底が見え、遠いほど反射の光で空や木の映り込みが見える図解

人間は複雑な光が好き?

人間ってダイヤモンドとか透き通ったもの、キラキラしたカードとかエフェクトが大好きですよね。

自分は子供の頃、透明なものが好きで、透明のゲームボーイとか買ってました。キラキラしたエフェクトがついたカードとかもすごく好きでした。(今も好きですが)

今思うと、光が屈折したり反射したり複雑にまざりあったものを人間は魅力的に感じるんじゃないかなぁって思っています。

光の反射とか屈折がわかるようになると、日常でも「あ、ここは屈折してる、ここは反射して空が映ってるぞ」と気づき、ちょっとした幸せが増えるんじゃないかなって思います。理解すると、別に物を「所有」しなくても大丈夫って感じるんですよね。

スポンサーリンク

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(屈折)BSDFGlossy(光沢) BSDFを使ってガラスを再現したもの。

フレネルノードからフレネル反射率をMix Shaderノードのファクターに入れることで、「中心部は屈折」、「周辺部は反射」が表現できました。

IORやフレネルカーブを理解することは、リアルなマテリアルの再現につながります。自分で屈折や反射を制御し、オリジナルで面白いマテリアルを生み出すこともできるかもしれません。