
MaterialParameterCollection は、マテリアルで参照できる任意の スカラー パラメータとベクター パラメータ のセットを格納しているアセットです。これは、アーティストが複数のマテリアルにグローバル データを一度に渡すために使用できる強力なツールです。また、マテリアル パラメータ コレクションを使用して、雪の量、破壊の量、湿り具合など、レベルごとのエフェクトを制御することができます。マテリアル パラメータ コレクションを使用しない場合、これらは、レベル内の多くの異なるマテリアル インスタンスで個々のパラメータ値を設定する必要があります。
この例では、マテリアル パラメータ コレクションに格納されたグローバル パラメータを使用して、シーンの次の要素をコントロールしています。
- 花のモーフ状態、風速、および風の強さ。
- プレイヤーの位置がトラッキングされ、フォリッジに提供されている。その位置情報は、プレイヤーが近くを歩くと、花や草がプレイヤーを避けるのに使用されます。
- 太陽の角度や色もトラッキングされ、稜線を正しく着色したり、稜線を通って光が直接差し込む時間帯 (プレイヤーが太陽の方を向いているとき) のみにエフェクトを限定したりするために使用されます。
- 時間帯によるエフェクトの色合いと、水面の全体的なディフューズ ライティングの色もコントロールされています。
マテリアル パラメータ コレクションを作成および編集する
MaterialParameterCollections は、 コンテンツ ブラウザ で作成された個別のアセット タイプです。MaterialParameterCollection を作成し、パラメータを追加するには、以下の手順を実行します。
-
コンテンツ ブラウザで 右クリック して、[Create Advanced Asset (高度なアセットの作成)] セクションの [Material (マテリアル)] サブカテゴリを展開します。コンテキスト メニューで MaterialParameterCollection を選択します。
-
MaterialParameterCollection アセットの名前を、格納されているパラメータの型がわかるような名前に変更します。この例では、MPC_GlobalParams という名前を使用しています。このアセットを ダブルクリック し、MaterialParameterCollection を編集します。
-
新しいウィンドウが開き、MaterialParameterCollection に格納されている [Scalar Parameters] と [Vector Parameters] が表示されます。
-
コレクションにパラメータを追加するには、[Scalar Parameters] セクションまたは [Vector Parameters] セクションのいずれかで [Add Element (要素追加)] (+) アイコンをクリックします。この例では、スカラー パラメータ を追加します。パラメータに「GlobalEmissivePower」という名前を付けて、デフォルト値を「1.0」に変更します。
-
必要に応じて、スカラー パラメータまたはベクター パラメータを追加します。1 つのマテリアル パラメータ コレクションには、最大 1024 個のスカラー パラメータと 1024 個のベクター パラメータを保持できます。
マテリアルでマテリアル パラメータ コレクションを使用する
これで MaterialParameterCollection のパラメータを使用して、マテリアルの属性を定義することができます。マテリアル パラメータ コレクションの主なメリットの 1 つは、パラメータ値がマテリアル自体とは別のアセットに保存されることです。つまり、必要な数のマテリアルでマテリアル パラメータ コレクションを参照することができ、マテリアル パラメータ コレクションの値を変更すると、それを参照しているすべてのマテリアルに自動的に反映されます。
ベース マテリアルでマテリアル パラメータ コレクションを参照するには、以下の手順を実行します。
-
コンテンツ ブラウザで 右クリック して、コンテキスト メニューの [Create Basic Asset (基本アセットを作成)] セクションで [Material (マテリアル)] を選択します。マテリアルにわかりやすい名前を付けます。
-
これで、コンテンツ ブラウザに、前のセクションで作成した MaterialParameterCollection と同じように、マテリアルが表示されます。マテリアル を ダブルクリック すると、マテリアルがマテリアル エディタで開かれます。
-
このマテリアルは、Fresnel 式を使用して、マテリアルのエッジを少し明るく光らせるシンプルなエミッシブ サーフェスになります。マテリアル グラフに次のマテリアル式ノードを追加します。
マテリア式のタイプ 名前 デフォルト値 ベクター パラメータ Base Color 1、0、0、0 ベクター パラメータ Emissive Color 0.1、0.01、0.14、0 Multiply - x2 n/a n/a Fresnel n/a n/a 次の図のようにマテリアル式を接続します。
-
マテリアル グラフで Fresnel ノードを選択します。[Details (詳細)] パネルで [Exponent] を「6」に、[Base Reflect Fraction] を「0.1」に設定します。これらのプロパティは、リム ライティング エフェクトのフォールオフをコントロールします。Fresnel ノードがサーフェスに影響するレベルに反映されるように、[Exponent] の値を調整していろいろ試してみましょう。
-
マテリアル グラフを 右クリック して、「collection」を検索し、CollectionParameter をグラフに追加します。このノードを使用して、MaterialParameterCollection からマテリアル グラフに情報を取り込みます。
-
マテリアル グラフで Collection Parameter ノードを選択します。[Details] パネルで、[Collection (コレクション)] ドロップダウン メニューを使用して、以前作成した MPC_GlobalParameters コレクションを選択します。
-
[Parameter Name] ドロップダウン メニューを使用して、EmissivePower パラメータを選択します。
-
下図のように 'EmissivePower' ノードを Multiply ノードの openB インプットに接続します。
-
マテリアル エディタのツールバーで [Save (保存)] をクリックして、マテリアルをコンパイルして、保存します。アセットが保存されたら、マテリアル エディタを閉じることができます。
マテリアル パラメータ コレクションをテストする
マテリアル コレクション パラメータが複数のマテリアルの属性を制御するのに役立つことを示すために、1 つまたは複数のマテリアル インスタンスを作成して、シーン内の異なるオブジェクトに適用することができます。
-
ベース マテリアルを 右クリック し、コンテキスト メニューで [Create Material Instance (マテリアル インスタンスを作成)] を選択します。
-
ベース マテリアルとマテリアル インスタンスを、レベルの 2 つの異なるオブジェクトに適用します。マテリアル インスタンスの Base Color パラメータと Emissive Color パラメータを変更することで、これら 2 つを区別することができます。
-
これで、マテリアル パラメータ コレクションを開いて EmissivePower 値を変更すると、新しい値がベース マテリアルとマテリアル インスタンスの両方に直ちに反映されます。
ブループリントを使用してマテリアル パラメータ コレクションを更新する
また、ブループリントを使用してマテリアル パラメータ コレクションを操作することもできます。これは、きわめて強力なツールです。プレイヤーがゲームプレイ中にマテリアルの外観を操作できるからです。以下の例では、キーストロークに反応して 2 つのマテリアルの EmissivePower を変更する方法を示しています。実行時に、B キーを押すとエミッシブ値の明るさが増し、D キーを押すとさらに暗くなります。どちらかのキーを離すと、パラメータは元の値である 1 に戻ります。
-
メイン エディタ ビューポートの上のツールバーで、[Blueprints (ブループリント)] ドロップダウン メニューを展開し、リストから [Open Level Blueprint (レベル ブループリントを開く)] を選択します。
-
レベル ブループリントで 右クリック して、「keyboard event」を検索します。コンテキスト メニューから B Keyboard Event を追加します。この操作を繰り返し、D Keyboard Event を追加します。
-
レベル ブループリントで 右クリック し、Set Scalar Parameter Value ノードをブループリントに追加します。[Collection] ドロップダウン メニューを使用して、*MPC_GlobalParams マテリアル パラメータ コレクションを参照します。
[Parameter (パラメータ)] ドロップダウンを使用して、EmissivePower パラメータを参照します。
-
Set Scalar Parameter Value ノードを 2 回複製し、ブループリントにこのノードを 3 つ作成します。ブループリントのグラフが以下の画像のようになるように、ノードを接続します。B および D Keyboard Event ノードの Pressed 出力は、1 つ目と 3 つ目の Set Scalar Parameter Value ノードの入力に接続する必要があります。両方の Keyboard Event ノードの Released 出力は、2 番目のSet Scalar Parameter Value ノードの入力に接続する必要があります。
-
最後のステップは、各 Keyboard Event に応答する EmissivePower の Parameter Value を設定することです。この例では、B キーが押されると、EmissivePower が 50 まで増加します。D キーが押されると、Emissive Power は 0.05 に減少します。両方のキーを離すと、Parameter は元の値である 1 に設定されます。
-
ブループリント エディタ ツールバーの [Compile (コンパイル)] をクリックして、レベル ブループリントをコンパイルします。これで、インゲームで変更をテストすることができます。
-
エディタのツールバーの Play in Editor (プレイ イン エディタ) アイコンをクリックし、B キーと D キーを押して、離すことでブループリントをテストします。以下のビデオに結果を示します。
制限事項とパフォーマンス特性
1 つのマテリアルは、最大 2 つの異なる MaterialParameterCollections を参照することができます。1 つは通常、ゲーム全体の値として使用され、 もう 1 つは、レベル固有のパラメータとして使用できます。1 つのコレクションは、最大で 1024 個のスカラー パラメータと 1024 個のベクター パラメータを保持できます。
コレクション内のパラメータ数を変更すると、そのコレクションを参照するすべてのマテリアルが再コンパイルされます。 多数のパラメータを追加する必要がある場合は、事前に多くのパラメータを空のマップに追加しておくと迅速に処理できる場合があります。
パラメータの名前を変更しても、そのパラメータを参照しているマテリアルは想定どおりに機能します。ただし、そのパラメータを 参照しているブループリントは現時点では機能しません。これを解決するには、コレクションに対して機能する ブループリント関数の ParameterName を再割り当てする必要があります。
MaterialParameterCollection の値を更新することは、さまざまなマテリアル インスタンスで多くの異なるパラメータを設定するよりも はるかに効率的です。