この記事はUnity Advent Calender 2019 23日目の記事です。
#はじめに
VisualEffectGraphのシンプルスォームパーティクルの項目について記事にしました。
以前にUnity VisualEffectGraph -インストール方法-と、Unity VisualEffectGraph -シンプルパーティクル解説-を記事にしているので、初めて触る方はこちらを参考にしていただければと思います。
#シンプルスォームパーティクル
まずVEGウィンドウ上のコンテキスト類を全て消しましょう。マウス左ドラッグで全選択して右クリック[Delete]ですべて消えます。その後に再度右クリックして[CreateNode]→[System]→[Simple Swarm Particle System]を選択し生成します。(図1)
生成されたコンテキストは図2の様なボックスを持っています。また、生成されたVFXは図3のような火の玉のようなVFXです。
図1 Simple Swarm Particle Systemのボタン
図2 Simple Swarm Particle Systemのコンテキスト
図3 Simple Swarm Particle SystemのVFX
#ブロック部
それではブロック部の解説をしていきましょう。
Spawn内のブロック
この部分は「ConstantSpawnRate」のみが有ります。
・ConstantSpawnRate
このブロックには「Rate」というプロパティがあり、毎秒いくつのパーティクルを生成するかを設定できます。
時間等で消失していないパーティクルの数とInitializeのCapacityが同じ数になった時はパーティクルが消えるまで生成が止まります。
Initialize内のブロック
ここでは、「Set Lifetime Random」ブロックがあり、生存時間をコントロールしています。
・Position(Sphere)
生成場所を設定した球体の表面にパーティクルを配置するブロックです。
・Set Lifetime Random
パーティクルの生存時間(秒)を設定するブロックです。最大値と最小値の2つを決めるとその間のランダムな時間で消失します。
Update内のブロック
「Vector Field Force」ブロックのみがあります。
・Vector Field Force
このブロックはベクターフィールドを用いてパーティクルに速度を与えます。
ベクターフィールドとは空間上に力場を作るイメージで、特定の場所に行くと設定された方向に力が掛る空間の設定です。
Output内のブロック
ブロックの数が多いですが、複雑な物ではないので1つ1つ見ていきましょう。
・Orient:Along Velocity
このブロックはパーティクルの向く方向を設定することができます。「AlonVelocity」設定ではパーティクルが進行方向を向きます。
・Set Size
パーティクルのXYZ全ての大きさを変更するブロックです。1を中心に拡大縮小します。
・Set ScaleX
パーティクルのX方向の大きさを変更するブロックです。1を中心に拡大縮小します。
・Seet ScaleY over Life
パーティクルのY方向の大きさをLifeTimeを参考に変更するブロックです。スケールの大きさはCurveによって変更されます。
・Color/Alpha over Life
LifeTimeによってα値(透明度)と色を変えるブロックです。横軸がLifeTimeで左端が生成、右端が消失の時間を示します。ウィンドウの操作はUnityマニュアルを参考にしてください。
#実際の動き
それでは上記を踏まえてどう動くのか、最初からSpawn,Initialize,Update,QuadOutputの順に追っていきましょう。
Spawn
まずSpawnコンテキストの[Rate]で毎秒25000個のパーティクルが生成されることが決まります。
図4 Spawnコンテキスト
Initialize
Initializeコンテキストでパーティクルの個数上限65536個と定められます。
「Position(Sphere)」ブロックでは[Position Mode]より、生成場所が球体表面(Surface)に設定されています。また、[Spawn Mode]より、ランダムに生成されます。生成場所の球体の詳細はすぐ下の項目から設定できます。
「SetLifetimeRandom」ブロックで[Lifetime]を1秒~3秒の間と定められ、この時間内で消失することを設定されます。
図5 Initializeコンテキスト
Update
Updateコンテキストではブロックが無い場合もありますが、今回は「Vector Field Force」ブロックが追加されています。
「Vector Field Force」ブロックでは、ベクターフィールドを読み込んで適応させています。このおかげでパーティクルがベクターフィールドの影響を受けて動いています。
図6 Updateコンテキスト
QuadOutput
QuadOutputコンテキストです。MainTextureにDefaultParticleが設定されており、このTextureが生成されます。
「Orient」ブロックでは、「Along Velocity」モードとなっており、このモードはパーティクルが進行方向を向いて帯のようになるモードです。
「SetSize」ブロックはその名の通りサイズを設定しています。
「SetScaleX」ブロックではスケールを設定しています。[Channels]の項目でx,y,z,xy,xz,yz,xyzの7つから選択します。ブロック名の最後は選択した項目で名前が変わります。その下の[Scale]では前の項目での軸のスケールを設定できます。
次の「SetScaleY overLife」では、Y軸のOverLifeに応じたスケールを設定しています。軸の設定は[SetScale]と同じです。
最後の「Color/AlphaoverLife」ブロックではRGB255の白と生成時、消失時付近のα値を0に近くする設定がされています。これによって生成時は透明な状態から始まり、少し経つとα値が255になり姿がハッキリとし、消失時近くになるとまたα値が減って消えるように消失していきます。
出力結果
#色々値を触ってみよう
一通りシンプルスォームパーティクルに触れたので、ある程度どこを触ればどうなるか分かったと思います。
後は自由にどんどん値を変えたりして触ってみて下さい!
最初に戻したくなったら画面に置いたノードを全て消し、右クリックして「Create Node」→「System」→「Simple Swarm Particle System」と押せば最初のシンプルパーティクルのノードが配置されます。
#まとめ
今回はシンプルスォームパーティクルのSpawn,Initialize,Update,Outputといったコンテキストに始まり、コンテキスト内の機能としてのブロックを解説しました。
記事を読んでコンテキストとブロックについて多少なりとも分かって頂けたら嬉しいです。