🐙

Unity VFX Graph 入門の入門

に公開

この記事で学べる事

  • VFX Graphとはなんなのか
  • VFX Graphの特徴
  • VFX Graphの最小入門
  • AI時代の学習法について

VFXGraph自体が覚えるのが結構大変なのでなるべく文字数が多くないように心がけていこうと思います。
※ 画像等後程見やすくします。

VFX Graphとは

おそらくこの記事を見に来る人は何か分かっていると思いますが、簡単に説明を書いておきます。
VFX GraphとはUnityで利用できるパーティクル(エフェクト)を作成できるシステムです。
流石にエフェクトとはなんぞや?って言うことに関しては割愛させていただきます。
基本的にシェーダーグラフと同じでノードを接続して作成する仕組みになっています。
難しいコードを書かずに自由にエフェクトを作ることが出来るようになっています。

覚えたいけどなんか小難しくない?

公式からVFXGraphについての日本語翻訳されたガイドブックが出ましたが、中身を見てみると小難しいことが書いていて基本的な事はわかったけど結局どうしたらカッコいいエフェクトつくれるんだ?ってなる人もいるかもしれません。

ガイドブックに関してはある程度自分で組んでみてから読んだほうが理解できるかなと思います。

日本語の解説記事や動画少なすぎでは?

ほんとにそうです。見つけたとしても情報が古くて今の仕様とは違ってたりして初心者バイバイな状態です。
後は初心者向けと言いつつPhotoshopを使ってテクスチャを作ったりBlender等でメッシュを自分で作る前提の動画だったりで、とにかく完全初心者を挫かせてくる講座が多いです。
なので私は少しでも日本語での解説が出来たらよいなって思ってこの記事を書いています。
とはいうものの私もまだまだ初心者の身ではありますので動画に関してはだいぶ先にになるかもしれません。
書籍に関しては1冊だけ日本語のものが存在しているが、2023の書籍なのでやはり現在のバージョンでは対応してない部分があったりもしますが入門する分には結構よいなと感じました。
ただ、1冊5000円越えなので決してお安くありません。
出来ればオンラインでなるべく最新寄りのバージョンに対応した講座が無料であると最高なんですよね。

海外の解説記事や動画に関しては結構ある

現在VFX Graphを学ぶのであれば海外のチュートリアルが基本になるのかなと思います。
基本的に真似すれば同じように作ることができるので右も左もわからないという人はチャレンジしてみることをオススメします。

VFX Graphの最小入門

とりあえず触ってみない限りには覚えられないのでこれを期に軽くハンズオン的なものをやりましょう。
Unityのインストールに関しては入っている前提で進めますが、VFXGraphに関してはあとから入れる必要があるためそこから解説します。

前提

  • Unity6以上をインストールしていること
  • プロジェクトを作成するときにURPもしくはHDRPを選択していること
    • 本講座はURPメインで進めていくことをご了承ください。

Visual Effect Graphをインストールする

Gitからインストールもできますが、簡単な方法としてパッケージマネージャーからUnityレジストリを選択して Visual Effectで検索すると表示されるのでインストールします。

ついでにオプションもインストールしておくとよいです。
オプションをインストールしていないと、講座でたまに見つからないノードが合ったりするので必ず入れておきましょう。

Lerning Templateに関してはどちらでも大丈夫です。

VFXGraphのファイルを作成する

  • プロジェクトから右クリックで 作成 -> VifualEffect -> Visual EffectGraph
  • この時、テンプレートから作成するウィンドウが表示されるので「Simple Loop」を選択

  • 名前は一旦適当で作成を完了させる。
  • ステージに配置すると黄色と水色のパーティクルが飛び出すエフェクトが設置できます。

VFX Graphの構成を知る

  • 先ほど作ったVFXGraphをダブルクリックするとVFXGprahの編集画面が表示されます。
  • ここでルールに乗っ取って要素を配置してエフェクトを作っていきます。
  • テンプレートで作成したので、すでに一連の流れは作成されています。
  • VFX Graphを構成するコンテキスト(スポーンや初期化・更新・出力等)は最低でも4つ覚える必要があります。
  • 既にあるサンプルを例に1つずつ見ていきましょう。

Spawn system

  • ここは毎秒いくつパーティクルを生成するのかを決める箇所
  • 無限ループにしたり、1回切りの発生などを決められます。

Initialize Particle

  • プログラムでいうクラスの初期化関数に該当する箇所です。
  • 出力されるパーティクルの最大値や、初期値、初期Velocity(飛ばす方向)などを決められます。
  • 色を固定したい場合とかはここで色を設定したりしておくとよいですが、色を時間などで可変にしたい場合は、後続の更新処理や出力処理で設定したほうがよいです。

Update Particle

  • いわゆる更新処理。
  • 毎フレーム計算する箇所と覚えておくとよいです。
  • UnityでC#スクリプトを1回でも描いたことがある人に伝えるとUpdate関数に該当します。
  • ただし、ここはあくまで計算するフェーズのため出力ではないことを留意してください。

