マテリアルでフレネルを使用する

このページでは、Fresnel Material ノードの使用方法について説明します。

映画やシネマティックを制作しているときには、キャラクターや大道具のシルエットをより効果的に強調する方法が必要になることがよくあります。このライティング手法は、リム ライティングまたはエッジ イティングと呼ばれており、キャラクターのシルエットを背景から際立たせるためのライトを追加します。この手法は映画ではうまく機能しますが、3D シーンにライトを追加すると、さらに複雑になり、たちまち管理が困難になります。

Unreal Engine では、マテリアル レベルでこの問題を解決することができます。フレネル を使用すると、キャラクターやプロップのマテリアルでリム ライティングをシミュレートでき、エフェクトのルック&フィールをより細かくコントロールすることができます。フレネルは、ガラス、水、およびファブリックやペイントの一部など、多くの自然に存在するマテリアルに固有のプロパティです。このチュートリアルで紹介する手法は、これらのマテリアルをより正確にシミュレートするうえで役立ちます。

フレネル

フレネル は、見る角度によって反射する光の強さが異なることを表す用語です。たとえば、プールの上に立って真下を見た場合、水面にはそれほど反射は見られません。ただし、プールの水が自分の目の高さと平行になるように頭を動かすと、水面での反射がだんたん強くなっていきます。水もガラスもフレネル現象が強く、真正面からは比較的透明に見え、視射角では反射が大きくなります。

なお、写真フレームのガラスは、真正面から見ると透明で、横から見ると反射が強くなります。

Unreal Engine では、フレネル マテリアル式 は、サーフェス法線の 内積 とカメラの方向に基づいてフォールオフを計算します。サーフェス法線が直接カメラに向いている場合は、0 の値が出力されます。つまり、フレネル効果が発生しません。表面法線がカメラに垂直に向き合っている場合は、1 の値が出力されます。つまり、フレネルの完全な効果が発生します。結果は [0, 1] にクランプされるため、真ん中にネガティブ カラーは含まれません。次の画像は、この概念を示しています。

Fresnel viewing angle example

球体の中央部 (ラベル 0) では、フレネル効果は発生しません。これは、カメラがサーフェス法線に直接向いているためです。球体の端 (ラベル 1) に向かって、サーフェス法線はカメラに対してますます垂直になり、フレネル効果がより顕著になります。これにより、球体の端が照らされているような印象を与えることができます。

Fresnel ノードの詳細

[Palette (パレット)] またはコンテキスト メニューで「Fresnel」と検索すると、[Utility (ユーティリティ)] で Fresnel マテリアル式が、[Vector Ops (ベクター演算)] でマテリアル関数が見つかります。これらの 2 つのノードは同じ目的で使用されますが、使用するための設定方法が異なります。

Fresnel search palette

Fresnel マテリアル式

[Utility] にある Fresnel マテリアル式は、このチュートリアルで使用されており、2 つのオプションでは Fresnel マテリアル式の方が設定が簡単です。最初はこのバージョンを使用し、Fresnel マテリアル関数はノードの動作がよく理解できてから使用することを強くお勧めします。

Fresnel Material Expression

プロパティ

説明

ExponentIn

この入力はフレネル効果のフォールオフをコントロールします。

BaseReflectFractionIn

これは、サーフェスをまっすぐ見たときのスペキュラ反射の割合を指定します。値を「1」に設定すると、フレネルが実質的に無効になります。

Normal

法線マップを入力することで、フレネル効果のレンダリング方法を変更することができます。法線マップは接線空間からワールド空間に変換されている必要があります (以下参照)。

Fresnel マテリアル式の値を調整するには、次の 3 とおりの方法があります。

  • マテリアル グラフでノードを選択すると、**[Details (詳細)] パネルで値を入力することができます。

Fresnel details panel properties

  • また、入力に定数パラメータやスカラー パラメータを接続することもできます。

    Fresnel input values

  • 法線マップを Normal 入力に接続すると、フレネル効果の外観を変更することができます。法線マップ テクスチャを使用する場合は、Normal 入力に接続する前に、そのテクスチャを TransformVector 式に渡す必要があります。これにより、法線マップが接線空間からワールド空間に変換されます。この変換が行われないと、法線マップが意図したとおりの影響をフレネルに及ぼすことができない場合があります。

    クリックして画像を拡大

Fresnel マテリアル関数

[Vector Ops] カテゴリの Fresnel_Function マテリアル関数は、フレネル効果のいくつかの異なる側面をコントロールできる、高度にカスタマイズ可能なバージョンのフレネルです。この関数の追加された機能には欠点があり、設定を誤るとフレネル効果のレンダリング方法でアーティファクトやエラーが生じる可能性があります。

