1 / 4 最小Graphと4つのContext
少数の粒子を表示し、発生・初期値・更新・描画の担当箇所を確認します。
比較するParticle System
新しいSceneをLesson12.unityとして保存し、Main CameraをPosition (0, 0, -10)、Rotation (0, 0, 0)にします。第02回のLoopParticlesを置き、Looping有効、Start Lifetime 2、Start Speed 0、Start Size 0.1、Rate over Time 10、Burstなしにします。手元にない場合は第02回の作成手順で同じ設定を用意します。
再生して発生数と寿命を確認した後、Particle Systemを無効にします。比較用の基準としてSceneへ残し、VFX Graphと交互に有効にして観察します。
Graphの作成
- ProjectのVFXフォルダーで
Create > Visual Effects > Visual Effect Graphを選び、Simple LoopからVfxPracticeを作ります。 - GraphをSceneへドラッグし、生成されたGameObjectを原点、Rotation
(0, 0, 0)、Scale(1, 1, 1)へ置きます。 - Graphを開き、Spawn、Initialize Particle、Update Particle、Output Particle QuadのFlowが上から順につながっていることを確認します。
| Context | 処理時点 | Particle System側の対応 |
|---|---|---|
| Spawn | 発生の指示 | EmissionのRateやBurst |
| Initialize Particle | 粒子が生まれる最初の1回 | MainのLifetime・Size・Speed、Shape |
| Update Particle | 生存中の毎フレーム | Gravity、Force、Noiseなど |
| Output Particle Quad | 描画時 | Renderer、描画する色や形 |
Contextの中の一つの処理をBlock、値の計算を行うノードをOperatorと呼びます。位置・速度・色・寿命など、粒子ごとに保持する値はAttribute(属性)です。
初期状態の統一
テンプレートの見た目をそのまま使わず、比較する値をそろえます。SpawnにはConstant Spawn Rateだけを残し、Rateを10へ設定します。Initializeの既存Blockを削除し、Context内の空き領域を右クリックして次を追加します。Set系BlockはComposition Set、Source Portを使います。
| Block | 設定 |
|---|---|
| Set Position | Random Per Component、A (-0.5, -0.5, 0)、B (0.5, 0.5, 0) |
| Set Lifetime | Random Off、Lifetime 2秒 |
| Set Size | Random Off、Size 0.1 |
| Set Velocity | Random Off、Velocity (0, 0, 0) |
Set Positionの各成分を別々にランダム化することで、1×1の範囲へ配置します。Initializeを選び、システムのSimulation SpaceをLocal、Capacityを512、Bounds ModeをManualにします。BoundsのCenterは(0, 0, 0)、Sizeは(8, 12, 8)です。
Updateの既存Blockは削除し、ContextのInspectorでUpdate Position、Age Particles、Reap Particlesを有効にします。位置を速度で更新し、年齢を進め、寿命で終了する基本処理です。
OutputはQuadのまま使い、Blend ModeをAlphaにします。Orient: Face Camera Planeなどカメラへ向けるBlockは残し、テンプレートに色や大きさを時間変化させるBlockがあれば削除します。色は白、Alphaは1、テクスチャーはテンプレートのものを使います。
Graphを保存してPlayすると、原点付近に小さな粒子が現れます。2秒以上待ち、常に約20個が生存する設定であることを計算してください。重なりによって見た目の個数を数えにくい場合もあります。
- 粒子を表示でき、どのContextを編集すれば寿命が変わるか答えられる。
- RateとLifetimeから、おおよその同時生存数を求められる。