#memo

indiedev太郎

SubstanceのパラメーターをBP側からいじる

https://i.gyazo.com/f143540661c921a45bbacc279c2c190e.gif

1秒毎にseedを変更

 

まずSubstanceが入ってるマテリアルから普通にConstantインスタンスを作成

https://i.gyazo.com/9b3fa67139fcc4fd02fc921c5c71f920.png

次に適応したいメッシュにDynamicインスタンスを作成、ここまではベーステクスチャがsubstanceになってるの以外は通常

https://i.gyazo.com/36ccb324870de4b397d3f6a487cd944d.png

 

ここからsubstanceのパラメーターにアクセスしていく

今回はgif撮りたかったのでtickに繋いでるんですが通常は上のconstructionの続きにノードを作成していけば良い

https://i.gyazo.com/fe784d3c8a6b288f9df228da87fce2b1.png

Material Instance Dynamicのリファレンスに対して追加されてたGet Substanceを行うと使用されているSubstance Graph Instanceが配列で返ってくる、今回は一つしか使用していないので0でアクセスできる、複数個使用している場合の順番がどう格納されてるかは調べてないので、printかなんかで名前調べたらいいんじゃないでしょうか

https://i.gyazo.com/982644388b1e88275f7aee5c7ab43e97.png

現在アクセスしているgraphのinputsはこんな感じで3つ、上からseed(int), Color1(float4), Color2(float4)の3つ

これを踏まえたうえでこのノードでinputNameにアクセスしてみる

https://i.gyazo.com/ea59768c56a6ed0d02e5dbb820a037c2.png

 

0なのでseedのinput name $randomseed が文字列で返ってきてる

https://i.gyazo.com/f60ae99654ce9a759fb4d46cc057d8f0.png

次のノードはseedの現在の値を取ってきてそれをインクリメントしてset
float4とかだとわかりやすいんだけど、配列でアクセスするみたいなので、通常のintの場合は0でアクセスできる

まあこんなにノードを挟まなくても、seedを更新したいとかいう時は、&randomseedをそのままsetノードのidentiferに打ち込んでvalueもrandomを突っ込めばそれだけで完結します

で地味にハマったのがこのままだと反映しなくて、最後にsubstanceを更新するノードを追加する必要がある

https://i.gyazo.com/76bcb45b8e15e294ef3214090282f38a.png

syncとasyncの2つ用意されていて、syncは更新を待つ?のでちょっと負荷みみたいなのがある

でまあ若干予想はついてたんだけど、キャラクターごとに違うシード値みたいなことがもともとしたくて、dynamicマテリアルインスタンスでどうにかならないかなと思ってたのだけど、これただ根本のsubstance graph instanceのパラメーターを変更しているだけなので

https://i.gyazo.com/f33a86b0fafc97c980fe45a78ca9ebad.gif

これ1のうしと2のうしは違うBP構造で、2は単にコンストラクションでダイナミックマテリアルインスタンスを適応しているだけで、1はtickでseedを変更している

でも2も変わっちゃってるのでgmだ…

 解決編
Substance Graph InstanceをBP内で生成する - #memo