ある媒質から別の媒質に光が通過すると、例えば空中から水中に、光の伝搬方向は 2 つの媒質の接触面で変化します。 この光の現象は屈折と呼ばれます。屈折は、光の伝搬速度が光が接触する様々なタイプのマテリアルによって変化するために発生します。 UE4 内では、Refraction (屈折) を使用してこの光の現象をマテリアルでシミュレーションすることができます。
Refraction (屈折)
屈折 とは、伝搬媒質が変わることによる光波の方向の変化を表すために使用する用語です。 つまり、光があるサーフェスと接触すると、例えば水やガラスなど、光は若干曲がります。これは、こうしたサーフェスが光が伝搬する速度に影響を及ぼすからです。 屈折を最も良く表す例として、水中に鉛筆の一部を入れることを考えます。 水に入れられた鉛筆の部分は、鉛筆と水の接触する場所で屈折のために曲がっているように見えます。 以下は屈折の仕組みを表した非常に単純な例です。

水中の鉛筆は、カメラから見ると屈折のために曲がっているように見えます。 これは、元々の鉛筆の位置である X からの光波が、水の屈折による影響を受けていて、カメラから見ると実際に Y から生じているように見えるためです。 これは、水にぶつかったとき、そして空中にぶつかったときに再度光の伝搬速度が変化するために起こります。
屈折率 (IOR)
屈折率 すなわち IOR (Index of Refraction) は、光学単位であり、光がある媒質から別の媒質に伝搬するときにどの程度曲がるかを正確に表します。 この光の現象は測定可能であるため、こうした光学単位を UE4 内で使用して屈折の見え方に影響を与えて 3D ワールドをよりリアルなものにします。 以下は日常的に操作する可能性のある物質の IOR 値です。
マテリアル | IOR 値 |
---|---|
空気 | 1.00 |
水 | 1.33 |
氷 | 1.31 |
ガラス | 1.52 |
ダイヤモンド | 2.42 |
マテリアルで屈折を使用する
屈折を利用するマテリアルを設定するには以下の手順に従います。
このチュートリアルは、プロジェクトにスターター コンテンツを含めたことを想定しています。そうしなかった場合は、別のプロジェクトからプロジェクトにスターター コンテンツを 移行 する方法をご覧ください。
-
まず、新規マテリアルを作成します。[コンテンツ ブラウザ] 内で 右クリック して新規マテリアルを作成します。次に、[Basic Asset List] からマテリアルを選択して 「Refraction_Material」 と名前を付けます。完了すると、[コンテンツ ブラウザ] は以下のようになります。
-
上記で作成したマテリアルを開くには、[コンテンツ ブラウザ] でそのマテリアルを マウスの左ボタン を使って ダブル クリック して開きます。開いたら Blend Mode を Opaque から Translucent に変更します。また、Lighting Model を Volumetric Non Directional から Surface Translucency Volume に変更します。完了すると、[Details (詳細)] パネルは以下のようになります。
-
これでマテリアルに正しいプロパティが設定されたので、必要なマテリアル表現式ノードを追加していきます。このマテリアルでは、以下のタイプと数のマテリアル式ノードが必要になります。
- Constant x 5
- Lerp x 1
- Fresnel x 1
-
すべての必要なマテリアル式ノードがマテリアル グラフに追加された状態で、次は全ての接続を開始します。 完了すると、マテリアル グラフは以下のようになります。
-
後で簡単にテストできるようにするために、Lerp の B 入力に入るConstant マテリアル式ノードを選択し、その上で 右クリック します。表示されるメニューから [Convert to Parameter (パラメータへ変換)] オプションを選択します。終了したら、この入力に名前を付けるようにしてください。ここの例では、 IOR という名前を使用します。完了すると、マテリアル グラフは以下のようになります。
-
[Apply (適用)] ボタンと [Save (保存)] ボタンの両方を押して、マテリアル エディタを閉じます。
-
マテリアルが閉じたら、コンテンツ ブラウザ でそのマテリアルを探します。見つかったら、そのマテリアル上で 右クリック し、メニューから [Create Material Instance (マテリアル インスタンスを作成)] を選択します。上記を完了すると、コンテンツ ブラウザ は以下のようになるはずです。
-
マテリアルのインスタンスを作成した状態で、いくつかのオブジェクトをワールドに追加してマテリアルのプレビューをよりよいものにします。プロジェクトにスターター コンテンツを含めた場合は、「Shapes」 フォルダ内に様々な形状が数多く存在します。この例では、キューブ、コーン、球体がワールドに追加されています。
キューブ、コーン、球体がみつからない場合、プロジェクトにスターター コンテンツが含まれていないことを意味します。スターター コンテンツを含めなかった場合は、新しいプロジェクトをスターター コンテンツを含めて作成するか、別のプロジェクトからこのプロジェクトにスターター コンテンツを 移行 することができます。
-
これでテストするいくつかの形状が用意できたので、Refraction Material Instance (屈折マテリアル インスタンス) を形状に適用します。まず、コンテンツ ブラウザ で マウスの左ボタン でマテリアル インスタンスを選択したら、それを形状の上にドラッグして マウスの左ボタン を放します。完了すると、レベルは以下のようになります。
-
Refraction マテリアルを開くには、コンテンツブラウザ でそのマテリアルを マウスの左ボタン で ダブルクリック します。開いたら、マウスの左ボタン でチェックマーク上をクリックして IOR パラメータを有効にします。アクティブになったら IOR を別の値に設定し、異なるサーフェスの相互作用をシミュレーションすることができます。以下は、デフォルトの水の IOR 1.33 からガラスの 1.52、そして最後に ダイヤモンドの 2.42 に変更する例です。
屈折のヒントとコツ
以下のセクションでは、屈折をマテリアル エディタの他の機能と組み合わせて使う他の方法で面白い結果を導きます。
屈折と法線マップ
屈折マテリアルが法線マップを使用するためのオプションを追加すると非常に面白い結果が得られます。特に、法線マップが多くの興味深いディテールを持っているエリアでこれが顕著になります。 上記の方法で作成したマテリアルを以下の方法で修正すると、法線マップで作業できるようになります。
-
まず、使用する法線マップを見つけます。この例では、T_Brick_Clay_Old_N を使用しています。しかし、どの法線でも機能します。法線が見つかったら、Refraction_Material を開いて、その法線マップを コンテンツ ブラウザ からそのマテリアル グラフにドラッグします。
-
法線マップをマテリアル グラフに配置したら、それを Normal (法線) の入力に接続します。接続したら、Normal map Texture Sampler ノードを選択し、その上で 右クリック します。表示されるメニューから [Convert to Parameter] オプションを選択します。「Normal_Map」 と名前を付けます。
-
[Apply (適用)] ボタンと [Save (保存)] ボタンの両方を押して、マテリアルを閉じます。
-
マテリアルをコンパイルし、保存した状態で、マテリアル インスタンスを開きます。[Parameter Groups] で [Texture Parameters Values] セクションを見ます。ここでは法線マップが編集可能なパラメータであることがわかります。法線マップを変更するには、グレイアウトされたチェックマーク ボックスをクリックして最初にそれを有効にするだけです。有効になったら、コンテンツ ブラウザ で新しい法線マップを見つけて選択し、[Use Selected Assets from the Content Browser (コンテンツ ブラウザから選択したアセットを使用)] ボタンを使用して選択した法線マップをマテリアル インスタンスに割り当てます。
-
法線マップを変更することで、屈折の見え方を面白くすることができます。以下はスターター コンテンツのテクスチャ フォルダにある法線マップのみを使用した例です。
屈折と動き
Panner マテリアル式 ノードをマテリアル グラフに追加し、それ法線マップ テクスチャの UV に差し込んだ場合、非常に面白い結果が得られます。 この方法は、ガラスの窓に効果的かもしれませんが、かげろうや大きな爆発による歪みなどに役立ちます。

反射深度バイアス
反射深度バイアス には、近くの物体が鋭角の視野角で歪んだ表面にレンダリングされないようにします。 しかし、これはサーフェスと屈折開始位置とのずれを増やします。 UE4 内の以下の 2 つの場所で、反射深度バイアス を調整できます。
-
マテリアル エディタ - マテリアル セクションの [Details (詳細)] パネルに [Refraction Depth Bias (反射深度バイアス)] があります。このプロパティをエクスポーズするには、白い三角 (緑でハイライト) を押す必要があります。
-
マテリアル インスタンス - [Details (詳細)] パネルの [General (一般)] セクションに [Refraction Depth Bias (反射深度バイアス)] があります。
まとめ
マテリアルに屈折を追加することは、特にガラスや水では、非常にリアルな外観にする素晴らしい方法です。 シミュレーションしようとするサーフェス タイプに対して正しい IOR 値を必ず使用するようにしてください。 IOR 値をサーフェスで使用する値を超えて高くしたくなるかもしれませんが、こうした衝動は抑えてください。 IOR 値は、現実世界で測定された値に由来するものであるため、IOR を想定値よりも高くしたり、低くしても見栄えは良くなりません。