Context
Contexts (コンテキスト) は、Visual Effect Graph の 処理 (垂直) ワークフローの主要要素で、パーティクルがどのようにスポーンし、シミュレーションするかを決定します。グラフ上でのコンテキスト整理方法は、処理ワークフローの操作順序を定義します。処理ワークフローについては、Visual Effect Graph 論理 を参照してください。コンテキストはそれぞれ、演算の一段階を定義します。例えばコンテキストが実行できることは、以下の通りです。
- エフェクトがどれくらいの量のパーティクルをスポーンするかを計算します。
- 新しいパーティクルを作成します。
- 生存中のパーティクルをすべて更新します。
コンテキストは連続的に接続し合って、パーティクルのライフサイクルを定義します。グラフが新しいパーティクルを作成すると、Initialize コンテキストが Update Particle コンテキストに接続して、各パーティクルをシミュレーションできます。さらに Initialize コンテキストは Output Particle コンテキストに直接接続して、動作をシミュレーションせずにパーティクルをレンダリングできます。
コンテキストの作成と接続
コンテキストは グラフ要素 の種類の 1 つですので、作成方法については、グラフ要素の追加 を参照してください。
コンテキストは垂直、線形順に接続し合います。これを達成するには、フロースロット を使います。コンテキストがどのパーティクルのライフサイクル部分を定義するかによって、上部、下部、または両方にフロースロットを持つ場合があります。
コンテキストの設定
コンテキストの動作を変更するには、ノード UI またはインスペクター内の 設定 を調整します。
設定の中には、コンテキストの外観を変更するものもあります。例えば Quad Output コンテキストで、UV モードを FlipbookMotionBlend に設定すると、Unity は以下の追加プロパティをコンテキストヘッダーに追加します。Flipbook Size、Motion Vector Map、Motion Vector Scale
フローの互換性
コンテキストの中には、互いに接続できないものがあります。ワークフローの一貫性を維持するために、以下のルールが適用されます。
- コンテキストは互換性のある入力/出力データ型のみに接続します。
- Event (イベント) は、1 つまたは多数のイベントまたは Initialize コンテキストに接続できます。
- Initialize コンテキストは、1 つまたは多数の SpawnEvent ソース、あるいは 1 つまたは多数の GPUSpawnEvent ソースを持つことが可能ですが、これらのデータ型は互いに排反します。
- 1 つの Update コンテキストには、1 つの Initialize コンテキストしか接続できません。
- Output コンテキストを Initialize または Update コンテキストに接続できます。
コンテキストの互換性の詳細については、下の表を参照してください。
コンテキスト | 入力データ型 | 出力データ型 | 特記 |
---|---|---|---|
Event | なし | SpawnEvent (1+) | なし |
Spawn | SpawnEvent (1+) | SpawnEvent (1+) | Spawn コンテキストをそれぞれ開始および停止する、2 つの入力フロースロットがあります。 |
GPU Event | なし | SpawnEvent | Initialize コンテキストに出力します。 |
Output Event | SpawnEvent (1+) | CPU スポーンイベントを Visual Effect コンポーネントに出力し返します。 | |
Initialize | SpawnEvent (1+) or GPUSpawnEvent (1+) | Particle (1) | 入力型は SpawnEvent または GPUSpawnEvent のいずれかです。これらの入力型は、互いに排反します。 Particle Update または Particle Output に出力可能です。 |
Update | Particle (1) | Particle (1+) | Particle Update または Particle Output に出力可能です。 |
Particle Output | Particle (1) | なし | Initialize または Update コンテキストのいずれかからの入力を持てます。 出力はありません。 |
Static Mesh Output | なし | なし | 独立したコンテキストです。 |
Context タイプ概要
このセクションでは、あらゆる種類のコンテキストに対する、一般的な設定を網羅します。
Event
Event コンテキストはストリングである、名前のみを表示します。イベントコンテキストをトリガーし、ワークフローを有効にするには、コンポーネント API でイベントコンテキスト名を使います。詳しい方法については、イベント送信 を参照してください。
Spawn
Spawn コンテキストは、Running、Idle、Waiting の 3 つのステートを持つ、独立したシステムです。
- Looping (Running): この状態では、Unity はコンテキストでブロックを計算し、新しいパーティクルをスポーンします。
- Finished (Idle): この状態ではスポーン機能がオフになっており、コンテキストでブロックを計算しない、またはパーティクルをスポーンしません。
- DelayingBeforeLoop/DelayingAfterLoop (Waiting): このステートでは、指定した期間コンテキストを一時停止します。遅延の後コンテキストは再開し、コンテキストでブロックを計算してパーティクルをスポーンします。
Spawn コンテキストは、互換性のある Blocks を追加してカスタマイズできます。スポーンコンテキスト API に関する情報は、スクリプトリファレンス を参照してください。
有効化および無効化
スポーンコンテキストは 2 つの フロースロット、Start と Stop を開放します。
- Start 入力は、スポーンコンテキストをリセット/開始します。このフロースロットに何も接続しないと、暗示的に OnPlay Event を使います。Start を何度も使用しても、一度使用するのと同じ効果しかありません。
- Stop 入力は、スポーンシステムを停止します。このフロースロットに何も接続しないと、暗示的に OnStop Event を使います。
ルーピングと遅延
Spawn コンテキストにはそれぞれ、いつコンテキストがパーティクルをスポーンするかを決定する、ステートが含まれています。
- Spawn コンテキストは、パーティクルのループ期間中にパーティクルを放出します。つまり、各ループが開始すると、内部スポーン時間はリセットします。デフォルトにより、期間は Infinite ですが、変更も可能です。
ループモードは以下のように設定します。- グラフ内で Spawn Context を選択します。
- Inspector で Loop Duration ドロップダウンをクリックします。
- リストから、Infinite、Constant、または Random のいずれかをクリックします。
- スポーンコンテキストは、ループを 1 回、多数、または無限回数実行できます。
ループ数の設定方法は以下の通りです。- グラフ内で Spawn Context を選択します。
- Inspector で Loop ドロップダウンをクリックします。
- リストから、Infinite、Constant、または Random のいずれかをクリックします。
- スポーンコンテキストは、各ループの前後に遅延を実行できます。遅延中、スポーン時間は通常通りに経過しますが、スポーンコンテキストはパーティクルをスポーンしません。
遅延機関の設定方法は以下の通りです。- グラフ内で Spawn Context を選択します。
- Inspector で Delay Before Loop または Delay After Loop ドロップダウンをクリックします。
- リストから、None、Constant、または Random のいずれかをクリックします。
Loop Duration、Loop、Delay Before Loop、または Delay After Loop を Constant または Random のいずれかに設定すると、スポーンコンテキストはヘッダー内に追加のプロパティを表示し、それぞれの動作を制御します。Unity は設定値を評価するために、以下のルールを用います。
- 設定されている場合、コンテキストの Start フロー入力がトリガーすると、Unity が Loop Count を評価します。
- 設定されている場合、ループが開始されるたびに Unity が Loop Duration を評価します。
- 設定されている場合、遅延が開始されるたびに Unity が Loop Before/After Delay を評価します。
ルーピングおよび遅延システムについては、下の図を参照してください。
GPU イベント
GPU イベントコンテキストは、入力をその他のシステムからの GPU イベントと接続する、実験的なコンテキストです。通常のイベントコンテキストとは 2 つの点で異なります。
- GPU は GPU イベントを計算し、CPU は通常イベントを計算します。
- GPU イベントコンテキストはブロックでカスタマイズすることができません。
ノート: スポーンイベントを初期化コンテキストに接続する際は、GPU スポーンイベントと通常のスポーンイベントが互いに排反しますので、注意してください。Initialize コンテキストには、一度に 1 つのタイプのスポーンイベントしか接続できません。
初期化
初期化コンテキストは、Unity がイベント、スポーンコンテキスト、または GPU イベントコンテキストから計算する SpawnEvent データに基づいて、新しいパーティクルを生成します。
例:もしスポーンコンテキストが、エフェクトが 200 の新しいパーティクルを作成すると言うと、初期化コンテキストは 200 の新しいパーティクルすべてに、ブロックを処理します。
Initialize コンテキストは、互換性のある Blocks を追加してカスタマイズできます。
初期化コンテキストは、新しいシステムのエントリーポイントです。そして、ヘッダーで以下の情報及び設定詳細を表示します。
プロパティ/設定 | 説明 |
---|---|
Bounds (Property) | システムのバウンディングボックスを制御します。 |
Capacity (設定) | システムの割り当て数を制御します。 |
Update
Update コンテキストは、Unity が Initialize と Update コンテキストから計算する Particle データに基づいて、システム内のすべての生存中のパーティクルを更新します。Unity は Update コンテキストを実行し、すべてのパーティクル、すべてのフレームを更新します。
パーティクルの Update コンテキストはさらに、パーティクル演算の一部を自動処理し、一般的な編集作業を簡素化します。
Update コンテキストは、互換性のある Block を追加してカスタマイズできます。
設定 | 説明 |
---|---|
Update Position | Unity がパーティクルに速度統合を適用するかを特定します。有効にすると、Unity がすべてのフレームで、各パーティクルの位置に簡単な Euler 速度統合を適用します。無効にすると、Unity は速度統合を適用しません。 |
Update Rotation | Unity がパーティクルに角度統合を適用するかを特定します。有効にすると、Unity がすべてのフレームで、各パーティクルの位置に簡単な Euler 統合を適用します。無効にすると、Unity は角度統合を適用しません。 |
Age Particles | コンテキストが年齢属性を使う場合に、更新コンテキストがパーティクルを時間の経過とともにエージングさせるかを制御します。 |
Reap Particles | コンテキストが年齢および生存期間属性を使う場合に、更新コンテキストが生存期間を超過したパーティクルを削除するかを制御します。 |
Output
Output コンテキストは、システム内のパーティクルをレンダリングします。パーティクルは、同システム内の Initialize および Update コンテキストからのパーティクルデータによって、異なるモード設定でレンダリングします。その後、設定を特定のプリミティブ形状としてレンダリングします。
Output コンテキストは、互換性のある Block を追加してカスタマイズできます。