25 人が閲覧(直近 30 日) シミュレーション

Unity VFX Graphの使い方|導入・イベント制御からShuriken比較・URP/WebGPU対応まで【Unity 6.6・6.3 LTS】

Unity VFX Graphの使い方|導入・イベント制御からShuriken比較・URP/WebGPU対応まで【Unity 6.6・6.3 LTS】

VFX Graph(Visual Effect Graph)は、パーティクルの計算をGPUのコンピュートシェーダーで行うUnityのビジュアルエフェクトツールです。ノードをつないで炎・煙・火花を組み立てます。扱える粒の数は公式の比較表で「数百万」が目安とされていますが、実際の描画速度はGPUや描画設定で変わります。この記事では、導入からエフェクト作成、C#からのプロパティ・イベント制御、Shuriken(Particle System)との使い分け、URP・モバイル・Webでの対応状況、表示されないときの確認項目までを、2026年10月時点の現行版(Unity 6.6、LTSは6.3)の公式ドキュメントに沿って整理します。

まとめ:VFX Graphを選ぶ条件と最短の使い方

VFX Graphが向くのは、粒の数で見せる表現(雨・雪・大規模な炎や煙)を、コンピュートシェーダーが使えるプラットフォームで動かす場合です。少数のヒットエフェクトや、パーティクル1粒ずつをC#から読み書きしたい処理はShurikenのほうが扱いやすく、両者は1つのプロジェクトで併用できます。

  • 導入:Package Managerの Unity Registry から「Visual Effect Graph」を入れる(HDRPなら同梱済み)。Assets > Create > Visual Effects > Visual Effect Graph でテンプレートを選んで作る
  • 組み方:Spawn(いつ・いくつ)→Initialize(生まれた瞬間の値)→Update(毎フレームの変化)→Output(描き方)の4コンテキストにブロックを足す
  • 制御:Blackboardで公開したプロパティを SetFloat などで書き換え、単発の演出は SendEvent で起こす
  • 対応:URPとHDRPで動き、Built-in Render Pipelineでは動かない。URPは公式ドキュメント上いまもプレビュー扱いで、OpenGL ESは非対応。WebはUnity 6.6でWebGPUを有効にしたビルドなら動く

VFX Graphとは:GPUで動くリアルタイムVFXの仕組み

「リアルタイムVFX(real time vfx)」は、映像作品のように事前にレンダリングするのではなく、ゲームの実行中に毎フレーム計算して描くエフェクトを指します。VFX Graphはそれを担うUnity標準の仕組みで、公式のGetting Startedは「Scriptable Render Pipelineで描画し、コンピュートシェーダーでシミュレーションするパッケージ」と説明しています。

Unityのマニュアル「Choosing your particle system solution」は、扱える粒の数の目安をBuilt-in Particle System(通称Shuriken)が「Thousands(数千)」、VFX Graphが「Millions(数百万)」としています。CPUで1粒ずつ処理する方式に比べて、粒の数が増えてもCPU負荷が増えにくいのが差です。そのかわり、GPUで完結する分だけ、個々の粒をC#から直接読み書きすることはできません。

VFX Graphの導入とエフェクト作成(Unity 6.3 LTS・6.6)

Visual Effect Graphパッケージのインストールと対応バージョン

Window > Package Manager を開き、Unity Registry から「Visual Effect Graph」を選んで Install します。HDRPを入れたプロジェクトでは自動で入るので、追加の作業はありません。

VFX Graphは「core package」で、Requirements and compatibilityによると、パッケージの版はエディターの版に固定されています(例:Unity 6.2.x はすべて 17.2.0)。Unity 6.3 LTS なら 17.3、6.6 なら 17.6 が入るため、版を手で合わせる必要は基本的にありません。2026年10月18日時点のUnityは、LTSが6000.3.26f1、サポート版の最新が6000.6.6f1、ベータが6000.7.0b5です(Unity公式のリリース一覧API)。

VFXアセットの作成・シーン配置・プレビュー

