Engine & platform

Unity 2020 LTS 以降の Visual Effect Graph が拓く新たな可能性

MATHIEU MULLER / UNITYSenior Manager, Product Management
Aug 27, 2021|11 Min
Hero image

Unity 2020 LTS および 2021.1 における Visual Effect Graph のアップデートは主に、安定化、パフォーマンスの最適化、新しいCPU イベント出力を使用したゲームプレイとの統合強化、メッシュからパーティクルをスポーンする機能の拡充に焦点を当てています。

Unity 2021.2 以降は、ユニバーサルレンダーパイプライン(URP)のサポートを強化し、2D との互換性を高め、計算性能の高いモバイル、Oculus Quest、Nintendo Switch™* などのプラットフォームへサポートを拡大することで、プラットフォームとコンテンツ両方のカバー範囲を広げることを主な目標としています。ビジュアルエフェクトを構築・カスタマイズするためのツールをさらに取り込んでいこうと考えており、Visual Effect Graph でのシェーダーグラフの統合強化には特に注力していく予定です。シェーダーグラフの統合が進めば、ヘアやファブリックなど、すべての URP および HD レンダーパイプライン(HDRP)マスターノードに直接アクセスできるようになるほか、エディター内の Signed Distance Field Baker ツールを使用することで、サードパーティ製ツールとのやりとりにかかる時間を短縮できます。さらに、ダイナミックヘアのような高度なシミュレーションの開発において GPU をフル稼働させられるように、グラフィックバッファのサポートも追加しています。

プロジェクト開発を加速させるために、サンプルライブラリに新しいサンプルを追加し、ライブラリを Unity 2020 LTS に合わせて更新しました。また、Spaceship デモも 2 周年を機にバージョンアップしました。ビジュアル面が改善され、プロジェクトの Unity 2020 LTS に対する互換性向上や Mac、Linux サポートへの互換性向上まで盛り込まれたことで、さまざまな品質設定から選び、幅広いデスクトップでデモを実行できるようになりました。

始めよう

Visual Effect Graph をお使いになる前に、以下の短い動画でツールの概要を把握されることをお勧めします。

Creating fire, smoke, and mist effects with VFX Graph in Unity

Rendering particles with Visual Effect Graph in Unity

Multilayered effects with Visual Effect Graph in Unity

準備ができたら、次のプロジェクトの出発点として、Unity Hub にある HDRP シーンテンプレートを使った実験をやってみましょう。このテンプレートには、すでに組み込まれているいくつかのパーティクルシステム(ほこり、蝶、ガラスケージ内の落ち葉など)に加えて、独自のパーティクルシステムをテストするためのさまざまなライティング条件が含まれています。

まったく新しいエフェクトを作りたい場合も、1 から作り直す必要はありません。システムカテゴリのノードを使用して、主なユースケースのために事前に設定されたセットアップを利用します。

Showcasing different effects in-editor

Visual Effect Graph のサンプルをダウンロードすることで、完全なサンプルを入手できます。このサンプルには、焚き火、蝶、魔法の本などのエフェクトに加えて、この記事の後の部分で紹介するまったく新しいエフェクトも含まれています。

ノードを使い始めたら、Unity 2020 LTS の新しいツールチップやエラーメッセージでコンテキストヘルプにアクセスしたり、更新されたドキュメントでさらに詳細なガイドを得たり出来るようになります。

Showcasing aspects of VFX in-editor
Showcasing aspects of VFX in-editor

より詳細な内容を知りたい方は、さまざまな作品に携わっている熟練のアーティストチームが作成したチュートリアルや VFX 解説動画のリストをご覧ください。

さらに、プロジェクトを加速させるための時間短縮ツールを紹介する動画もぜひご覧ください。

新しい Meteorite サンプル
Short animation of a cartoon meteorite hitting a small forest scene

新しいサンプル「Meteorite」は、隕石の衝突によって引き起こされるさまざまな力の相互作用を完全な形で表現しています。このサンプルは、Unity 2020 LTS の新機能である「VFX Output Event Handlers」を使って作られています。この機能はイベントや追加エフェクトをタイムラインで連鎖させるものです。

Still image of meteorite in the middle of hitting a small forest scene
Visual showing the many branching components of the meteorite's impact from the backend
Output Event Handler のメリット

VFX Output Event Handler は、カメラの揺れ、板の与える衝撃、光のアニメーションなどを表現するために使われます。

この例では、Output Event を使って、ビジュアルエフェクト用のインスペクターに見えるスクリプトコンポーネントでカメラの揺れをトリガーしています。カメラの揺れは、Spawn Event Velocity ノードから速度情報を取得し、メインのエフェクトがトリガーされてから 1.15 秒後に 1 回だけ発生させる形でスポーンされるように設定されています。

