VFX Graph の概要 - Unity 2018.4 LTS
Tutorial
·
intermediate
·
+10XP
·
15 mins
·
(20)
Unity Technologies

本チュートリアルでは、VFX Graph でパーティクルを使ったエフェクトを作成するための基礎知識を学び、その後、下の吹雪のようなエフェクトの作成に移ります。
Languages available:
1. はじめに
本チュートリアルは、Unity 2019.4.8f1 LTS と Visual Effect Graph 7.3.1 を使って検証しました。
Unity 2018.3 で導入された Visual Effect Graph (VFX Graph) は、見事なビジュアルエフェクトをリアルタイムで作成するためのノードベースのエディターです。GPU (Graphical Processing Unit) とコンピュートシェーダーのパワーを利用して、VFX Graph は数百万個のパーティクルで構成されるエフェクトを同時にオーサリングすることができます。ただし、このパワーは最大の注意点でもあります ー VFX Graph で作成したパーティクルシステムは、Unity の物理演算が CPU (Central Processing Unit) で行われるのに対し、GPU で演算されるため、シーン内の物理演算の影響を受けません。
このチュートリアルでは、VFX Graph でパーティクルを使ったエフェクトを作成するための基礎知識を学び、その後、下の吹雪のようなエフェクトの作成に移ります。

Svchost74 氏がアセットストアで作成した「Snow Mountain」アセットの画像と内容が含まれています。
2. プロジェクトのセットアップ
プロジェクトのセットアップ
VFX Graph は、Unity バージョン 2018.3 で導入された HDRP (High Definition Render Pipeline) のパッケージに含まれています。そのため、先に進む前に、プロジェクトが HDRP 用に設定されていることを確認する必要があります。
1. Window > Package Manager と進み、High Definition RP を検索します。
2. 右下で、最新バージョンのパイプラインをインストールします (画像 01)。

画像 01:Unity 2019.3 での HDRP パッケージのインストール
ここからは、新しいビジュアルエフェクトを作ってみましょう。
3. Assets フォルダーの下で右クリックし、Create > Visual Effects > Visual Effect Graph の順に選択します。名前は「Snow」などとします。新しいゲームオブジェクトを作成して、Inspector ビューに移動します。そこから、作成したグラフを Inspector にドラッグします。そこから、作成したグラフを Inspector にドラッグします。また、グラフを Hierarchy にドラッグすると、エフェクトを含む ゲームオブジェクトがシーンに自動的に作成されます。これで、シーンの中でエフェクトが再生されるのを確認できます。グラフをダブルクリックして、VFX Graph エディターで開きます (画像 02)。

画像 02:空の VFX Graph を見てみましょう。左にブラックボード (Blackboard)、右にデフォルトのコンテキストがあることに注目してください。
3. 変数、ノード、ブロック、コンテキストについて
VFX Graph は、一見すると Shader Graph とよく似ています。Shader Graph に慣れている人は、VFX Graph のコンセプトの一部にも精通しているかもしれません。エフェクトの作成に入る前に、VFX Graph の基本的なコンポーネント (変数、ノード、ブロック、コンテキスト) について説明します。
コンテキストはパーティクルに適用される操作の順序を表しており、C# の MonoBehaviour スクリプトと同様の構造を持っています:
- Spawn (Awake() のコールと同様: 現在のフレームで作成すべきパーティクルの数を決定)
- Initialize (Start() のコール: そのエフェクトの容量とバウンディングボックスを決定)
- Update (Update() のコール: すべてのフレームを実行する場所)
- Output(結果として得られるパーティクルをどのように画面に表示するかを定義する)
ブロックは、各コンテキストに追加される操作です(Start() や Update() の呼び出しの中で関数を呼び出すのと同じです)。ブロックを追加するには、コンテキスト内でスペースバーを押すか、コンテキスト内で右クリックして Create Block を選択します。
上の例では、パーティクルはランダムな速度とランダムな寿命で初期化されています。
下の図(John O'Reilly 氏提供)は、それぞれのコンテキストの目的を説明しています (画像 03)。

画像 03:この図は、ビジュアルエフェクトがコンテキストを通じてどのように処理されるかを示しています(上から下に向かって評価される)。
変数はブラックボード上に存在し、様々なブロックやノードのプロパティを駆動するために使用されます (画像 04)。

画像 04:ブラックボードでの変数とそれに対応するデータタイプの表示
新しい変数を作成するには、ブラックボードの右上にある「+」マークをクリックして、変数のデータタイプを選択します。その後、変数を駆動したいプロパティの横にドラッグし、変数の出力をプロパティの入力にドラッグするだけです (画像 05)。


画像 05:これらのデータタイプは、従来の Shade rベースのパーティクルシステムで宣言されるデータタイプに直接対応しています。Spawn Rate 変数が Periodic Burst Block の Count プロパティの駆動に使われていることに注目してください。
変数の Exposed プロパティがチェックされていると、VFX Graph エディターの外にある Inspector で修正することができます。
ノードは、Shader Graph で使われているのと同じように、個々の操作を行い、互いにリンクして大規模な計算処理を行います。また、変数の代わりに使用して、ブロックのプロパティを動かすこともできます (画像 06)。

画像 06:Set Color ブロックのカラーを駆動するためにリンクされた一連のノードの表示
4. 次のステップ
VFX Graph の基本的なコンセプトを紹介したところで、GPU のパワーを使って数百万個のパーティクルをリアルタイムでシミュレートできるようになりました。次のチュートリアルでは、VFX Graph を使って雨や雪などの天候効果をシミュレートする方法について説明します。