Assets > Create > Visual Effects > Visual Effect Graph を選ぶとテンプレートの一覧が開くので、出発点にする作例を選んで Create します。作った .vfx アセットをHierarchyへドラッグすると、Visual EffectコンポーネントのついたGameObjectが作られ、アセットが割り当てられます。既存のGameObjectに Visual Effect コンポーネントを足し、Asset Template 欄の「New」から作る方法もあります。

.vfx をダブルクリックするとVFX Graphウィンドウが開きます。編集中のグラフはシーンでそのまま再生されるので、Playモードに入らなくても見た目を確かめられます。

Learning Templatesのインポートと公式作例

Unity 6(VFX Graph 17)で追加されたLearning Templatesは、機能ごとに1つずつVFXを並べた公式サンプルです。Package ManagerでVisual Effect Graphを選び、Samples の「Learning Templates」を Import すると、URP用とHDRP用のシーンが入ります。各VFXに説明とドキュメントへのリンクが付き、Unity 6.1ではトレイル(軌跡)の作例も加わりました。ブロックの使い方に迷ったら、ここで近い作例を開くのが早道です。

VFX Graphの4つのコンテキストとブロック構成

Spawn・Initialize・Update・Outputの役割

VFX Graphのグラフは、パーティクルの一生を上から下へ流れる4つのコンテキストで書きます。各コンテキストに「ブロック」を積んで挙動を決めます。

コンテキスト 決めること 代表的なブロック
Spawn いつ・いくつ出すか Constant Spawn Rate、Single Burst、Periodic Burst
Initialize Particle 生まれた瞬間の値 Set Lifetime、Set Position Shape、Velocity from Direction & Speed
Update Particle 毎フレームの変化 Gravity、Linear Drag、Turbulence、Collision Shape
Output Particle どう描くか Set Size over Life、Set Color over Life、Orient

煙のように出し続ける表現は Constant Spawn Rate、爆発のように一度に出す表現は Single Burst を使います。Single/Periodic Burst ブロックはRepeatの設定を Periodic に切り替えると Periodic Burst になり、Delayの間隔で繰り返し出します。

Initialize Particle には、同時に存在できる粒の上限を決める Capacity があります。公式の説明は「シミュレーションの要素数の固定値」で、メモリ確保もこの値で決まります。Burstの数を増やしても粒が増えないときは、まずCapacityを見てください。

ノード・Blackboard・Subgraphの使い方

グラフの空き場所でスペースキーか右クリックを押すとノード検索が開きます(Unity 6でツリー表示とお気に入りに対応)。出力ポートを入力ポートへつないで値を流し、計算はOperator(演算ノード)で組みます。

左のBlackboardで作ったプロパティは、複数のノードから同じ値を参照できるうえ、Exposedにすると Inspector とC#から書き換えられます。後述するスクリプト制御の入口はここです。Unity 6のBlackboardにはパーティクル属性(Attribute)の欄も加わり、ドラッグで Set/Get ブロックを作れます。処理が大きくなったら Subgraph に切り出すと、同じ仕組みを別のVFXで使い回せます。

爆発エフェクトを作る手順

4つのコンテキストを一通り使う例として、一瞬で火花が飛び散る爆発を組みます。テンプレートの「Simple Loop」から始めると、必要なコンテキストがそろった状態で編集できます。

  1. SpawnのConstant Spawn Rateを消し、Single Burst を置いて Count を 300 にする
  2. Initialize ParticleのCapacityを、Burstの数以上(ここでは 300 以上)にする
  3. Set Lifetime を Random で 0.5〜1.0 秒にし、短時間で消えるようにする
  4. Velocity from Direction & Speed (Random Direction) を置き、全方向へランダムな初速を与える
  5. Update Particleに Gravity と Linear Drag を足して、放物線を描きながら減速させる
  6. Output ParticleのSet Color over Lifeで、白→オレンジ→暗い赤のグラデーションにし、Set Size over Lifeで最後に小さくする