Output Particle

  • 画面に出力するためのコンテキスト
  • Updateで計算してOutputで描画するという形で覚えておくとよいです。
  • いろんなアウトプットコンテキストがあるので状況に応じて使い分けましょう。
  • ネットに上がっている記事なんかは古いことが多く、シェーダーを割り当てる項目があったりするが、最近のバージョンではシェーダー専用のアウトプットコンテキストが用意されているのでそちらを使いましょう。

好きに弄ってみる

ここで丸投げになってしまうと挫折する人も一定数居そうなので、こちらからいじる箇所を指定します。
コンテキスト1つずつ弄っていきましょう。

Spawn

  • Rateがおそらく64ぐらいになっていると思うので、そこの値を変えてみるとリアルタイムでシーンに配置しているパーティクルの数が変化します。
    • リアルタイム変化を見るためにVFXGraphとシーンウィンドウを横並びにしておくのをおススメします。
  • Rateに変数ノードをつなぐことにより、Unityのインスペクタからスポーン数を任意で変更することも可能になります。

Initialize

  • わかりやすい所でいうとCapacityの数値を弄ります。
  • スポーンを64ぐらいにしておき、Capacityを極端に1とかにしてみると変化がよくわかります。
  • 毎秒64スポーンするが、1度に出る最大値が1になっているので1個ずつしかでないというわけです。
  • 次にSet LifetimeのAとBを弄ってみると出力が変化するのが分かります。
  • 基本的にここは発生時にどうするかを色々できます。

Update Particle

  • Gravityを弄ってみましょう。
  • おそらくデフォルトだと噴水の様に湧き上がって地面に落ちていくエフェクトになっています。
  • GravityのY座標をマイナスから+にしてみるとよく違いが分かります。
  • Linear Dragを弄ると速度が変わったりするのがわかると思います。
  • Gravityを+方向にしてLinear Dragを8~10ぐらいにするとゆっくり上昇するようになります。
  • これを泡のテクスチャなんかに変えたら水中で湧き上がる泡のエフェクトを作れそうです。

Output Particle

  • 最も変化が分かりやすいのが、Main Textureの変更です。
  • Unityに入っているてきとうなテクスチャを選択してみると丸から変化します。
  • あとはMultiply Color OverLifeを見てもらうと、出力されているカラーだとすぐ判断できると思いますので好きに色をいじくって変化をみてみるとよいです。

これで一通りの入門は完了

なにがなんだかわからん……ってなっているかもしれませんが、自分でいじってみて挙動が変わるのは体験できたと思います。
エフェクトを作る上でこの感覚を覚えるのはとても大事だと思います。
この最初の一歩を踏み出せたことが重要です。
このSpawn -> Initialize -> Update -> Outputが基本になるのでしっかりと覚えておきましょう。

AI時代の学習法について

ChatGPTやClaudeなどのコード生成が出来るAIが普及したので、IT業界は技術が無くてもある程度AIの力を借りて開発が出来るようになりました。
もちろんゲーム作りでも生成AIはかなり恩恵があります。
イラスト・音楽などは一部界隈では版権問題やらで燃えてたりしますが、コードそのものに対しては著作権は存在しません。
コードを書いて1つの作品(ライブラリ等)に関しては著作表示することは可能ですが、例えば「特定の行列の計算をする1行のコード」に関しては著作権は存在しません。
コードを書く人間からするとかなり恩恵がある時代です。

UnityでのAIコーディングについて

正直なところ、UnityやUnrealEngineなどのゲームを作るエディタはAIコーディングの恩恵をあまり受けられていません。
ただ、これも時間の問題でそのうちAIでエディタを操作するのが主流になると思います。
一応、現在でもUnityに関してはMCPというAIが操作するための機能を非公式で開発されました。
実際に使ってみましたが、結構不安定だったりしてまだ発展途上間が否めません。
公式でMCP機能が実装されるのは時間の問題だと思うので期待して待っていましょう。

実はVFX GraphはAIの恩恵は結構受けられる

VFXGraphはノードを繋げていく仕様のためいわゆるGUI操作で作るのがメインのためAIで自動で作ってくれるということはまだできません。(現在でもMCPを経由すれば使えばいけるかも……?)
じゃあどうやってAIの恩恵を受けられるのかというと、文章ベースで接続の方法を教えてくれるのでそれ通りに組んでみるとVFXGraph初心者でも思ったより完成度の高いエフェクトを作ることができます。
欠点としてはAIが記憶しているバージョンが基本的に古かったりするので指定されたノードやプロパティが存在しないこともあります。
なのでWeb開発の様に無知な状態でAIに頼りすぎると完成までいけなかったりするのでしっかりとVFXGraphについて学んでいってもらえたらうれしいです。

Discussion