Visual of the Output Event to trigger a camera shake with a script component in the Inspector for the VFX.
Image of the in-editor VFX Output Event
周囲の力の影響を考慮してレンダーされる草むら

ビジュアルエフェクトのパーティクルストリップで構成された草むらは周囲の力の影響で動くようになっており、爆発や燃焼をトリガーするためにレンダーテクスチャに書き込まれた他のエフェクトと相互作用します。このバッファ VFX が反応するのは、メインの隕石に VFX の出力ハンドラーがあるからです。

バッファ VFX(メインカメラではレンダリングされない)を記録するカメラを設置し、草むらで使用するレンダーテクスチャに保存して、例えば突風やディゾルブシェーダー、炎のエフェクトなどを実装します。このようにして、あるエフェクトから別のエフェクトへと情報が流れ、すべてを 1 つの場所にまとめることができます。

Image depicting how the camera is set up to record the buffer VFX
同期を強化したタイムライン

タイムラインも VFX アーティストにとっては素晴らしいツールです。多くのエフェクトをトリガーし、必要に応じてそのタイミングを調整することができます。

Image showing the timeline in-editor

閃光、飛び立つ鳥、木の葉の落下などの追加エフェクトは、当初はメインの VFX と一緒にボタンキャンバスにリンクさせていましたが、後でデモシーンに含まれるタイムラインで使うように変更しました。

また、木は VFX のグラフメッシュ出力、サブグラフ、シェーダーグラフを使って作られており、多くのパラメーターをランダムに設定することができます。

Spaceship デモ

最初の Spaceship デモを公開して以来、私たちは長い道のりを歩んできました。このデモは、時間をかけて磨き上げられ、最適化され、Unity のメジャーバージョンが公開されるたびにアップグレードされてきましたが、とうとうアップグレードのライフサイクルが終わりに近づいてきました。

デモはこちらでダウンロードできます。プロジェクトを簡単に紹介したこちらの動画もご覧ください。このサンプルは実際に制作を行う際、さまざまな機能の統合と最適化を行うことの重要性を示しています。

なお、Unity 2020.3 では、Visual Effect Graph と HDRP の最新機能の多くを反映させるために、デモの内容に若干の変更と改良を加えていますので、ご了承ください。

宇宙に目を向ける

考えれば考えるほど、宇宙を探索しているときに銀河系の間をとりまく環境が実際に見えることが大事だということがわかってきました(そうでなければなぜ宇宙船に乗るのでしょう)。そこで、デモに新たなディテールを加え、宇宙船から外側の宇宙、すなわち惑星をはじめとする天体がちらりと見えるようにしました。

Animation of a spaceship looking out into space at a large planet

また、宇宙船の軌道が乱れていることを強調するために、環境のキューブマップにはカメラの揺れに加えて、ノイズを別に入れて二次的な揺れを加えています。

スパークル、音、光を完璧に同期させる

これまでも、スクリプトを使ってスパークルの扱い方に調整を加え、効果音と光のアニメーションを同期させるということはされてきましたが、さらに VFX アーティストが利用しやすいようにしました。

Animation of sparks flying from the ceiling in a spaceship

Visual Effect Graph に追加されたサンプル(Unity 2020.3 で新たに追加)の一部として Output Event Handlers を使用するようにシステムを更新しました。VFX の動作を変更して、Visual Effect Graph で直接ランダムにスポーンが行われるようにし、その時の光の持続時間を設定しました。

Image describing the orchestration branch

その後、Prefab Spawn と Play Audio ヘルパーのサポートにより、ランダムにスポーンを行う部分はすべて Visual Effect Graph で行い、その光と音のエフェクトを Spawn Context と同期させることができました。Flash Lifetime 属性をディレイとして使用することで、VFX Output Event Prefab Spawn は、そこに設定された時間経過後にプレハブを無効にすることができました。

Image depicting the VFX Output event prefab spawn

品質設定と具体的なコンテンツ

Spaceship デモを様々なハードウェアで動作させるために、品質設定オプションを実装しました。これにより、デバイスを問わず、Ultra Quality モードでのウォークスルーを行う場合に、より詳細なポストプロセッシング、ボリューメトリックを使い、光源の数を増やすことが可能になりました。

さらに、GTX 760 を下限とするローエンドのゲーミングハードウェア用に高価なオプションを無効にした低品質オプションを追加しました。

今年中に最終バージョンの Spaceship デモをリリースする予定です。そこでは Unity 2021.2 に合わせたプロジェクトのアップグレードを行い、パフォーマンスの向上を図るとともに、NVIDIA の DLSS や AMD FSR がサポートされ、さらに現時点では未発表の多くのエキサイティングな機能が追加される予定です。今後の情報をお楽しみに。

Unity 2020 LTS と 2021.1 の新規および注目すべきアップデートについて

Unity 2020 LTS バージョンには多くの新機能を追加し、2021.1 の開発サイクルに向けてバグフィックスを中心に進めています。このバグフィックスは両方のバージョンに利益をもたらすものです。以下にそのハイライトをご紹介します。