同じグラフに煙用のシステムをもう1つ足し、寿命を長く・速度を遅くすると、火花と煙が同時に立つ爆発になります。このままだと有効化した瞬間に1回爆発するだけなので、狙ったタイミングで出すには次の章のイベントを使います。

C#からVFX Graphを制御する:プロパティとイベント

炎の勢いをゲームの状況で変える、弾が当たった位置で爆発させる、といった演出はC#から行います。手段は「公開プロパティの書き換え」と「イベントの送信」の2つで、どちらも VisualEffect コンポーネントのAPIです。

公開プロパティの更新とプロパティID

BlackboardでExposedにしたプロパティは、型ごとのメソッド(SetFloat・SetVector3・SetTexture・SetGradient など)で書き換えます。Visual Effect component APIは、名前の文字列で渡す方法を「最も最適化されていない」、Shader.PropertyToID で作った整数IDを「最も最適化されている」と書いています。毎フレーム呼ぶならIDを static で持つか、両方の扱いやすさを兼ねる ExposedProperty クラスを使います。

後掲コードのSpawnRateで放出量を変えるには、Blackboardに同名のFloatプロパティを作ってExposedを有効にし、Constant Spawn RateのRateへ接続します。直前の爆発例はSingle Burstを使うため、この設定は連続放出する別のシステムに適用します。名前や型がグラフと食い違っていると値は反映されないため、HasFloat などの Has 系で確かめてから渡すと不一致に気づけます。値を元に戻すときは ResetOverride を使います。

イベントによるエフェクトの起動・停止と属性の受け渡し

Eventsによると、既定のイベントは OnPlay と OnStop の2つです。Spawnの Start/Stop ポートに何もつないでいなければ、暗黙にこの2つが結ばれます。独自のイベントは、グラフに Event コンテキストを置いて名前(例:OnHit)を入れ、Spawn の Start につなぐと作れます。

C#からは SendEvent で送ります。位置や色などの属性を載せるときは、CreateVFXEventAttribute() で作った VFXEventAttribute に値を入れて渡します。受け取る側は Initialize Particle に、属性をイベントから引き継ぐブロック(メニューの Attribute > Set > Inherit Position。Set Position ブロックの Source を Source にしたもの)を置きます。

using UnityEngine;
using UnityEngine.VFX;

[RequireComponent(typeof(VisualEffect))]
public class VfxController : MonoBehaviour
{
    // Blackboardのプロパティ名・イベント名・属性名は文字列でなくIDで持つ
    static readonly int SpawnRateId = Shader.PropertyToID("SpawnRate");
    static readonly int HitEventId = Shader.PropertyToID("OnHit");
    static readonly int PositionId = Shader.PropertyToID("position");

    [SerializeField, Range(0f, 1f)] float intensity = 0.5f;

    VisualEffect vfx;
    VFXEventAttribute hitAttribute;

    void Awake()
    {
        vfx = GetComponent<VisualEffect>();
        // 同じ属性を何度も送るので、作るのは1回だけにする
        hitAttribute = vfx.CreateVFXEventAttribute();
    }

    void Update()
    {
        // グラフに無い名前へSetしても値は届かないので、Hasで確かめてから渡す
        if (vfx.HasFloat(SpawnRateId))
            vfx.SetFloat(SpawnRateId, intensity * 500f);
    }

    // 弾が当たった位置でヒットエフェクトを出す(ゲーム側から呼ぶ)
    public void PlayHit(Vector3 worldPosition)
    {
        // この例はSystemのSpaceがLocalの設定専用。Worldの場合は次行の第2引数をworldPositionに変更する
        hitAttribute.SetVector3(PositionId, transform.InverseTransformPoint(worldPosition));
        vfx.SendEvent(HitEventId, hitAttribute);
    }
}

このコードは、UnityEngine と UnityEngine.VFX の該当APIだけを模したスタブに対して .NET SDK 10 でコンパイルが通ることを確かめています(Unity上での描画結果までは確かめていません)。VFXEventAttribute は送信時に中身がコピーされるので、上のように1つを使い回してかまいません。送ったイベントは、その直後ではなく LateUpdate の後の VisualEffect の更新でまとめて処理されます。

