インスタンス化マテリアル

シェーダーを再コンパイルせずにプロパティの変更により、子マテリアルのビヘイビアと外見の変更が可能な階層的なマテリアルの関係

Windows
MacOS
Linux

MICEditor.png

Unreal Engine 4 では、マテリアルの再コンパイルに大きな負荷をかけることなくマテリアルの外見を変更するために、マテリアルのインスタンス化を使用します。通常のマテリアルの編集および変更には再コンパイルが必要ですが (ゲームプレイの前の 必須事項 です)、インスタンス化マテリアルは再コンパイルせずに変更が行えます。インスタンス化マテリアルの中には、ゲームプレイ中でもインゲーム イベントに反応して変更が可能なものもあります (木のマテリアルが燃えながら黒く焦げていく場合)。芸術的なエレメントに、ビジュアル的な柔軟性が限りなく与えられます。

インスタンスとパラメータ

負荷をかけずにマテリアルの外見を編集する方法を提供するのがマテリアル インスタンスの目的とはいえ、デフォルトのままでマテリアルの全機能を編集できるわけではありません。このことをしっかり覚えておいてください。マテリアル インスタンスを編集可能にする前に、まず、インスタンス内で編集可能に したい オリジナルの (または マスターとなる) プロパティを選択し、それらを パラメータ に指定しなければなりません。この動作は、マテリアルの パラメータ化 といいます。

パラメータはマテリアル エディタ内でデータ ノードとして表示されます。技術的には、マテリアル インスタンスにデータ値を送るコンジットの役割をする名前付きの値です。これらのパラメータは、マテリアル インスタンス エディタまたはスクリプト (ブループリント、コード) 内で エクスポーズ され、編集することができます。仮に、色をすぐに変更可能なマテリアルを作成するとします。赤など色に単に値を割り当てるのではなく、マテリアルの Base Color プロパティに Vector パラメータを割り当てます。このパラメータに名前を設定します。このマテリアルのインスタンス作成時に、名前を付けた Vector パラメータがインスタンス プロパティにリスト表示されるので、これを使用すると再コンパイルせずに好きな色の設定が可能になります。

以下は、マテリアル内のパラメータ設定の説明です。

Material_Parameters.png

マテリアル インスタンス内でパラメータがエクスポーズされた結果は以下の通りです。

Instance_Parameters.png

Constant インスタンスと Dynamic インスタンス

Unreal Engine 4 では、 2 種類のマテリアル インスタンスを利用できます。

  • Material Instance Constant - 実行前にのみ計算されます。

  • Material Instance Dynamic - 実行時の計算 (編集も) が可能です。

マテリアル インスタンス定数

マテリアル インスタンス定数 は、実行時前に 1 回のみ計算するインスタンス化マテリアルです。つまり、ゲームプレイ中での変更はできません。ただし、ゲーム中はずっと 一定 のままですが、コンパイルが不要というパフォーマンス上の利点は変わりません。例えば、個々のペイント ジョブがありながらゲームプレイ中は色が変化更 しない 車をいろいろ使ったゲームの場合のベスト プラクティスは、普通のカーペイントの基本的な面を表すマスターとなるマテリアルを作成し、色、メタル度、光沢度の違う様々な車に対してバリエーションを表すことです。

マテリアル インスタンス定数は コンテンツ ブラウザ で作成され、マテリアル インスタンス エディタ で編集されます。

マテリアル インスタンス ダイナミクス

マテリアル インスタンス ダイナミクス (MID) は、ゲームプレイ中 (実行時) に計算が可能なインスタンス化マテリアルです。つまり、プレイ中に、スクリプト (コンパイルされたコードあるいはブループリント ビジュアル スクリプト) を使ってマテリアルのパラメータを変更し、それによりゲーム全体のマテリアルを変更することができます。この MID は、様々なダメージ レベルの表示、ペイントジョブから顔の表情に反応して異なる皮膚のテクスチャへのブレンドへ変更など、限りなく適用することができます。

MID はパラメータ化マテリアルまたはマテリアル インスタンス定数のいずれかで、スクリプト内に作成されます。ブループリントでは、パラメータ化プロパティを持つあるマテリアルを受け取り、それを Create Dynamic Material Instance ノードから送り出します。そのノードの結果が Set Material ノードを通じて対象オブジェクトへ適用され、ゲームプレイ中に変更可能な新規マテリアルが作成されることになります。

ConstructionScriptForMID.png

技術的な適用

非インスタンス化マテリアルをプリミティブに適用するために、抽象基本クラスの MaterialInterface を使用します。このクラスは、適用されるマテリアルの表現式とパラメータ値の両方のインターフェイスです。Material クラスは、表現式とデフォルトのパラメータ値を定義する MaterialInterface のサブクラスです。これらのタイプは、親から表現式とパラメータ値を継承し、任意でパラメータ値の幾つかをオーバーライドしたりアニメートします。