フリップブックのインポートと反復作業を高速化

Image Sequencer に加えられた改良は、Texture Import への追加に合わせて、2021.1 の Visual Effect Graph でも処理されます。Visual Effect Graph でフリップブックのテクスチャを変更する際に、行と列を手動で設定する必要がなくなりました。これは、フリップブックを Texture 配列としてインポートする新しいオプションを追加したためで、行と列の値はインポーターに直接保存され、Image Sequencer で自動的に処理されます。

Showcasing the improvements made to our Image Sequencer
メッシュからパーティクルをスポーンする
Animated woman running while on fire

Unity 2021.1 で搭載された新しいスキンドメッシュサンプリング機能を使えば、炎や軌跡を表現したり、ディゾルブやモーフィングなど、キャラクターやオブジェクトにさまざまなエフェクトをかけることができます。

この機能を利用するには、実装したいエフェクトに応じて、「Initialize」、「Update」、「Output」のいずれかのコンテキストで「Position (Skinned Mesh)」オペレーターを使用します。

次に、ブラックボードにトランスフォームを持つ、公開の Skinned Mesh Renderer プロパティを設定します。

Image showcasing getting the transform information of your Skinned Mesh in the Scene in order to position the effect in the right place

スキンドメッシュを望みのモードの Position ブロックにリンクさせた後、エフェクトを適切な場所に配置するために、シーン内のスキンドメッシュのトランスフォーム情報を取得する必要があります。VFX Game Object Inspector を活用して、この作業を行います。Property Binder のサポートにより、スケルトンのヒエラルキーを束ねるのに必要なコンポーネントを見つけることができます。

Image going through the user interface indicating what each portion does

ここでは、「Update」コンテキストでのスキンドメッシュサンプリングの例を紹介します。

Showcasing an example of Skinned Mesh Sampling in the Update context

Visual Effect Graph のスキンドメッシュを使って、皆さんが素晴らしいコンテンツを作り上げるのを楽しみにしています。

Mesh LOD を使ったパフォーマンスの最適化

Image of generated space with a planet, meteorites, and a sun in the background

メッシュ出力を使用する特殊エフェクトは、LOD(Level of Detail)システムの実装により最適化され、遠くにあるパーティクルに対してよりシンプルなメッシュを手動で指定することができるようになりました。

インスペクターでメッシュ出力を選択すると、新しい Mesh Count プロパティにアクセスでき、出力に最大 4 つのメッシュを指定することができます。その下の LOD チェックボックスを有効にすると、パーティクルは画面を占める割合に応じてメッシュを選択するようになります。

Showcasing the ability to modify the LOD values field in your output to designate the minimum percentage of the screen that each of your meshes must occupy to be visible

出力の LOD valuesフィールドを変更することで、各メッシュが表示されるために必要な画面の最小割合を指定することができます。例えば、10 という値は、このメッシュが画面の 10% 以上を占めていないと表示されないことを意味します。エフェクトのビジュアル面の品質を維持しながらパフォーマンスを向上させるために、より遠くにあるパーティクルに対して、よりシンプルなメッシュと小さな LOD 値を選択することができます。LOD 値は、Radius Scale の値を変更することで、すべてのメッシュに対して同時に調整することもできます。

下の惑星のリングの例に示されているように、メッシュパーティクルに LOD を実装することで、ビジュアル面に目立った悪影響を及ぼすことなく、パフォーマンスを約 6 fps から 60 fps 以上に向上させることができます。

Image showcasing the difference in frames per second between no mesh LODs and with mesh LODs
今後の予定

Unity 2021.2 ベータ版以降に対応する次期バージョンでは、プラットフォームとコンテンツの両方をさらに突き詰めていきたいと考えています。

また、VFX の構築・カスタマイズを行うためのツールをより多く提供したいと考えています。

同様にグラフィックスバッファーのサポートも強化し、開発に際して GPU をフル稼働させて、より高度なシミュレーションを活用できるようにする予定です。

これらのアップデートを試してみたい方は、Unity 2021.2 ベータ版の一部としてその大部分がすでに利用可能になっているので、こちらをお試しください。フィードバックのご提供も大歓迎です(開発中であることにご留意ください)。

今後のリリースに関して、Graphics Product Roadmap にて特定の機能への投票や、皆さんからの要望や新しいアイデア、リクエストの提出をいつでも受け付けています。

以下の資料は情報提供のみを目的としたものであり、契約に組み込まれることはありません。この資料に基づいて購入の意思決定を行うべきではありません。Unity は、いかなる機能およびコードの提供を約束するものではありません。すべての製品および機能の開発、提供時期の決定、およびリリースは、Unity の独自の裁量により行われ、変更されることがあります。

*Nintendo Switch は任天堂の商標です。