シーン開始時に勝手に再生させたくない場合は、Visual Effect の Inspector で Initial Event Name を OnPlay から OnStop などSpawnを始めないイベント名に変えます。そのうえで、OnPlayを受け取るシステムは Play() で、上の例のようにSpawnのStartへOnHitをつないだシステムは PlayHit からOnHitを送って起動します。再生制御は Play()・Stop()・pause・Reinit()(時間を0に戻し既定イベントを送り直す)で行います。

Property Binderによる位置・入力・音声データの連携

GameObjectの位置や入力の値をプロパティへ流すだけなら、C#を書かずに VFX Property Binder で済みます。Visual Effectと同じGameObjectにコンポーネントを足し、結びたい項目を選ぶだけです。

  • Transform:位置・Transform・速度をプロパティへ(Positionバインダーは、プロパティ名の末尾に _position を付けないと動かないと公式に書かれています)
  • Physics:Raycastの当たり判定(hasHit・位置・法線)
  • Audio:Audio Spectrum to AttributeMap で音のスペクトルをテクスチャに焼いて渡す
  • Input・UI:キー・マウス・タッチ、Slider・Toggle・Dropdownの値

足りない場合は VFXBinderBase を継承し、IsValid と UpdateBinding を実装して独自のバインダーを作れます。

VFX GraphとShuriken(Particle System)の違いと使い分け

Unityには従来からのBuilt-in Particle System(通称Shuriken)もあります。置き換え関係ではなく、コンピュートシェーダーが使えるプラットフォームでは同じプロジェクトで両方を使えます。

公式の比較表で見る性能と機能

Unityマニュアルの比較表を要約すると次のとおりです。

項目 VFX Graph Shuriken
対応パイプライン URP・HDRP Built-in・URP・HDRP
扱える粒の数 数百万 数千
編集方法 グラフ(ノード) Inspectorのモジュール
物理との連携 グラフで定義した形・深度バッファ Unityの物理システム
C#からの操作 公開プロパティとイベント 粒1つずつ読み書き可
衝突イベントのC#での受け取り 比較表に記載なし あり

なお比較表は色・深度バッファの参照を「HDRPで可能」としていますが、VFX Graph 17(Unity 6)でURPのカメラバッファも参照できるようになっており、表の記述は古いままです。

VFX GraphとShurikenの選定基準

次のいずれかに当てはまればVFX Graphを選びます。雨・雪・大規模な炎や煙のように数万粒以上を出す。PC・据え置き機などHDRPが動く環境が対象。粒の動きを深度バッファやSDF(符号付き距離場)に沿わせたい。

逆に、VFX Graphを選ぶべきでないのは次の場面です。粒が当たったことをゲームロジックで受け取りたい(ダメージ判定・効果音の発火など)。OpenGL ESしか使えない古いAndroid端末を切れない。WebGL2のままでWeb配信する。Built-in Render Pipelineのプロジェクトを移行せずに使う。このどれかに当たる演出はShurikenで作るほうが確実です。実際の構成では、背景の大規模な煙や雨をVFX Graphに、当たり判定に絡む少数のエフェクトをShurikenに分ける形が組みやすくなります。

ゲーム全体の描画方式や対応端末の線引きから決めたい場合は、ゲームアプリ開発の支援で設計段階から相談できます。

URP・モバイル・Webでの対応状況(2026年10月時点)

「VFX GraphはURPで正式対応になった」「Webでは使えない」は、どちらも現行版では正確ではありません。公式の要件ページとUnity 6.6のマニュアルで確かめた現状をまとめます。

URPはまだプレビュー扱い

VFX Graph 17.6(Unity 6.6)の要件ページには、HDRPについて「プレビューを終えている(HDRPが対応する全プラットフォームに対応)」、URPについて「プレビューを終えていない(URPが対応するプラットフォームの一部にだけ対応)」とあります。Unity 6.3 LTSの17.3でも同じです。加えて、URPではガンマ色空間に対応していません。Project Settings > Player の Color Space が Gamma のURPプロジェクトでは、Linearへ切り替えてから使います。

