原文 https://docs.substance3d.com/integrations/blueprint-dynamic-material-instance-152535142.html
※上記リンクで足りない部分を補足するため、モデルがテクスチャが上記リンクと異なります。
Substance Graph Instanceを作成して、実行時にダイナミックグラフインスタンスを作成できます。
- Substance Instance Factoryタイプの変数を作成し、デフォルト値をインポート済みのSubstance Factoryに設定します。
- Is Validを作成し、Substance FactoryとEvent Begin Playと接続します。
- Create Graph Instanceノードを追加し、Substance Instance FactoryをFactory inputに接続します。 インスタンス名を任意に設定します。
- Substance Graph Instanceの変数を作成します。 これにより、ダイナミックSubstanceマテリアルへの参照が保持されます。
- Create Graph Instance ノードの戻り値を使用して、上記の変数をセットします。
- Materialタイプの変数を作成します。 これがMaterial Templateになります。コンテンツブラウザで、Substanceによって生成されたUE4マテリアルの複製を作成します。 この複製されたマテリアルをMaterial Template変数の入力として設定します。
- Create Dynamic Material Instanceを追加し、Material Template変数をParentとして設定します。
- Create Dynamic MaterialノードのReturn Valueを右クリックして、「変数へ昇格」を選択します。 変数名を、Material Instance Dynamic (MID)に設定します。
- コンテンツブラウザからBluePrintエディタのビューポートタブに使用するアセットをドラッグします。「コンポーネントに追加」の下に読み込んだセットが追加されます。
- Set Material Nodeを追加し、MID変数の値をMaterial Inputとして設定します。
Targetには、マテリアルを適用するアセットを設定します。 - Nameタイプの変数を作成します。 この変数は、マテリアルに設定されたチャンネルの名前を保持します。 「NONE」の値でこれを初期化します
- Get Substance Texturesノードを追加し、Graph InstanceにDynamic Graph Instance変数を設定します。
- For each Loop ノードを追加します。 ここでは、Substanceテクスチャをループします。 Get Substance Texturesの結果を入力配列として取得します。
- 入力としてループのArray Elementを使用して、Substance Get Channelノードを追加します。
- Sequence ノードを追加します。 ここでは、まずGet Channelノードの結果を実行します。
- Sequenceの後にSwitch on ESubChannelTypeを追加し、SelectとしてGet Channel戻り値を使用して0にします。 ここで、チャンネル名を確認します。
- MID Name 変数を、ステップ5で複製したSubstance Materialのチャネル名に設定します。マテリアル画像を参照してください。
Substanceから生成されたUEマテリアルを複製したマテリアルにSubstanceが適用するチャンネルを確認して、上記のようにMID Param Nameに入力します。 - SequenceノードThen 1で、チャンネル名をダイナミックマテリアルに割り当てるプロセスを設定します。
- MID Param name変数を取得し、値が「NONE」のequal stringノードを追加します。これは、変数を初期化する値です。
- Branchノードを追加しEqual Stringノードと接続します。
- Substance Set Texture Parameter Valueを追加します。target はMID変数、parameter nameはMID name変数です。 Valueは、ForEachLoopノードからのArray Element と接続します。
- コンパイル、保存の順にクリックします。
- 作成したBluePrintをビューポートにドラッグします。
- 再生してみるとBarrelにSubstanceが適用されます。
追加:インスタンスごとにパラメーターを変更する
Create Graph InstanceとSet Dynamic Graph Instaceの間にパラメーターを変更する設定を追加し、最後にAsync Renderingを追加します。
今回はColorを変更するために、Create Graph InstanceのReturn ValueをSet Input Colorに接続し、IdentifierにSubstance Parameter名である「primary_color」を設定、Colorがランダムになるように設定しました。
こちらを合わせてご参照ください。
再生すると、BluePrintから作成されてるマテリアルにそれぞれ異なる色が設定されていることがわかります。