前の記事の続き。
$time 変数を使ってSubstancePlayerでアニメーション再生できるようになったが、再生速度がいじれなかったり、少々取り回しが悪い。さらに言うとSubstanceDesignerないで(おそらく)$time の値を変更する事が出来ないのでプレビューできない。どうするか。
時間制御変数をシーンに追加


新たに time と tiimescale のパラメータをグラフに追加。このtimeの値で SubstanceDesigner上でのアニメーション位置を変更するようにする。また time の値に timescale の値を乗算するようにして時間の進む速度をコントロールできるようにする。

関数グラフはこのようにする。$time と time を足しているのがポイント。これで、SubstancePlayer上では スライダーでアニメ再生でき、SubstanceDesigner 上では time でコントロールできるようになる。さらにいえば、SubstancePlayerで time 値は 時間のオフセット指定として使える。 timescale 値は両方で有効。
バリュープロセッサを有効活用する
上記の関数グラフをアニメさせたいパラメータにすべて仕込むのは面倒くさい。そこでこれをバリュープロセッサ(関数だけのサブグラフ)に仕込む。

バリュープロセッサを設定したら、アニメさせたいノードのパラメータにリンクするようにする。


アニメさせたいノード側は入力値のピンを作ってパラメータとリンクさせておく。関数ノード内で編集する必要はない。これの何がいいかというと、バリュープロセッサの値をいろいろなノードに刺して共有できるようになる。

ここでは、HSLの色相と光の帯の大きさに時間値を2倍にする別のバリュープロセッサを挟んで差し込んだ。時間値のスケーリングは各ノードパラメータ内の関数グラフ内でやってもいいが、自分としては、ノード間で同期をそろえたりする場合をふまえて外側でまとめて調整したほうがやりやすい。

さらにここも好みだが、time と timescale の値もグラフのパラメータから入力値ノードに移した。このほうがパラメータをプロパティパネルから探し出すのが早い。なお入力値ノードを配置しただけでは外部公開パラメータにはならないので注意。それを利用しているノードのパラメータが外部公開されていると(ここではstarburstノードのランダムさと最大サイズのパラメータ)、入力値ノード値も外部公開される。
追記)timescale は SubstanceDesiner 上ではいじらないので、やっぱりグラフに設定されている変数のままで良そう。
最終的なグラフ
ややこしそうだが左の4つのノードは他のグラフへコピペして編集できるので、一度作ってしまえば楽だ。各ノードの中に入って編集することが減る。






アニメーションの再生

timeとtimescaleが公開され、(内部パラメータの#timeも使われているので)タイムラインも表示される。