機能の差は、Unity 6.6のレンダーパイプラインの機能比較表で確認できます。VFX Graphの行では、Distortion・Half-resolution・Simple lit particlesがURPでは非対応でHDRPだけ対応、Trailは両方で実験的(Experimental)扱いです。一方、カメラバッファ(深度での衝突・カラーバッファ)とデカールはURPでも使え、URPの2Dレンダラーではソートレイヤーに沿って3Dパーティクルを描けます。

URPで作れないわけではなく、Learning TemplatesもURP用のシーンを持っています。ただし、出荷対象の端末で動くかは、要件ページの「一部のプラットフォーム」に入るかを実機で確かめる前提になります。

モバイルはVulkanかMetalで、OpenGL ESは非対応

最低要件は、コンピュートシェーダーに対応していること(SystemInfo.supportsComputeShaders がtrue)と、頂点シェーダーからSSBOを読めること(SystemInfo.maxComputeBufferInputsVertex が0より大きい)の2つです。OpenGL ESには対応していないと明記されているため、AndroidではGraphics APIをVulkanに、iOSではMetalにします。

要件ページの文言は版で変わっています。17.4(Unity 6.4)までは「モバイルプラットフォームではプレビューを終えていない」という一文がありましたが、17.5(Unity 6.5)以降の要件ページからはこの一文が消えています。一方で、URPがプレビュー扱いである記述とOpenGL ES非対応の記述は17.6・17.7でも残っています。LTSの6.3で出荷するなら、モバイルはまだプレビューという前提で計画してください。

WebGPUでの動作条件とWebGL2フォールバック

従来の「WebではVFX Graphが使えない」は、WebGL2にコンピュートシェーダーが無いことが理由でした。Unity 6.6の新機能で、WebGPUは実験的リリースを終えました。WebGPUの紹介ページは、WebGL2ではできない機能として Compute shaders・GPU skinning と並べて VFX Graph を挙げています。WebGLの仕組みとUnityのWebビルドを前提にしているプロジェクトでも、Graphics APIをWebGPUに変えればVFX Graphの選択肢が開きます。

注意点は3つあります。まず、WebGPUは自動では有効にならないので、Player SettingsのWeb設定でAuto Graphics APIを無効にし、Graphics API一覧にWebGPUを追加して先頭へ移動します。次に、WebGL2をフォールバックとして残すと、WebGPUが使えないブラウザではWebGL2で起動し、その環境ではVFX Graphのエフェクトが出ません。最後に、WebGPUは async compute(非同期コンピュート)に対応しておらず、コンピュートシェーダー内で RWBuffer が使えないなどの制約があります。Web向けにVFX Graphを使うなら、フォールバック時にShurikenへ差し替える分岐まで作っておくのが安全です。

Unity 6系で追加されたVFX Graphの主な機能

VFX Graphの更新は、17.1(Unity 6.1)まではパッケージの更新履歴に、17.2(Unity 6.2)以降はUnityマニュアルの「What’s new」にまとめられています。エフェクト作りに関わるものを版ごとに並べます。

版 主な追加・変更
Unity 6.0(VFX 17) URPカメラバッファ参照、Debugパネル、Learning Templates
Unity 6.1(17.1) GPUイベントのインスタンシング対応、Custom HLSLの読み書きバッファ
Unity 6.3 LTS(17.3) 付箋(Sticky Notes)のグループ追加と色分け
Unity 6.5(17.5) テンプレート一覧の検索・絞り込み、PrewarmComputeShaders API
Unity 6.6(17.6) Shader Graphの新規作成、Shader Graphサブグラフの昇格プロパティ対応

重いエフェクトは、Unity 6.0のDebugパネルでGPU・CPUの処理時間とGPUメモリの使用量を見て、どのシステムが重いかを先に特定します。Unity 6.5の VisualEffectAsset.PrewarmComputeShaders は、コンピュートシェーダーを事前に準備して初回再生の引っかかりを減らすAPIです。

