次のようなものを作る
上に行くほど大きくなり、色も変化する例である。
パーティクルと原点との「距離」に応じてパラメータを変化させている。
ダイナミックインプットを使うので初心者向けではない。
ただ、可能な限りシンプルな内容でまとめるので複雑な作例は掲載しない。
今回メインで使用するのがNormalize Distance Range
というダイナミックインプット。
返り値で言えば0~1
のfloat
を返すだけなので比較的シンプルな部類だ。
ここから実例を使って作っていく
まず初期の状態。
※パーティクルをSpawn Rate
で生成してAdd Velocity
で上に飛ばしているだけ。
パーティクル更新にScale Sprite Size
を追加する。こちらはパーティクルのサイズを変えるもの。
XとYを入れるだけのシンプルな構造。例えばXを0.1
にすると長細くなる。
ここにNormalize Distance Range
を入れることによって「原点から離れているパーティクルを大きくする」という処理を加えていく。
まずNormalize Distance Range
使う上で最初のハマりポイント。
こちらの戻り値がFloat
であると先程述べた。
したがってこの例だとScale Sprite Size
はX
とY
の2値なので直接設定することができない。
Vector 2D From Float
を使うと1個のFloat
を入力するだけでまとめてX,Y両方に割り当てることができる。
入力値が1個だけに絞られたのでNormalize Distance Range
を追加することができる。
入力する項目が一気に増えたのでびっくりするかもしれないが、シンプルなので恐れる必要はない。
Start Position
とは、そのまま原点とするところを入れれば良い。
パーティクルは0,0,0
を原点に生成されているのでこのまま数値は変更しない。
※あえて動かしても面白い。
次にEnd Position
にパーティクルそれぞれのポジションを入れてやることで原点からどれだけ離れているかを検出する。
上のように(パーティクル)Position
というのを入れるとパーティクルごとの座標が入りStart Position
との差が計算される。
各パーティクルごとのポジションはPosition
というパラメータに格納されている。
Position
で検索して出てきたものをEnd Position
に入れれば良い。
こちらはパラメータタブの中に有るので直接ドラッグしても良い。
つまるところ変数のようなもので各パーティクルの座標が自動で格納されている。
これを設定した段階でパーティクルが消えてしまっていることに気づくと思う。
このダイナミックインプットはさらにDistance
のプロパティを設定しないと正しく動作しない。
自分が思ったような形状になるように微調整しよう。
※この数値の正確な求め方はいまいちわからないが、上の例で見れば恐らく原点から1000離れたところで1の値になるということだと思う。
これだけで上のようにサイズを変化させることができた。
当然だが、直線ではなく360度に放射しても外側が大きく内側が小さくなる。
次にカラーを変える例も出しておく。
Color
モジュールを使って最もシンプルに2色で変化させてみる。
一つのカラーモジュールで2色扱う場合はLerp Linear Colors
を使えば良い。
原理はマテリアルノードのLerp
と同じ。
2つのカラーを設定してLerpFactor
が0に近づけば上側(ここでは赤)、1に近づけば側(青)に変化するダイナミックインプット。
おわかりだと思うがそのLerpFactor
にNormalize Distance Range
を設定してやれば完成である。
パーティクルサイズと合わせて次のような結果になった。
最後に適当にVelocityを追加してよくわからない作例を作った。
調べてもあまり情報がヒットしないダイナミックインプットだったので記事にさせていただいた。
今回も可能な限りシンプルにまとめたが、応用すればもっといろいろなパラメタを「距離」で変化させられるはずだ。
Normalize Distance Range
は0~1
で返ってくるので、パーティクルを光らせたい(より大きい値にしたい)といった場合は更にMultiply
などと合わせて使うと良いと思う。
他にも切り捨て(floor
)を使ってより明確に色分けをしたりもできる。
ぜひとも色々試してみてほしい。