このマテリアル関数は、[Utility] の Fresnel マテリアル式で求める結果が得られない場合に限り使用してください。

Fresnel Material Function

プロパティ

説明

Normal Vector (V3)

法線を入力して、フレネル効果のレンダリング方法を変更することができます。正確な結果を得るためには、法線マップを Transform ノード (Tangent Space to World Space) を介して渡す必要があります。

Camera Vector(V3)

カメラとサーフェス法線の内積を決定するために使用されるカメラ ベクターを手動で変更します。

Invert Fresnel(B)

フレネルの効果を反転させます。フレネルを中心部または端部のみに適用する必要がある場合に限り役立ちます。

Power(S)

スカラーを入力し、フレネル効果の度合い (またはフォールオフ) を制御します。大きい数値を入力すると、影響を受ける領域が狭くなります。小さい数値では、Fresnel ノードがサーフェスのより広い部分に影響を与えることを意味します。

Use Cheap Contrast(B)

有効にすると、Fresnel ノードは、あまり負荷をかけずに明暗のコントラストを計算する方法を使用します。

Cheap Contrast Dark (S)

フレネルがどのくらい暗くなるかをコントロールします。これは Use Cheap Contrast が有効な場合に限り効果があります。

Cheap Contrast Bright (S)

これは、フレネル効果の明るさをコントロールします。これは [Use Cheap Contrast] が有効な場合のみ効果があります。

Clamp Fresnel Dot Product (B)

フレネルの内積の結果を 0 ~ 1 にクランプします。これはデフォルトでは true であるものの、Static Bool を false に設定することでオーバーライドすることができます。

マテリアルでフレネルを使用する方法

フレネルを使用するマテリアルを作成するには、次の手順を使用します。

  1. コンテンツ ブラウザ右クリック し、コンテキスト メニューの [Create Basic Asset (基本アセットを作成)] セクションから [Material (マテリアル)] を選択します。 マテリアルを作成したら、「FresnelMaterial」という名前を付けます。

    Create FresnelMaterial

  2. コンテンツ ブラウザ でサムネイルを ダブルクリック して新しいマテリアルを開きます。

    Open new Material

  3. [Palette] を展開するか、マテリアル グラフ内で 右クリック してコンテキスト メニューを表示します。次のマテリアル式ノードを検索して、グラフに追加します。

    ノード名

    Vector Parameter Node

    2

    Scalar Parameter Node

    2

    Fresnel Node

    1

    完了したら、マテリアル グラフは次のようになります。

    Add all nodes to Material Graph

    「Fresnel Material Expression」を検索すると、2 種類の Fresnel ノードが表示されるので、そこから選択します。このチュートリアルでは、[Utility] カテゴリにある Fresnel マテリアル式を使用します。

  4. すべてのスカラー パラメータ ノードとベクター パラメータ ノードの名前を次のように変更して、[Details] パネルでデフォルト値を設定します。

    名前

    デフォルト値

    Fresnel Color

    1.0, 0.0, 0.0, 0.0

    Base Color

    0.5, 0.5, 0.5, 0

    Fresnel Falloff

    8

    Roughness

    0.5

    Rename parameter nodes

  5. グラフに Multiply ノードを追加して、次の画像を参考にすべてのマテリアル式を接続します。

    画像を拡大するにはクリックします。

  6. ツールバーで [Apply (適用)] をクリックして、マテリアルをコンパイルし、[Save (保存)] をクリックします。

    Apply and Save Material

  7. マテリアルをコンパイルして保存したら、マテリアル エディタを閉じて、コンテンツ ブラウザで FresnelMaterial アセットを特定します。サムネイルを 右クリック し、コンテキスト メニューで [Create Material Instance (マテリアル インスタンスの作成)] を選択します。

    Create Material Instance

  8. インスタンスを ダブルクリック して、マテリアル インスタンス エディタで開きます。オーバーライドしたいパラメータを有効にするには、各パラメータ名の横にあるチェックボックスをオンにします。パラメータが有効になったら、値を変更してフレネル効果の色と外観を変更することができます。

なお、Fresnel Falloff に入力する値が大きいほど、フレネル効果が端の方に近づき、小さいほど中央に近づきます。以下は、Fresnel Falloff の値を 0 から 10 まで上げた場合の例です。数値が大きくなるほど、青色が球体の端に移動していることを確認してください。

Fresnel falloff example