Unity 6.6では、VFX Graphの出力ブロックの Shader Graph 欄で「New」を選ぶと、VFX用テンプレートからシェーダーを直接作れるようになりました。Shader Graph側の基本操作はUnity Shader Graphの使い方|作成手順とStep・Timeノード、Custom Functionで解説しています。

Unity 6.5では、Built-in Render Pipelineが非推奨(deprecated)になりました。Unity 6.5の新機能は、Unity 6.7 LTSのライフサイクルが終わるまではバグ修正と保守を続けると書いています。Built-inのプロジェクトでVFX Graphを使いたい場合、URPかHDRPへの移行が前提です。6.3 LTSの更新内容はUnity 6.3 LTS(6000.3)の新機能と変更点にまとめています。

VFX Graphが動作しない・表示されないときの確認ポイント

「何も出ない」「途中で消える」「ビルドで出ない」ときは、次を上から確かめてください。

  • レンダーパイプラインがURPかHDRPか(Built-inでは動かない)。URPならColor SpaceがLinearか
  • Graphics APIがOpenGL ESやWebGL2になっていないか(Android はVulkan、iOS はMetal、WebはWebGPU)
  • 実機で SystemInfo.supportsComputeShaders がtrueか
  • Initialize ParticleのCapacityが、出したい粒の数より小さくないか
  • Boundsが小さすぎないか。Visual Effect Boundsのとおり、カメラからBoundsが見えないとエフェクトは描画されない。既定はRecordedで、VFX Controlパネルの Bounds Recording で記録して Apply Bounds を押す
  • 独自イベントでSpawnのStartをつないだ結果、OnPlayの暗黙の結び付けが外れていないか(送信イベント名が、SpawnのStartにつないだEventの名前と一致しているか)
  • C#から渡しているプロパティ名・型がBlackboardと一致しているか(Has系で確かめる)

Boundsの自動計算(Automatic)は手軽ですが、公式は性能に悪影響があるため可能なら避けるよう書いています。動きが大きいエフェクトは、RecordedでBoundsを記録したうえでBounds Paddingで余白を足すのが確実です。

よくある質問

リアルタイムVFXとは何ですか?

ゲームなどの実行中に、毎フレーム計算して描画する視覚効果のことです。事前に書き出した映像を再生するのではなく、その場の状況に合わせて形や量が変わります。UnityではVFX GraphとShurikenがこれを担います。

VFX GraphとShurikenの違いは何ですか?

VFX GraphはGPUで計算し、Unityのマニュアルでは数百万粒が目安です。ShurikenはCPUで計算し、目安は数千粒ですが、Built-inを含む全パイプラインで動き、粒1つずつをC#から読み書きしたり衝突イベントを受け取ったりできます。物量ならVFX Graph、ゲームロジックとの連携ならShurikenです。

VFX GraphはURPで使えますか?

使えます。ただし公式の要件ページでは、Unity 6.6(VFX Graph 17.6)でもURP向けは「プレビューを終えていない」扱いで、URPが対応するプラットフォームの一部にだけ対応します。URPではガンマ色空間に非対応なので、Color SpaceをLinearにします。

VFX Graphは無料で使えますか?

無料です。Unityに含まれるcore packageで、VFX Graphそのものに追加費用はかかりません。Unity本体の利用条件には従います。

VFX Graphがモバイルやブラウザで動かないのはなぜですか?

コンピュートシェーダーが必要だからです。OpenGL ESとWebGL2では動きません。AndroidはVulkan、iOSはMetalで使えます。WebはUnity 6.6で正式版になったWebGPUを有効にすると動きますが、WebGL2にフォールバックしたブラウザではエフェクトが出ません。

関連記事

お気に入りに入れた記事の一覧

一創の公式 SNS

X では毎朝の新着記事と IT ニュースの速報を、YouTube・TikTok・Instagram・LinkedIn・Facebook では記事の解説動画を配信しています。

この記事は以下の記事からリンクされています

資料請求

RELATED POSTS 関連記事

目次