ちなみに、Blueprint 変数が マテリアル または マテリアル インスタンス定数 を受け取れるようにするためには、変数が MaterialInterface タイプであることを確かめる必要があります!

エディタ内でのマテリアルのインスタンス化

エディタ内でマテリアルのインスタンスを作成する方法は 2 通りあります。

コンテンツ ブラウザ[Add New (新規追加)] ボタンをクリックし、[Material Instance] を選びます。

NewMIC.png

新規マテリアル インスタンスに名前を割り当てます。

NameMIC.png

新規マテリアル インスタンスを ダブルクリック します。すると、 マテリアル インスタンス エディタ が開きます。コンテンツ ブラウザ から新規マテリアル インスタンスの Parent プロパティにインスタンス化されるマテリアルを選択し割り当てます。

MatInstEditorOpen.png

インスタンスを作成したいマテリアルが既に分かっている場合は、コンテンツ ブラウザでそのマテリアル上を 右クリック[Create Material Instance (マテリアル インスタンスを作成)] を選択することもできます。

CreateMaterialInstance.png

パラメータ グループ

パラメータ表現式には、マテリアル インスタンス エディタのビューを整理するための Group プロパティがあります。関連するプロパティを同じグループに追加できるので、親マテリアルの特別なエフェクトや特性を制御して、全てのパラメータの検索や修正が容易になります。グループ デフォルトに属さないパラメータは None グループに表示されます。

ParameterGroups.png

パラメータ化マテリアルの作成

パラメータをマテリアルに追加するには、マテリアル エディタ内のパラメータ表現式タイプのうちの 1 つを使います。ScalarParameter、VectorParameter、各種テクスチャ パラメータ、静的パラメータといってパラメータ タイプです。

パラメータにユニークな名前を付けて、Group に割り当て、デフォルト値を与えます。

Material_Parameters.png

スカラー パラメータ

ScalarParameter は、単一浮動小数点値を含むパラメータです。スペキュラ パワー、線形補正のアルファ、オパシティなどの単一値に合わせてエフェクトを操作するために使用します。

すべての表現式のリストと説明については、マテリアル式のリファレンス を参照してください。

ベクター パラメータ

VectorParameter は、4 チャンネルのベクター値または 4 つの浮動小数点値を含むパラメータです。通常これらは設定可能な色の提供に使われますが、位置的データを表したり、複数の値を必要とするエフェクトを操作するためにも使用します。

すべての表現式のリストと説明については、マテリアル式のリファレンス を参照してください。

テクスチャ パラメータ

以下のテクスチャ パラメータを利用できます。以下のパラメータは、受け取るテクスチャのタイプや使用方法が決められています。シェーダー カラーはテクスチャ タイプによって異なって生成されるため、それぞれのテクスチャ タイプには別の表現式が必要になります。

  • TextureSampleParameter2D は基本的な Texture2D を受け取ります。

  • TextureSampleParameterCube は TextureCube またはキューブ マップを受け取ります。

  • TextureSampleParameterFlipbook は FlipbookTexture を受け取ります。

  • TextureSampleParameterMeshSubUV は、メッシュエミッタと合わせて SUB-UV エフェクトに使用される Texture2D を受け取ります。

  • TextureSampleParameterMeshSubUV は、メッシュエミッタと合わせて SUB-UV のブレンドに使用される Texture2D を受け取ります。

  • TextureSampleParameterMovie は MovieTexture (bink movie) を受け取ります。

  • TextureSampleParameterNormal は法線マップとして使用される Texture2D を受け取ります。

  • TextureSampleParameterSubUV 、スプライト エミッタと合わせて SUB-UV エフェクトに使用される Texture2D を受け取ります。

すべての表現式のリストと説明については、マテリアル式のリファレンス を参照してください。

静的パラメータ

静的 パラメータはコンパイル時に適用されるため、静的パラメータでマスクされたマテリアルのブランチ全体がコンパイルされランタイム時には実行されないので、より最適なコードを生成します。コンパイル時に適用されるので、変更はスクリプトからではなく マテリアル インスタンス ユーザーガイド 内でのみ可能です。

*警告:新規マテリアルは、インスタンスで使用されたベース マテリアル内のすべての静的パラメータの組み合わせにたいしてもコンパイルされます!

膨大な数のシェーダーをコンパイルすることになってしまいます。マテリアルに使用する静的パラメータの順列数と、実際に使用された静的パラメータの置換数を最小限にとどめてください。

静的パラメータのタイプについては、静的パラメータ および 静的コンポーネント マスク パラメータ を参照してください。

すべての表現式のリストと説明については、マテリアル式のリファレンス を参照してください。

Tags
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback