マテリアル エディタ - マテリアル関数の作成方法

マテリアル関数の作成と、マテリアル内での使用ガイド

Choose your operating system:

Windows

macOS

Linux

異なるマテリアル グラフ中のマテリアル グラフを部分的に再利用すると、マテリアルの作成時間とマテリアルのワークフローの両方のスピードを上げることができます。 Unreal Engine 4 (UE4) では、ユーザーはいわゆる マテリアル関数 を使ってこれを行うことができます。 この操作ガイドでは、マテリアル関数を使って、ビデオゲームでよく見かけるフレネル スタイルのシェーディング エフェクトを作り直してみます。 フレネル スタイルのエフェクトは一般的に、偽りのリムライトを出すためにオブジェクトのエッジを強調表示し、オブジェクトのシルエットを暗闇で見えやすくします。

マテリアル関数の作成 にはマテリアル関数の作成と使用に関する大切な情報が載っていますので、必ずご一読ください。

マテリアル関数

マテリアル関数 は、パッケージに保存して複数のマテリアルで使い回すことのできる、 マテリアル グラフの小さなスニペットです。マテリアル関数は複雑なマテリアル グラフ ネットワークを保存し、別のマテリアル内ですぐに再利用できるようにし、 また、アーティストがマテリアルの作成をしやすいように、複雑なネットワークを 1 つのノードに抽象化します。

マテリアル関数の作成

マテリアル関数を作成するには、以下の手順に従います。

  1. まず最初に、マテリアル関数を作成する必要があります。 作成方法は、 コンテンツ ブラウザ 右クリック して [New (新規)] > [Materials & Textures] > [Material Function (マテリアル関数)] を選択します。

  2. 作成したマテリアル関数には名前を付ける必要があります。 マテリアル関数を見た人が分かりやすいように、内容を説明したような名前をつけることが望ましいです。 このサンプルでは Custom_Fresnel ノードと呼ぶことにします。 コンテンツブラウザ でマテリアル関数を選択し、キーボードの F2 を押し、好きな名前を入力すれば、名前を変更することができます。

マテリアル関数のビルド

  1. マテリアル関数を作成し、名前を変更したら、 コンテンツ ブラウザ マウスの左ボタン ダブルクリック して開きます。 すると、以下のようになります。

    Material_Function_Editor.png

    マテリアル関数エディタの動きは、マテリアル エディタと非常によく似ています。 [Details (詳細)] パネル と Final Material ノードの動きには、大きな違いが 2 つあります。 マテリアル関数エディタについては、 マテリアル関数の概要 をご覧ください。

  2. マテリアル関数エディタを開いて、フレネル エフェクトの作成を始めましょう。 フレネル エフェクトは見るアングルに合わせて機能するので、現在のサーフェスのアングルをカメラのアングルと比較し、それを使って フレネル値 を決める必要があります。 そのためには、シェーダー内で Dot Product ノードを使って、現在のカメラ アングルを表示中のサーフェスのアングルと比較します。 Material ノードでこの種類の計算を実行するためには、以下のノードを使用します。

    上記ノードをマテリアル関数グラフに追加する方法はいろいろありますが、 Palette メニューで単純にそれぞれのノードを探し、 マウスの左ボタン でノードを選択し、マテリアル グラフにドラッグする方法が一番簡単です。完了すると以下のようになります。

    Material_Function_Needed_Nodes.png

    フレネル エフェクトとは、ライトを見るアングルに合わせて、異なる強度でのライト反射の説明に使う言葉です。例えば、真下にプールを見ながらプール上に立っていると、水の中での反射はほとんど見えません。頭を動かしてプールの中の水が目線と平行になればなるほど、水中でより多くの反射に気付き始めるでしょう。これがシェーダー内に再生成しようとしているビヘイビアのタイプ、つまり見る角度に応じて視覚的な情報を追加または削除する能力です。

  3. ノードを配置したら、次は設定して全部接続します。まず最初に、 Constant 3 Vector の Blue Channel を設定はフレネルでは Z 値を表すので 1.0 に設定します。Constant 3 Vector ノードの出力を Vector Transform ノードの入力に接続します。Tangent Space から World Space へ変形するように、 Transform Node を確実に設定してください。Vector Transform ノードの出力を Dot Product ノードの入力 A に接続します。それが完了したら、Camera Vector ノードの出力を Dot Product ノードの B 入力へ接続します。完了すると以下のようになります。

    Material_Function_Nodes_Setup.png

  4. 次に、結果が 0 から 1 の範囲にクランプさせるために Clamp ノード を追加し、レンダリング アーティファクトの原因になりうるエラーを絶対に起こさないようにします。 Palette メニューで Clamp ノードを検索して、マテリアル グラフにドラッグします。完了すると以下のようになります。

    Material_Function_Adding_Clamp_Node.png

  5. Clamp ノードの次は、エッジだけが影響を受けるようにエフェクトを反転させるための One-Minus ノード を追加します。 Palette 内を 「OneMinus」 で検索すると One-Minus ノードが見つかります。完了すると以下のようになります。

    Material_Function_Adding_OneMinus.png

  6. 次に Function Input ノードを 2 つ追加する必要があります。Function Input ノードは、別のマテリアル内に置かれた時、マテリアル関数に値やテキストをどのように追加するかです。Function Input ノードをマテリアルに追加するためには、 Palette で単純に Function Input を検索し、マテリアル グループにドラッグします。ノードを 1 つ配置したら、それをまず選択してキーボードで Crtl+W を押せば、複製することができます。完了すると以下のようになります。

    Material_Function_Adding_Input_Nodes.png

    Function Input ノードを削除すると、次のエラーが出ます。このノードを削除してしまうと、このマテリアル関数を使っている他の人力も消去してしまうことを警告するエラーです。つまり、このマテリアル関数がプロジェクト内で多く使われている場合に削除すると、多くの他のマテリアルが影響を受けることになります。入力なしでは、マテリアルは正常なコンパイルが実行できなくなるため、ゲームプレイ中に機能しなくなります。 Material_Function_Delete_Function.png

  7. 次に、このマテリアル関数がマテリアル内で使えるように、作成した 2 つの Funcction Input ノードを設定する必要があります。Function Input ノードを 1 つ選択し [Details (詳細)] パネルを選択すると、いろいろなオプションが表示されます。ここでは [Input Name (入力名)] [Description (詳細)] [Input Type (入力タイプ)] [Preview Value (プレビュー値)] をのみを設定します。このような感じになっているはずです。

    • Exponent Input Material_Function_Input_Node_Exp.png

    • Intensity Input Material_Function_Input_Node_Pow.png

    Function Input ノードのオプションの詳細については、 Function Input ノード ドキュメント を参照してください。

  8. Function Input ノードが設定されたので、 Power ノード をマテリアル グラフに追加する必要があります。フレネル エフェクトのフォールオフの増減ができるように、 Power ノード を使います。こうすると、フレネル エフェクトをエフェクトを適用しているメッシュのエッジに近づけたり遠ざけたりしやすくなります。Power ノード 追加するためには、 「Palette」 で検索し、マテリアル グループにドラッグ&ドロップします。完了すると以下のようになります。

    Material_Function_Adding_Power.png

  9. 次に、フレネル エフェクトの強度を制御できるように Multiply ノード を追加していきます。 Multiply ノード ノードを追加するためには、 Palette** で検索し、マテリアル グループにドラッグ&ドロップします。完了すると以下のようになります。

    Material_Function_Adding_Multiply.png

  10. 必要なノードをすべてマテリアル グラフに追加したので、全部を接続していきます。まず、 OneMinus ノードの出力を Power ノードの Base 入力に接続します。次に、1 つ目の Function Input ノードである Fresnel Exponent を Power ノードの Exp 入力に接続します。接続したら、今度は Power ノードの出力を Multiply ノードの A 入力に接続し、 2 つ目の Function Input ノードである Fresnel Intensity を Multiply の B 入力に接続します。最後に、Multiply ノードの出力を Output Results ノードの入力に接続します。

  11. Material ノードを接続したら、次はメインのツールバーの [Apply (適用)] ボタンを押して、マテリアル関数をコンパイルします。マテリアル関数が正しくコンパイルされると、 [Apply] ボタンがグレーアウトします。完了すると以下の画像のようになります。

    Material_Function_Completed_Material.png

