SubstanceのパラメーターをBP側からいじる
1秒毎にseedを変更
まずSubstanceが入ってるマテリアルから普通にConstantインスタンスを作成
次に適応したいメッシュにDynamicインスタンスを作成、ここまではベーステクスチャがsubstanceになってるの以外は通常
ここからsubstanceのパラメーターにアクセスしていく
今回はgif撮りたかったのでtickに繋いでるんですが通常は上のconstructionの続きにノードを作成していけば良い
Material Instance Dynamicのリファレンスに対して追加されてたGet Substanceを行うと使用されているSubstance Graph Instanceが配列で返ってくる、今回は一つしか使用していないので0でアクセスできる、複数個使用している場合の順番がどう格納されてるかは調べてないので、printかなんかで名前調べたらいいんじゃないでしょうか
現在アクセスしているgraphのinputsはこんな感じで3つ、上からseed(int), Color1(float4), Color2(float4)の3つ
これを踏まえたうえでこのノードでinputNameにアクセスしてみる
0なのでseedのinput name $randomseed が文字列で返ってきてる
次のノードはseedの現在の値を取ってきてそれをインクリメントしてset
float4とかだとわかりやすいんだけど、配列でアクセスするみたいなので、通常のintの場合は0でアクセスできる
まあこんなにノードを挟まなくても、seedを更新したいとかいう時は、&randomseedをそのままsetノードのidentiferに打ち込んでvalueもrandomを突っ込めばそれだけで完結します
で地味にハマったのがこのままだと反映しなくて、最後にsubstanceを更新するノードを追加する必要がある
syncとasyncの2つ用意されていて、syncは更新を待つ?のでちょっと負荷みみたいなのがある
でまあ若干予想はついてたんだけど、キャラクターごとに違うシード値みたいなことがもともとしたくて、dynamicマテリアルインスタンスでどうにかならないかなと思ってたのだけど、これただ根本のsubstance graph instanceのパラメーターを変更しているだけなので
これ1のうしと2のうしは違うBP構造で、2は単にコンストラクションでダイナミックマテリアルインスタンスを適応しているだけで、1はtickでseedを変更している
でも2も変わっちゃってるのでgmだ…