屈折を使用する

マテリアルで屈折を使用するためのガイドです。

空気から水など、光が媒質間を通過するとき、2 つの媒質が交わる箇所で光の進む方向が変わります。この光の現象は屈折と呼ばれており、光が異なるタイプのマテリアルに入ると光波の速度が変化するために発生します。Unreal Engine では、 Main Material ノードRefraction 入力を使用すると、マテリアルでこの光の現象をシミュレートすることができます。

屈折

屈折 とは、伝搬媒質が変わることによる光波の方向の変化を表すために使用する用語です。つまり、光が水、ガラスなどの特定の表面にあたると、その表面は光がそれらを通過する速度に影響するため、光が曲がったり、進む方向を変えたりします。

典型的な例として、水を入れたボウルに鉛筆を浸けると屈折を確認できます。鉛筆と水が交わる箇所で、鉛筆が曲がったり、方向が変わったように見えます。次の画像は、屈折の仕組みを示しています。

Refraction illustration

X は、水に浸けた実際の位置を示しています。鉛筆の水に浸かった部分の光線は、空気と水の界面で屈折し、速度と方向が変化します。カメラから見ると、鉛筆は水面で曲がっているように見え、先端が本来の位置 X ではなく、Y にあるように見えます。

屈折率 (IOR)

屈折率 (IOR) は、光が特定のマテリアルに入射したときにどの程度曲がるか、つまり屈折するかを表す光学的測定で使用する用語です。屈折率は測定可能であり、一般的な表面の実際の値はよく知られています。Unreal Enging で屈折マテリアルを作成する場合は、実際の IOR 値を使用して、よりリアルなマテリアルを作成することをお勧めします。次の表は、一般的な表面で測定された IOR 値を示しています。

マテリアル

IOR 値

空気

1.00

1.33

1.31

プレキシガラス

1.49

ガラス

1.52

ダイヤモンド

2.42

マテリアルで屈折を使用する

屈折を使用するマテリアルを作成するには、次の手順を実行します。

このチュートリアルでは、Unreal Engine の スターター コンテンツ のアセットを使用します。コンテンツをプロジェクトに含めていない場合は、「アセットを移行する」を参照して、スターター コンテンツを現在のプロジェクトに移行する方法を確認してください。

  1. コンテンツ ブラウザ右クリック し、コンテキスト メニューの [Create Basic Asset (基本アセットを作成)] セクションで [Material (マテリアル)] を選択します。マテリアルの名前を「RefractionMaterial」に変更します。

    Create Material asset

  2. そのマテリアル アセットを ダブルクリック し、マテリアル エディタで開きます。

    Open Refraction Material

  3. [Details (詳細)] パネルで、[Blend Mode][Opaque] から [Translucent] に変更します。[Translucent] セクションを展開し、[Lighting Mode][Volumetric NonDirectional] から [Surface TranslucencyVolume] に変更します。これらの設定を変更すると、Main Material ノード上の Refraction ピンが有効になります。この設定を完了すると、[Details] パネルのプロパティは、次のようになります。

    Details panel properties

  4. 次のマテリアル式ノードを検索して、各ノードを以下に示す個数でグラフに追加します。次の画像のようなマテリアル グラフになります。

    • 定数 x 3

    • スカラー パラメータ x 2

    • Lerp x 1

    • Fresnel x 1

    Material Graph with required nodes

  5. 次の画像のように、マテリアルの接続を開始します。Base Color と Metallic に接続している定数の値を「1」に変更します。スカラー パラメータの 1 つの名前を「Opacity」に変更して、デフォルト値として「0.3」を指定し、Opacity 入力に接続します。

    Base Color, Metallic, Roughness nodes

  6. 2 番目のスカラー パラメータの名前を「IOR」に変更し、そのデフォルト値を「1.52」(ガラスの IOR) に変更します。画像の枠線で囲まれている部分に示すように、マテリアルの接続を完成させます。

    Fresnel refraction logic

    ガラスではすべての角度で光の屈折が異なるため、Fresnel マテリアル式を使用して、Lerp ノードの 2 つの値をブレンドします。ガラスは真正面から見ると光はあまり屈折しませんが、視射角では屈折が顕著になります。Fresnel ノードはこの効果を再現します。入力 A の 定数 値はマテリアルの中心にマッピングされ、入力 B の IOR パラメータ はカメラから遠ざかるほど球体が湾曲するエッジ部分にマッピングされます。

    Fresnel マテリアル式の動作の詳細については、「マテリアルでフレネルを使用する」を参照してください。

  1. ツールバーで [Apply (適用)][Save (保存)] の順にクリックして、マテリアルをコンパイルして、アセットを保存します。マテリアルが保存されたら、マテリアル エディタを閉じます。

    Compile and save Material

  2. コンテンツ ブラウザRefractionMaterial アセットを検索して、そのサムネイルを右クリックし、コンテキスト メニューで [Create Material Instance (マテリアル インスタンスの作成)] を選択します。

    create-material-instance.png

  3. シーンにオブジェクトをいくつかドロップして、マテリアルをテストします。以下の例では、スターター コンテンツ の「Shapes」フォルダにあるアセットを使用していますが、どのオブジェクトでも使用できます。RefractiveMaterial_Inst アセットを、コンテンツ ブラウザからシーンのメッシュにドラッグします。球体のエッジ部分では光が屈折して見えますが、ジオメトリがカメラの真正面にある中央では光が屈折していないことがわかります。これは、前述したフレネル ロジックによるものです。

    Apply refractive Material instance

  4. RefractionMasterial_Inst をダブルクリックして、マテリアル インスタンス エディタで開きます。パラメータ名の横にあるボックスをオンにして、IOR パラメータ を有効にします。有効になったら、IOR を異なる値に設定して、さまざまな表面相互作用をシミュレートすることができます。次のビデオでは、値を「1.0」(空気)、「1.33」(水)、「1.52」(ガラス)、「2.42」(ダイヤモンド)に設定した場合に、屈折がどのように変化するかを示しています。