マテリアル関数の使用

  1. マテリアル関数が完了したら、マテリアル関数エディタを閉じて、 コンテンツ ブラウザ で新規マテリアルを作成します。マテリアルを新規作成するには、 コンテンツ ブラウザ 右クリック して、 [Basic Assets List (基本アセットリスト)] から [Material] を選択して、新規作成したマテリアルに 「Fresnel_Material」 と名前を付けます。

  2. Fresnel_Material を作成したら、 コンテンツ ブラウザ でそのマテリアルを マウスの左ボタン ダブルクリック します。マテリアルが開いたら、 コンテンツ ブラウザ からマテリアルへドラッグして、新規作成した マテリアル関数 を追加してみましょう。

  3. ここでは、プレビューを見やすくするために、以下のノードをマテリアルに追加します。 Palette メニューで以下のノード名を検索し、 [Palette] メニューからマテリアル グラフへノードをドラッグ&ドロップします。完了すると以下のようになります。

    Material_Function_Adding_Nodes.png

  4. 必要なノードはすべて追加されたので、次は入力と出力を正しく接続していきます。まず Constant 3 Vector を Main Shader ノードの Base Color 入力に接続します。次に Constant One の 1 つを Main Shader ノードの Metallic 入力に接続します。そして Constant One の 1 つをMain Shader ノードの Roughness 入力に接続します。最後に、残りの 2 つの Constant One ノードを Fresnel Intensity と Fresnel Exponent に接続し、 Custom_Fresnel ノードの出力を Main Shader ノードの Emissive Color 入力に接続します。完了すると以下のようになります。

  5. ノードを Main Material 入力に接続したら、次はノードに値を追加していきます。対応するそれぞれのノードに以下の値を設定し、完了した必ず マテリアルをコンパイル してください。完了すると以下のようになります。

    • Base Color: R:1.0 G:0 B:0

    • Metallic: 1.0

    • Roughness: 0.5

    • Fresnel Intensity: 1.0

    • Fresnel Exponent: 5.0

    Material_Function_Complted_Material.png

  6. マテリアルをコンパイルしてレベル内で使用する準備が整いました。デフォルトのレベルにランダム メッシュを適用させると、このような感じになります。 Material_Function_Final_Results.png

まとめ

マテリアル関数は非常にパワフルなので、マテリアル作成とイタレーションのスピードアップと統合に大きく貢献します。 ただし、多くのパワフルなツールに共通しているように、パワーを確実に抑制するように注意する必要があります。 既存マテリアル関数をマテリアル内で使用している途中で変更すると、編集中にマテリアル関数にエラーが生じたり、ある機能が削除された場合、使用しているマテリアルが破損する可能性があることにご注意ください。

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