フレネルおよび法線マップ

フレネルは特定の面のサーフェス法線に基づいて計算されるので、法線マップを使用して、フレネル効果がマテリアル全体に分散される方法に影響を与えることができます。Fresnel ノードは、サーフェス法線がカメラに垂直であるかどうかを確認することで動作します。カメラに垂直な場合、フレネル効果を確認できます。滑らかな球体では、これはフレネル効果が端でのみ発生することを意味します。

ただし、法線マップが導入されると、サーフェスの法線がメッシュのシルエット内に起伏や輪郭があるように変更されます。つまり、フレネル効果は、サーフェスの法線が滑らかであれば見えないような細部をハイライトまたは強調することができます。

この効果を確認できる例として、以下の 2 つの画像について検討してみましょう。左の画像 (1) は、Fresnel ノードが平坦なサーフェス法線で出力する球体を示しています。フレネル効果は、球体の端でのみ確認できます。右の画像 (2) では、法線マップが入力されており、メッシュのサーフェス法線が大幅に変更されています。こちらでは、フレネル効果は、法線マップで定義された輪郭で確認できます。

Fresnel effect on surface normal

次の画像は、法線マップの違いによってフレネルに及ぼす影響が異なることを示しています。

Fresnel and normal map

この比較で使用したマテリアルは、以前に作成したものと同じマテリアルですが、次の変更が行われています。

  • マテリアルの [Blend Mode (ブレンド モード)][Opaque] から [Translucent] に変更しました。

  • [Details] パネルで、[Translucency (透過処理)] の [Lighting Mode]Volumetric Non Directional から Surface Translucency Volume に変更しました。

  • Emissive Color 入力に接続された Multiply 出力を Opacity 入力にも接続しました。

  • 新しい 2D Texture Sampleを追加して、Normal 入力に接続しました。法線テクスチャとしてスターター コンテンツの Tech_Hex_Tile_N を使用しました。

  • 新しいスカラー パラメータを追加して、テクスチャ座標式で乗算し、法線マップにいくつかの基本的な均一のタイリングを実装しました。

法線マップは、Fresnel ノードの Normal 入力に渡すこともできます。これは、フレネル効果の法線を基盤とするマテリアルの法線と異なるようにしたい場合に特に役立ちます。たとえば、Fresnel ノードを使用して、マテリアル上にエネルギー シールドのようなものを表示し、シールドが有効でない場合はそのマテリアルを通常とおりに表示することができます。

上記のマテリアルを使用してこれを実現するには、マテリアルに次の変更を行います。

  1. スターター コンテンツから T_Brick_Clay_New_D テクスチャを追加し、Base ColorRoughness に接続します。

  2. スターター コンテンツにも含まれている T_Brick_Clay_New_N を使用するように Normal 入力を変更します

  3. Transform Material Expression ノードを検索して、マテリアル グラフに追加します。必ず、Tangent Space to World space から変換するように設定します。

  4. 古い法線マップ テクスチャ ノードを Transform ノードの入力に接続して、その出力を Fresnel ノードの Normal 入力に接続します。

完了すると、マテリアルは次のグラフのようになります。

これで、Fresnel ノードのサーフェス法線が、レンガ テクスチャのサーフェス法線とまったく異なるものになりました。フレネル効果は、レンガの上に半透明のレイヤーがあるように見えます。この効果が強すぎると思う場合は、Multiply ノードとスカラー パラメータを追加して、フレネル効果の強度をコントロールすることで、さらに調整することができます。次の画像では、マテリアルで強度のコントロールを実装する方法を示しています。

Fresnel Intensity パラメータを調整することで、サーフェス上のフレネル効果の強度をコントロールすることができます。値を「0」に設定すると効果がオフになり、0 以外に設定すると、以下のようにフレネル効果の可視性が徐々に高まります。

Fresnel intensity demonstration

入力バインディング

Fresnel ノードは、Lerp ノードの 2 つの異なる入力間のアルファ ブレンディングのための幅広い用途のユーティリティです。

下の画像では、Alpha 入力の Fresnel ノードが、Lerp の入力 A と B の赤と緑の色の間の遷移を制御しています。

Lerp blending with Fresnel

同じ論理で、メッシュ上の異なる Roughness 値の配置をコントロールするためにフレネルを使用することができます。次の画像では、フレネルを使用して、球体の端 (0.1) から中心 (0.9) に向かってラフネス値を遷移させています。これは、ガラスの動作方法と同様に、球体が端部付近でより強く反射しているような錯覚を引き起こします。

Fresnel blend for Roughness

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