Created on | Updated on

Substance Unreal Engineインテグレーション「Blueprint: Dynamic Material Instance」

原文 https://docs.substance3d.com/integrations/blueprint-dynamic-material-instance-152535142.html

※上記リンクで足りない部分を補足するため、モデルがテクスチャが上記リンクと異なります。

Substance Graph Instanceを作成して、実行時にダイナミックグラフインスタンスを作成できます。

  1. Substance Instance Factoryタイプの変数を作成し、デフォルト値をインポート済みのSubstance Factoryに設定します。

    mceclip4.png

  2. Is Validを作成し、Substance FactoryとEvent Begin Playと接続します。
    mceclip0.png
  3. Create Graph Instanceノードを追加し、Substance Instance FactoryをFactory inputに接続します。 インスタンス名を任意に設定します。

    mceclip1.png

  4. Substance Graph Instanceの変数を作成します。 これにより、ダイナミックSubstanceマテリアルへの参照が保持されます。
    mceclip2.png
  5. Create Graph Instance ノードの戻り値を使用して、上記の変数をセットします。

    mceclip3.png

  6. Materialタイプの変数を作成します。 これがMaterial Templateになります。コンテンツブラウザで、Substanceによって生成されたUE4マテリアルの複製を作成します。 この複製されたマテリアルをMaterial Template変数の入力として設定します。
    mceclip4.png
  7. Create Dynamic Material Instanceを追加し、Material Template変数をParentとして設定します。

    mceclip5.png


  8. Create Dynamic MaterialノードのReturn Valueを右クリックして、「変数へ昇格」を選択します。 変数名を、Material Instance Dynamic (MID)に設定します。

    mceclip6.png
    mceclip7.png

  9. コンテンツブラウザからBluePrintエディタのビューポートタブに使用するアセットをドラッグします。「コンポーネントに追加」の下に読み込んだセットが追加されます。
    mceclip8.png

  10. Set Material Nodeを追加し、MID変数の値をMaterial Inputとして設定します。
    Targetには、マテリアルを適用するアセットを設定します。

    mceclip0.png

  11. Nameタイプの変数を作成します。 この変数は、マテリアルに設定されたチャンネルの名前を保持します。 「NONE」の値でこれを初期化します

    mceclip1.png

  12. Get Substance Texturesノードを追加し、Graph InstanceにDynamic Graph Instance変数を設定します。

    mceclip9.png

  13. For each Loop ノードを追加します。 ここでは、Substanceテクスチャをループします。 Get Substance Texturesの結果を入力配列として取得します。

    mceclip10.png

  14. 入力としてループのArray Elementを使用して、Substance Get Channelノードを追加します。
    mceclip11.png

  15. Sequence ノードを追加します。 ここでは、まずGet Channelノードの結果を実行します。
    mceclip5.png

  16. Sequenceの後にSwitch on ESubChannelTypeを追加し、SelectとしてGet Channel戻り値を使用して0にします。 ここで、チャンネル名を確認します。

    mceclip6.png

  17. MID Name 変数を、ステップ5で複製したSubstance Materialのチャネル名に設定します。マテリアル画像を参照してください。

    mceclip12.png

    Substanceから生成されたUEマテリアルを複製したマテリアルにSubstanceが適用するチャンネルを確認して、上記のようにMID Param Nameに入力します。

    mceclip13.png

  18. SequenceノードThen 1で、チャンネル名をダイナミックマテリアルに割り当てるプロセスを設定します。
    mceclip14.png
  19. MID Param name変数を取得し、値が「NONE」のequal stringノードを追加します。これは、変数を初期化する値です。

    mceclip15.png

  20. Branchノードを追加しEqual Stringノードと接続します。

    mceclip16.png

  21. Substance Set Texture Parameter Valueを追加します。target はMID変数、parameter nameはMID name変数です。 Valueは、ForEachLoopノードからのArray Element と接続します。

    mceclip18.png

  22. コンパイル、保存の順にクリックします。
    mceclip19.png

  23. 作成したBluePrintをビューポートにドラッグします。
    mceclip20.png

  24. 再生してみるとBarrelにSubstanceが適用されます。
    mceclip21.png

 

追加:インスタンスごとにパラメーターを変更する

Create Graph InstanceとSet Dynamic Graph Instaceの間にパラメーターを変更する設定を追加し、最後にAsync Renderingを追加します。

今回はColorを変更するために、Create Graph InstanceのReturn ValueをSet Input Colorに接続し、IdentifierにSubstance Parameter名である「primary_color」を設定、Colorがランダムになるように設定しました。

こちらを合わせてご参照ください。

mceclip0.png

再生すると、BluePrintから作成されてるマテリアルにそれぞれ異なる色が設定されていることがわかります。

mceclip1.png

 

 

問題が解決しない場合は、Born Digital サポートまでお問い合わせ下さい。

サポート問い合わせ