この記事では、VFX Graph と Shader Graph (Unity 2022 LTS) を使用して 、Unity サンプルプロジェクト「Happy Harvest」 で特殊効果を作成する方法について説明します。
Unity Asset Store から Happy Harvest を ダウンロードしてインストールできます。
このページでは、無料で入手できる 2 つの高度な電子書籍で詳しく説明されているテクニックとツール セットの一部を紹介します。
Happy Harvestのエフェクトとビジュアルを再現する方法については、このシリーズの他の記事を参照してください。
Unity では、いくつかの異なる方法で 2D 視覚効果を作成できます。たとえば、火のエフェクトを作成するには、フレームごとに炎をアニメートしたり、Shader Graphで作成されたシェーダーを使用してスプライトをアニメートしたり、燃えるパーティクルを生成したりすることができます。後者の方法では、CPU 上で実行される 組み込みパーティクル システム を選択するか、VFX Graph と GPU のパワーを使用して数百万のパーティクルを生成することができます。両方のシステムを同じプロジェクトで使用できるため、特定の効果に最適なものを選択できます。
この記事では、Unity 2022 LTS 以降の 2D ゲームで使用できる VFX Graph に焦点を当てます。
Unity 2D プロジェクトで特殊効果を作成する前に考慮すべき重要なポイントがいくつかあります。
- カメラパースペクティブ カメラを使用すると、3D ゲームと同様に、3 次元空間でエフェクトが発生します。正投影カメラを使用する場合は、適切な ソート レイヤーを使用するようにシステムのレンダラーを設定する必要があります。カメラの視点の詳細については 、こちらをご覧ください。
- ポストプロセス:ユニバーサル レンダー パイプライン (URP) を選択した場合は、2D プロジェクトに ポストプロセス エフェクト を適用できます。たとえば、URP ボリューム フレーム ワークを介してパーティクル エフェクトにブルーム エフェクトを追加できます。
- 効果はさまざまな方法で達成できます。たとえば、エフェクトを表す GameObject には、カスタム シェーダーを持つスプライトや複数のパーティクル システムなど、異なるシステムを使用する複数の子 GameObject が含まれる場合があります。
- アニメーションクリップアニメーション クリップを 使用すると、スムーズなスプライト ベースのアニメーション効果を調整できます。Unity のスケルタル アニメーション システムを (控えめに) 使用して、スプライト アニメーション内のスプライトの一部を制御することもできます。
- Unity Asset StoreUnity Asset Storeにアクセスして、プロジェクトに視覚効果を追加する作業を始めましょう。ここでは、多くの既製の 2D 効果が見つかります。
Visual Effect Graph アセットは、Unity 2022 LTS の Shader Graph を使用した 2D レンダラーと互換性があります。プロジェクトに新しい VFX Graph を作成するには、 ドキュメントの手順に従ってください。
VFX Graph の 出力コンテキストは、 エフェクトがどのようにレンダリングされるかを定義します。出力パーティクル クアッド などのメッシュの出力コンテキストには、シェーダー グラフを追加するオプションがあります。ライティング モデルはシェーダー グラフに合わせて変更されるため、Lit 出力または Unlit 出力のどちらから開始しても問題ありません。以下にリストされているデフォルトのシェーダー、または独自の Shader Graph ベースのシェーダーを使用できます。
URP の 2D プロジェクトでは、次 の 3 つのスプライトベースの シェーダーグラフのいずれかを使用できます。
- Lit2Dライトシステムからの光を受信する
- 消灯:2D照明システムの影響を受けない
- カスタム:カスタム2D照明モデルを実装するには
Shader Graph 内の SRP ターゲットで、必ず 「VFX Graph のサポート」 オプションをオンにしてください。
シェーダー グラフで公開されるプロパティは、VFX グラフに表示されます。必要に応じてオーバーライドできます。たとえば、VFX Graph パーティクル システムで時間の経過に伴うシェーダーの色の変化を制御する場合などです。
雨はゲームでよく使われるパーティクルベースのエフェクトです。以下は、VFX Graph と GPU を使用して、多数の個別のパーティクルの動きを可能にする Happy Harvest の雨を作成するために使用された主な手順です。
雨のパーティクル (階層では Visual Effect Rain という名前) は、ソート レイヤーで、地面の上、オブジェクトの後ろでレンダリングされます。その理由は、水滴の粒子が地面に当たったときに水しぶきのエフェクトが生成され、実際の雨がどのように反応するかをシミュレートするためです。雨滴が街灯柱のような垂直面に見える場合、正しく見えなくなる可能性があります。現実世界では、光は雨滴を含むすべての環境に影響を与えます。Happy Harvestでは、雨の VFX Graph は、出力コンテキストで Sprite Lit ベースのシェーダーグラフを使用して、雨のパーティクルを照らします。雨に Lit Shader Graph が一致しないと、一日を通して変化する光を反映して雨の色調を変えることができません。フレームごとのスプラッシュ:雨のパーティクルが消えると、Trigger On DieBlock が GPU イベントをトリガーし、単純なスプラッシュ アニメーションを再生する単一のフリップブック パーティクルを生成します。Happy Harvest は 、FlipbookShader Graph UV ブロックを使用して、テクスチャ内のさまざまなフレームを表示します。あるいは、VFX Graph 内の Flipbook Player ブロックを使用して同じ効果を実現することもできます。
雨のパーティクルがフォアグラウンドに表示されます (階層内では Visual Effect Rain Foreground という名前です)。これらはカメラ レンズに近い状態をシミュレートするため、地面に当たったときに水しぶきは発生しません。
前のエフェクトのバリエーションが、点滅する雷のエフェクト (視覚効果 雨 前景 雷) で使用されます。VFX 出力イベント再生オーディオ コンポーネントを使用して、雷のサウンド効果を追加します。このコンポーネントには 、出力イベント ハンドラーのサンプル スクリプトが付属しており、出力イベント コンテキストによってグラフ内でトリガーされます。雷鳴:このエフェクトを作成するためのシンプルかつ効果的な方法は、カメラ位置の中心で初期化され、画面を埋め尽くすほどの大きさの VFX Graph ベースの単一パーティクルを生成することでした。出力ノードの Color Over Lifetime ブロックは、時間の経過に伴うグラデーションを評価することでパーティクルの色を変更します。このグラデーションでは、透明度の変化によって雷の閃光の点滅と消失をシミュレートします。
「Happy Harvest」では雨がシーン全体に影響を及ぼしますが、カメラを通して見えるのはその一部だけなので、計算されたパーティクルの多くは不要です。インスペクターの Frustum Culling オプションをチェックして、これらのパーティクルのレンダリングを回避するか、デモで使用されているトリックであるカメラ タイリングを使用することができます。
カメラ タイリングを使用すると、シーン ビューに一致するボックス内にパーティクルを作成してレンダリングできるため、シーン内のあらゆる場所でパーティクルがシミュレートされているかのようにタイリングされている印象を与えることができます。カメラの外部にはパーティクルは生成されないため、追加設定なしで生成されるパーティクルの量とエフェクトの容量割り当てを削減できます。
Happy Harvestでカメラ タイリングを使用するには、位置設定シェイプを使用して雨の発生をカメラの寸法に合わせて設定します。AAボックス。カメラ形式 (サイズを手動で入力するか、MainCamera を直接使用するか、aspectRatio スロットを使用する) は、シーン内のカメラ設定に合わせてサイズ乗数によって拡大縮小されます。AABox は、カリングによって発生するポップ効果を回避するために、実際のカメラ サイズよりもわずかに大きくなっています。2D プロジェクトではボリューム全体にスポーンする必要がないため (Z 軸は使用されない)、シェイプ スポーン モードはサーフェスに設定されています。
このセットアップが完了したら、システムの出力に タイル/ワープ位置 ブロックが必要になります。これは、システムの 初期化コンテキスト で行うのと同様に、カメラの位置とカメラの寸法を一致させるためにカメラ変換にリンクされます。
このテクニックは 3D の雨の効果にも適用されますが、奥行き感を出すには、シェイプ スポーン モードをボリュームに設定し、Z 軸の値を 0 以外に設定する必要があるという点が異なります。
ゲームでよく使われるもう 1 つの効果は火です。Happy Harvestでは、庭や農家の家の暖炉に心地よい焚き火があります。火のエフェクトは、次の 3 つのパーティクル セットで構成されます。炎、火花、煙はすべて、VFX_Fireと呼ばれる同じグラフから生成されます。
炎をアニメーション化する
炎の滑らかなアニメーションは Shader Graph のシェーダー レベルで実行され、GPU とシェーダーのパワーを使用して何を達成できるかを示しています。
プロジェクトで ShaderGraph_Fireファイルを開くと、炎に楕円形を与えるマスクを作成するために単一のスプライト (Mask texture2D) が使用されていることがわかります。アニメーションとスプライトは、ノイズと炎と背景の色合いを含むスクロールする「ボロノイ」パターンによって作成されます。アルファ マスクは同じ炎の形状を使用しますが、より目立つアウトラインを生成する 飽和演算子 を使用します。
火に洗練されたディテールを加える火花と煙のエフェクトには、標準の Lit Shader Graph が使用されます。速度、スケール、初期位置ブロックの変更を組み合わせることで、必要なスプライトが 1 つだけの、生き生きとした効果を作成できます。火花と煙の効果のグラフには、独自のプロジェクトで効果を再現するのに役立つメモが含まれています。
水は漫画のようなコースティクスまたは透明効果のある波を使用しているため、デモの全体的なアート スタイルと一致します。水シェーダーは、デモの環境の大部分を構成するタイルマップで動作するように最適化されています。
デフォルトの 2D Lit マテリアル「Water」 は、タイルマップの Tilemap Renderer にあります。これは、水シェーダーを使用したカスタム マテリアルに置き換えられました。タイルマップ内のすべてのタイルは同じマテリアルを使用してレンダリングされるため、このタイルマップは水タイルにのみ使用されます。
ShaderGraph_Water グラフでは、コースティクス (水のコースティクスで一般的な方法) をシミュレートするために、引き伸ばされた反転ボロノイ ノイズ パターンから水の効果も生成されます。振動運動は、ノイズ効果を適用したタイリングとオフセット UV のオーバータイムによって生成されます。
屈折効果
屈折効果は、Lerp ノードを使用して表面テクスチャにブレンドされます。屈折では、 カメラ ソート レイヤー テクスチャが使用されます。これは、定義されたソート レイヤーまでのカメラ レンダリングのスナップショットであり、以前のソート レイヤーのすべての要素がそのテクスチャに表示されることを意味します。Happy Harvestでは、キャラクターなどの要素に使用される オブジェクト ソート レイヤーまでレンダリングが行われます。カメラ ソート レイヤー テクスチャの UV は、表面テクスチャと同じ Voronoi テクスチャを使用する Normal および Height ノードで生成された法線マップによって歪められます。
Lost Crypt 2D デモを使用したこのチュートリアルを見て 、2D でのその他の水の効果に関するステップバイステップのチュートリアルを入手してください。
これまで説明した効果は、Happy Harvestのゲームプレイとは関係ありません。これらは環境の一部であり、デモで何が起こっているかに関係なく再生されます。ただし、ほとんどのゲームでは、環境内やキャラクターでアクションが発生したタイミングに基づいて、いくつかのエフェクトを再生するようにトリガーする必要があります。Happy Harvest でトリガーされる効果をいくつか見てみましょう。
アイテム使用時の効果
水缶のようなキャラクターツールにはいくつかのエフェクトが付いています。水缶のプレハブ Prefab_Tool_WaterCanには、キャラクターの向き (上、下、横) に基づいてスプライトを変更する 3 つのアニメーション クリップがあります。これらのアニメーションには、ツール アニメーション イベント ハンドラー コンポーネント内の関数を呼び出す アニメーション イベント があります。
このスクリプトは、インスペクターから参照される各位置の VFX グラフの対応するインスタンスを有効または無効にします。
タイルを反復処理するときの効果
掘削や収穫など、タイル上でいくつかの効果が発生します。これにより、キャラクターのアニメーションや位置の変更に問題が発生しなくなります。セルを耕すとき、そのセルに対して耕作効果が実行され、収穫するとき、そのセルは収穫効果を呼び出します。
耕作エフェクトがトリガーされると、Grid ゲームオブジェクトにアタッチされた TerrainManager コンポーネントから TillingPuff_prefab エフェクトが参照されます。タイルの中央 に移動してプレイします。作物の収穫などのその他のエフェクトは、Data/CropsScriptableObject から参照される VFX Graph を呼び出します。TerrainManager スクリプトの初期化時に、必要に応じて再生するいくつかの VFX プレハブをインスタンス化する VFX プール ディクショナリ (スクリプト内の変数 m_HarvestEffectPool) が作成されます。
Happy Harvest の小さなエフェクトにより、デモに磨きがかかり、探索がより楽しくなります。これには次のようなものがあります:
- VFX_DustParticles:周囲の塵埃を環境に拡散させる
- VFX/水:微妙な水の波や水しぶき
- VFX_葉:プレイヤーが通り過ぎると茂みから葉が落ちる
- キャラクターキャラクターに付属する煙の噴出効果をトリガーします。これは組み込みのパーティクルシステムで作成されます。
- P_VFX_蛾:スポットライトの近くを飛ぶ蛾をトリガーします。これも組み込みパーティクルシステムで作成されています。
上記のリストにある VFX Graph ベースのエフェクトにはそれぞれ、各ノードの目的を説明するメモが含まれています。
経験豊富な Unity 開発者が、Unity エンジニアやテクニカル アーティストの意見を取り入れて作成した、視覚効果の開発に関するこれまでで最大のガイドです。この電子書籍では、Unity の視覚効果オーサリング ツールを使用して、水や液体、煙、火、爆発、天候、衝撃、魔法、電気など、あらゆる種類の効果を作成する方法の完全な概要が説明されています。制限となるのは、あなたの想像力だけです。
VFX Graph を使用して特殊効果を作成する方法については、次の 2 つのビデオ チュートリアルもご覧ください。