【Unity】VFXグラフで空中を舞う塵を作る #2

投稿者: | 2021-08-21

VFXグラフで空中を舞う塵を作る #1 で表示したパーティクルを空中を舞うように動かしてみます。

パーティクルを動かす

そのために、Updateコンテキストの「Turbulence」ブロックでパーティクルの速度に適用されるノイズを作ります。

また、「Add Angle.Z over Life」でパーティクルを少し回転させています。角度はカーブで設定します。このカーブは0.1~0.4のあたりを行ったりきたりしているので、速さが揺らぎながら同じ方向に回転するようです。

カーブの最大値をあげたとき

フェードイン・フェードアウト

さらに、サンプルシーンのエフェクトでは、パーティクルがカメラに近すぎたり遠すぎるとフェードアウトするようになっています。それには、Outputコンテキストで「Camera Face (Alpha)」ブロックが使われています。

「Camera Face (Alpha)」ブロックは2つ置かれています。どちらもプロパティノードから値が入力されていますが、フェードインとフェードアウトでStartとEndの入力が逆です。

「Camera Face (Alpha)」ブロックでは、Faded DistanceよりもVisible Distanceの値を大きくすると、カメラからの距離がVisible Distanceより小さくなるとフェードアウトをはじめ、Faded Distanceで完全に見えなくなります。

逆に、Faded DistanceよりもVisible Distanceの値を小さくすると、距離がVisible Distanceを超えたときにフェードアウトをはじめて、Faded Distance以上では見えなくなります。

さらに、Outputコンテキストの「Set Color over Life」ブロックで、パーティクルが生まれたときと消えるときに、不透明度をフェードイン/アウトさせています。

その他のブロック

最後に、「Set Size Random (Uniform)」ブロックでサイズをランダムに設定し、「Subpixel Anti-Aliasing」ブロックでパーティクルが1ピクセルより小さくならないようにします。

サンプルシーンでは「Set Size Random (Uniform)」ブロックがOutputコンテキストに置かれていますが、サイズが毎フレーム変わってしまうのでInitializeコンテキストに移動しました。

また、パーティクルのスケールが1ピクセルより小さいときは表示できないので、「Subpixel Anti-Aliasing」ブロックで1ピクセルに固定して、代わりに不透明度を下げます。

パーティクルを落下させる

パーティクルをひらひらと落下させるときは、「Face Camera Plane」ブロックを無効にして、Initializeコンテキストの「Set Angle」ブロックとUpdateコンテキストの「Add Angle」ブロックでChannelsを「XYZ」にしてZ軸だけでなくすべての軸の値を操作します。

さらに、Updateコンテキストに「Gravity」ブロックと「Linear Drag」ブロックを追加して重力と抵抗を適用します。

これで、パーティクルが落ち葉のようにひらひらと落下しました。

一人称ステルスホラーゲームをitch.ioで公開しました。

https://nekoromorph.itch.io/hatch

コメントを残す

メールアドレスが公開されることはありません。