Substance Graph InstanceをBP内で生成する
UE4のダイナミックマテリアルインスタンスの挙動で、同じクラスのインスタンスだけれども、それぞれのseed値は違うみたいなことをsubstanceでしたい、が、やっとできたのでメモ
Allegorithmicのフォーラムみても、同様の質問あっても回答がいまいちよくわからなかったのだけれど、このスレッドはなんかそれっぽい感じだった
流れとしては、BPインスタンス毎に、Substance Instance FactoryからSubstance Graph Instanceを作成して、生成されたテクスチャをUEのDymamic Material Instanceにパラメーターとして渡す感じ
ここからは手順
1. factoryの設定を変更する
これが一番わかりにくくて最後までハマっていたところなんだけれど、この設定がデフォルトのままだとBP側からInstanceが生成されない
Factoryを右クリックして Asset Actions > Bulk Edit via Property Matrix...を選択
右上にこんなのがあるんで、SGM on Load Asyncに変更、これがなんなのかはよくわからないですね・・・
2. Dynamic Material Instance用のマテリアルを作成
差し替えるのでテクスチャは適当に、詳細は省略
3. BPでInstanceを作成
この3つのノードはセットで運用する
はじめにCreate Graph InstanceノードでFactoryを指定してInstanceを作成
Graph Desc IndexはソースファイルのGraphのIndexの指定、Graphが一つしかないソースなら0
次はCreate Instance Outputs、これでテクスチャを書き出す、Output indicesは書き出すOutputのIndexを配列で突っ込む、書き出すOutputのIndexというのはソースでgraphを選択すると一番下に表示されてて並び替えることが出来る。このソースはbaseColor一つのoutputしか存在していないため、画像のような配列を指定
最後はAsync Rendering、これでゲーム中にSubstanceを更新する
これでSubstance Graph Instanceの生成が完了、後は生成されたテクスチャをDynamic Material Instanceに渡す
Get Substance TexturesでOutputsの配列にアクセスできる、今回はbaseColor一つのためget 0
後は通常通りDynamicMaterialInstanceを生成し、Parameterとして生成された画像を渡す
同一BPで違うシードを持ったインスタンスができた
ただ微妙に不安定で、コンストラクションスクリプトより、イベントグラフに上のノードがあったほうが良かったり(レベルに配置してると落ちる)、よくわからないことが微妙にあるけどもう知りません