屈折のヒントとコツ

このセクションでは、屈折をマテリアル エディタの他の要素と組み合わせて使用することで、複雑で魅力的な屈折サーフェスを作成する方法をいくつか紹介します。

屈折と法線マップ

屈折マテリアルと法線マップを併用するオプションを追加すると、特に法線マップが多くの興味深いディテールを含む領域で、非常に魅力的な結果を生成することができます。次の手順を実行して、先程作成した RefractiveMaterial が法線マップを使用して機能するように変更します。

  1. まず、使用する法線マップを見つけます。この例では、スターター コンテンツの T_Water_N を使用しましたが、どのような法線テクスチャでも機能します。RefractionMaterial アセットを開いて、法線テクスチャを コンテンツ ブラウザ からマテリアル グラフにドラッグします。

    Add normal map to graph

  2. 法線マップのテクスチャ サンプラーを 右クリック し、[Convert to Parameter (パラメータに変換)] を選択します。パラメータ名を「Normal Map」に変更し、Main Material ノードの **Normal**入力に接続します。テクスチャをパラメータ化することで、アーティストは親マテリアルを編集することなく、 マテリアル インスタンス でテクスチャをオーバーライドすることができます。

  3. ツールバーで [Apply (適用)][Save (保存)] の順にクリックして、マテリアルを閉じます。

    Compile and save Material

  4. これで、マテリアル インスタンス エディタの [Global Texture Parameter Values (グローバル テクスチャ パラメータ値)] に**Normal Map** パラメータが表示されるようになります。このパラメータを有効にして、ドロップダウン メニューから別のテクスチャを選択すると、法線マップをオーバーライドできます。

    Normal Map parameter

  5. 法線マップを変更することで、マテリアルの屈折を興味深い方法で変更することができます。以下に、スターター コンテンツの「Textures」フォルダにある法線マップのみを使用した例をいくつか紹介します。

    Normal Map examples

屈折と移動

屈折と動きの組み合わせは、多くの種類のマテリアルにおける重要な要素です。水面の波紋はその一例ですが、この手法は、かげろう、大爆発による歪み、エネルギー効果など、多くの VFX マテリアルでも同様に役立ちます。

次のグラフに示しているのは、法線に有機的な外観の動きを追加する 1 つの方法です。法線マップを複製し、それらを Lerp ノードの A 入力および B 入力に接続します。グラフに 2 つの Panner マテリアル式を追加して、それらを Normal Map テクスチャの UVs に接続します。

Normal map animation graph

Panner ノードの値を変更して、テクスチャに動きを追加します。いくつかの値を負に設定すると、テクスチャが反対方向に動きます。これは、有機的でランダムな見かけの動きを作成できる優れた方法です。この例では、2 つの Panner で使用されている値を示しています。

Panner motion values

次のビデオでその結果を示します。現在の状態では、油性の金属的な流体のように見えますが、いくつか修正を加えることで、水マテリアルのベースにすることができます。

屈折深度バイアス

Refraction Depth Bias (屈折深度バイアス) は、近くの物体が鋭角の視野角で歪んだサーフェスにレンダリングされないようにする手段です。ただし、これにより、サーフェスと屈折開始位置とのずれが増加します。 次の 2 箇所で 屈折深度バイアス を調整できます。

  • マテリアル エディタ - マテリアル セクションの [Details (詳細)] パネルに [Refraction Depth Bias (屈折深度バイアス)] があります。このプロパティを表示するには、白い三角形 (緑でハイライトされている箇所) を押す必要があります。

    Refraction Depth Bias in Material Editor

  • マテリアル インスタンス エディタ - [Details] パネルの [General (一般)] セクションに [Refraction Depth Bias] があります。

    Refraction Depth Bias in Instance Editor

まとめ

マテリアルに屈折を追加することは、ガラスや水などの透明のマテリアルでリアルな外観を作成する優れた方法です。このドキュメントの上部に記載されている表を参照して、シミュレートしようとしているサーフェスのタイプの IOR 値を必ず使用してください。IOR 値は実世界の測定値に基づいているため、リアルさを追求する場合は、IOR を実際よりも高くしたり低くしたりすることはお勧めしません。VFX やその他の屈折がそれほど厳密でないアプリケーションでは、当然ながら、いろいろと試して、求める美観に合った値を使用することができます。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル