
LAB11:グラフの基本設計
LAB10でGPUの処理の特徴を説明しましたが、GPUが理解しやすい「定型的な命令」をVFX-Graphを使って構築する流れを説明します。
VFX-Graphの各設定は、映像ソフトのパーティクルプラグインのように始めから全ての設定項目が表示されるわけではなく、必要最小限の状態から目的に合わせて自分でノードを追加していくことになります。

■VFX-Graph インターフェイスの概要
・VFX-Graph ビューにはワークスペースのほかに下記のパネルがあります。
「Blackboard」… Graphで使用しているプロパティの表示や外部連携
「VFX-Control」… Boundsエリアの記録や、Eventの手動発動など
※これらは使用しない場合は非表示にしておいても構いません。
・グラフは基本的には上から下に処理が流れていくと考えてください。
■VFX-Graph 各項目の名称に関して
・個々の機能を「ノード」という形で視覚化し、それらを接続することで命令を作成していきます。
・基本的には出現→初期化→更新→出力という処理の流れに合わせて、それぞれ「Spawnコンテキスト」「Initializeコンテキスト」「Updateコンテキスト」「Outputコンテキスト」という4つ「コンテキスト」で構成されています。
・コンテキストの中に配置されるノードを「ブロック」と呼びます。
・ワークスペースに配置されるノードを「オペレーター」と呼びます
※例外としてコンテキストが枝分かれ・重複する場合もあります。

■Spawn → Initialize の役割り
●Spawn(発生)コンテキスト
パーティクルの発生タイミングと発生量を設定するコンテキストです。
「発生し続ける」「2秒ごとに発生する」「発生量が周期的に変化する」など
●Initialize(初期化)コンテキスト
パーティクルが上記タイミングで発生する際の、位置・寿命・速度・大きさなどを設定するコンテキストです。
「球体の表面から外側に向かって発生する」「竜巻のように発生する」など

■Update → Output の役割り
●Update(更新)コンテキスト
発生したパーティクルが寿命で消滅するまで毎フレーム計算されます。
重力やフォース(風)、乱流などのブロックを追加します。
「重力で下方向に落ちていく」「風に流れていく」など
●Output(出力)コンテキスト
パーティクルの色や形状などの見た目を設定するコンテキストです。
「寿命に合わせて色が変化する」「テクスチャ平面をカメラに向ける」など

◆VFX-Graphファイルの実際の作成方法
VFX-Graphを作成する際、私は下記の手順で作成しています。
・プロジェクトビューのフォルダ上で右クリック
・Create > Visual Effects > Visual Effect Graph
・Create new VFX Asset ウインドウが起動
・プリセットを1つ選択して Create
・「New Graph」というファイルができる
・Hierarchy ビューにドラッグ&ドロップ
・GameObject(立方体アイコン)ができる
・Inspectorビューの Edit ボタンをクリック
・VFX-Graph が編集できる状態になる

◆コンテキスト内にブロックを追加する方法
コンテキスト内で右クリック>Create Block で検索ウインドウが表示されるので、使用したいブロック名をタイプして探し出してください。
◆ノード・オペレーターを追加する方法
ワークスペース(余白)で右クリック>Create Node で検索ウインドウが表示されるので、使用したいノード名をタイプして探し出してください。
「そもそもどんなノード(ブロック・オペレーター)が存在していて、どういう使い方をするのかわからない」という方も多いと思います。私もそうでしたが、サンプルの作例を解読したり、このサイトのTipsを試行錯誤したりすることで、だんだんと「定型」が見えてきて、感覚的に理解できてくると思います。1つ1つのノードの機能を覚えてから使用するのは、膨大な数のノードと接続パターンが存在するため、習得の方法として非効率だと思います。

【Tips】使用したいブロック名が表示されない時
上記の方法でブロックを追加しようと思っても、名前が表示されない場合があります。その場合は一旦近い名称のブロックを作成してから、Inspectorでブロックの属性を変更することで必要な形になる場合があります。上図参照
(例)「Add Size Ramdom Per 「」Component」は検索しても表示されないのですが、一旦「Set Size」を作成してから InspectorでCompositionを「Add」に、Randomを「Per Component」に変更することで、ブロックを作成することができます。
【注意】シーンとVFX-Graphアセットは別ファイル
VFX-Graph のサンプルファイルを変更したり、試行錯誤の際にバージョン違いを保存しておきたくなることがあると思います。その場合シーンファイルを別名保存してもリンクされている「VFX-Graphアセット」が同じ場合は、複製保存したことにならないため注意が必要です。
バージョン違いを作成したい場合は、プロジェクトビュー内で、VFX-Graphアセットをコピー&ペーストして複製してください。また、VFX-Graph ビューに表示されているグラフがどのアセットのものなのか常に把握しておく必要があるので注意してください。(表示されている他のグラフを編集してしまうことが私も結構あります)
次の項目では、VFX-Graphのプリセットを1つずつ見ていきましょう。
