「古代の谷」は、Unreal Engine 5 (UE5) の早期アクセス機能を紹介する短編のゲームプレイ映像です。 プレイヤーは、UE5 のアナウンス トレーラーに登場した Echo を操作して、不毛の地を探索し、謎めいた暗黒の王国への入口を見つけます。 その王国の中で Echo は様々な障害物を乗り越え、巨大な Ancient One と戦います。 このサンプルでは、UE5 で導入された多くの Quality of Life (作業の質を高める) 機能、レンダリングの改善点、ワークフローに組み込まれたイノベーションの概要を示します。
このドキュメントでは、これらの優れた新機能について紹介します。また、Epic Games チームがこれらの新機能を使用して、リアルタイム レンダリング テクノロジーの可能性を広げると同時に、広大で忠実度の高いシーンを構築するワークフローを大幅に効率化した方法について説明します。
概要
Valley of the Ancient で取り上げている内容は次のとおりです。
Nanite と Lumen を使用してレンダリングされたハイエンドのビジュアル。
Megascans アセットのライブラリと新しいジオメトリ ツールで作成された広大なワールド。
改善されたカオス フラクチャ ワークフローで作成された被破壊アセット。
レベル ファイルやアクタを整理するための新たなパラダイムにより、1 つのマップで多くのチーム メンバーによるコラボレーションが容易に。
キャラクターの動きをゲームプレイに合わせるための、フルボディ インバース キネマティクス (IK) とモーション ワープを用いた柔軟なリアルタイム アニメーション。
ランタイム時にシステム全体をロード/アンロード可能なモジュール式ゲームプレイ システム。
新しい MetaSounds システムを使用して作成されたプロシージャルなサウンド エフェクト。
Quartz を使用してゲームプレイと音楽を同期させるダイナミックな音楽システム。
Valley of the Ancient サンプルにアクセスする
古代の谷のサンプル プロジェクトをインストールするには、次の手順を実行します:
Fab から古代の谷のサンプルにアクセスし、[Add to My Library (マイライブラリに追加)] をクリックして、プロジェクト ファイルを Epic Games Launcher に表示します。
または、Fab in Launcher または UE の Fab プラグインを使用してサンプル プロジェクトを検索できます。
Epic Games Launcher から Unreal Engine > Library > Fab Library の順に移動して、プロジェクトにアクセスします。
互換性のあるエンジン バージョンがインストールされている場合のみ、Fab ライブラリ にサンプル プロジェクトが表示されます。
[Create Project (プロジェクトの作成)] をクリックし、画面に表示される手順に従ってサンプルをダウンロードし、新規プロジェクトを開始します。
Fab のサンプル コンテンツにアクセスする方法の詳細については、「サンプルとチュートリアル」を参照してください。
推奨されるシステム スペック
このサンプルは特にグラフィックを多用しているため、安定したフレームレートで動作させるには高性能のビデオ カードが必要です。 また、Nanite および仮想テクスチャで、できる限り最高の結果を実現するためには読み取り速度が高速である必要があるため、SSD にインストールすることが推奨されます。 推奨されるハードウェア スペックは以下のとおりです。
推奨システム スペック (100% スクリーン比率) | 最小システム スペック (50% スクリーン比率) |
|
|
Nanite は、Nvidia Maxwell 世代の GPU および AMD GCN 世代の GPU 以降でのみサポートされています。 また、お使いのグラフィック カードの最新のドライバを使用していることを確認してください。
低スペックのシステムでは、ビューポート画面のパーセンテージ設定を調整することでパフォーマンスを向上できますが、 最小スペックでは 50% 以下が推奨されます。 これは、エディタ ビューポートの左上隅にある [Viewport Options Menu (ビューポート オプション)] メニューから、[Screen Percentage (スクリーン比率)] スライダーを使用して設定できます。
または、コンソール コマンド r.ScreenPercentage を使用して、この値をランタイム時に設定することもできます。
UE5 エディタを操作方法
UE5 の Unreal Editor では、Unreal Engine 4 の機能を全て引き継いでいますが、ワークフローとユーザー エクスペリエンスが一部改善されています。そのため、古代の谷サンプルを使用してみる前に、少し操作して慣れることが推奨されます。
Content Drawer (コンテンツ ドロワー)
[Content Drawer (コンテンツ ドロワー)] はエディタの左下隅にあります。 [Content Drawer (コンテンツ ドロワー)] のボタンをクリックするか、CTRL+Spacebar を押して、コンテンツ ドロワーを起動したり、消去したりにすることができます。
また、[Dock in Layout (レイアウトにドッキング)] をクリックすると、UE4 での機能と同様に、コンテンツ ブラウザが常時ドッキングされます。 この操作により、ドッキングされたコンテンツ ブラウザと [Content Drawer (コンテンツ ドロワー)] の両方を同時に使用できます。また、メイン ツールバーのコンテンツ ドロップダウンをクリックして、コンテンツ ブラウザを管理することもできます。 これにより、コンテンツ ブラウザの柔軟性が向上し、コンテンツ ブラウザを使用していないときにエディタ内で使用できる画面領域も拡大します。
また、コンテンツ ブラウザ自体のレイアウトが変更され、左側にフォルダ ツリーが常時表示されるようになりました。さらに、新しい [Settings (設定)] メニューが追加され、ビュー型、サムネイル サイズ、コンテンツ フィルターなど、アセットの表示方法を設定できるようになりました。
エディタ モードを使用する
メイン ツールバーのアイコンで、[Editor Modes (エディタ モード)] を切り替えることができるようになりました。
UE4 ユーザーが使い慣れているモードだけでなく、強力な新機能を備えた新しいモードも追加されています。 エディタ モードは次のとおりです。
| 番号 | エディタ モード | 説明 |
|---|---|---|
1 | 選択する | ゲーム ワールドのアセットを選択して、その詳細を編集するためのデフォルトの編集モード。 |
2 | ランドスケープ | ランドスケープのスカルプト、ペイント、および管理を行う。 |
3 | フォリッジ | 環境内のフォリッジをペイントして調整する。 |
4 | メッシュ ペインティング | 環境内のメッシュに頂点ペイントを施すツール。 色、ウェイト、テクスチャをサポートします。 |
5 | フラクチャ | Chaos destruction (カオス破壊) システムを使用してスタティック メッシュにフラクチャを生成するツール。 |
6 | ブラシ編集 | 従来のブラシ ジオメトリ エディタ。 ペン ツールを使用して正投影ビューポートでブラシを描画してから、必要に応じて、他のツールを使用して形状を調整します。 |
7 | Animation | コントロール リグの操作、ポーズの迅速な適用、簡単な Tween の設定を行うツール。 |
8 | モデリング | フルポリゴンのジオメトリ編集スイート。 基本的なプリミティブからのモデリングや、ゲーム ワールド内の個々のメッシュの変更を行うことができます。 |
サンプルをナビゲートする
サンプルを開くと、スタートアップ マップが表示されます。 古代の谷のほとんどのコンテンツは、AncientWorld マップに格納されています。このマップは、[AncientContent] > [Maps] フォルダにあります。
このワールドの基盤となっているほとんどのファイルは、ゲームのコンテンツ ディレクトリにあります。ただし、Hover Drone と Ancient One のアセットは、ゲームのベース プロジェクトとは別個の Game Feature プラグインに格納されています。 Hover Drone のアセットは、[HoverDrone Content] ディレクトリに、[Light Dart] のアビリティと Ancient One とのバトルは、[AncientBattle Content] ディレクトリに格納されています。 これらのディレクトリを表示するには、コンテンツ ドロワーの [Settings (設定)] ボタンをクリックして、[Show Plugin Content (プラグイン コンテンツを表示)] を切り替えます。
Valley of the Ancient は広大なワールドを表現していますが、UE4 のレベル ストリーミングでこれまで使用していたようなサブシーンは使用されていません。 代わりに、このサンプルでは、[World Partition] とデータ レイヤーを使用して、1 つのシーンを編集可能な複数のパーツに分割しています。
ワールドを移動するには、[Window (ウィンドウ)] > [World Partition] をクリックします。この操作により、[World Partition] ウィンドウが開き、ワールドの簡易マップが表示されます。
マウス ホイールを使用して、ワールドの様々な領域を拡大したり、マップ上のセルをクリック&ドラッグして選択したりすることができます。 複数のセルを選択した後に右クリックして、[Load Selected Cells (選択したセルをロード)] をクリックすると、それらのセルがメイン ビューポートにロードされます。 同様に、[Unload Selected Cells (選択したセルをアンロード)] を使用すると、表示させる必要のないセルを削除することができ、コンピュータの負荷を軽減することができます。
すべてのワールド パーティション セルを一度にロードするのではなく、表示または編集する必要のあるレベルのセクションのみをロードすることをお勧めします。 ロードできるセルの数は、システムに搭載されているメモリの容量応じて異なります。 このシステムの詳細については、後述の [World Partition] セクションを参照してください。
ダーク ワールドとライト ワールドを構成するレイヤーを表示するには、[Window (ウィンドウ)] > [Data Layers (データ レイヤー)] をクリックして、[Data Layers (データ レイヤー)] ウィンドウを表示します。
このウィンドウでは、シーンを構成するすべてのレイヤーのオン/オフを切り替えることができます。 ダーク ワールドを表示するには、ダーク ワールド データ レイヤーを有効にします。 ライト ワールドを表示するには、焚き火の置換、フォリッジ、および Hero Area Mountain Range データ レイヤーをオンにします。 焚き火のジオメトリ データ レイヤーは常に存在する必要があります。 これらのレイヤーのオン/オフを切り替えることで、両方のバージョンのワールドを比較してみることができます。
これらのシステムの詳細、このサンプルでのこのシステムの実装方法、ワークフローにおけるメリットについては、[Collaboratively Constructing a Large World] を参照してください。
ハイエンドのビジュアルと高速イテレーション
Unreal Engine 5 が目指しているのは、高忠実度のビジュアルの新たな基準を提供することだけでなく、ワールドでのリアルタイムの高解像度アプリケーションのためのきわめて利用しやすいパイプラインも提供することです。 このセクションでは、UE5 の新しいレンダリング機能が、古代の谷の詳細レベルの向上にどのように役立ったか、また、チームがいかに迅速かつ容易にこのサンプルを作成したかについて説明します。
Unreal Editor から直接利用できる Quixel Megascans アセット
Valley of the Ancient のスタティック メッシュとテクスチャのライブラリは、ユタ州モアブで採取された Quixel Megascans アセットをベースとして構成されています。このライブラリのスタティック メッシュとテクスチャを使用して環境内のほぼ 90% のアセットを表現しています。 これらのアセットは、コンテンツ ドロワーの [AncientContent] > [Megascans] フォルダに格納されています。
全てのアセットは Canyons of Utah Megascans パックに含まれています。 さらに、Quixel Bridge は Unreal Editor に直接統合されているため、Megascans アセットのインポートや管理に外部プログラムを使用する必要がありません。 UE5 では必要なマテリアル インスタンスとメッシュを自動的に生成し、生成したインスタンスやメッシュをゲーム内で直接使用できます。 以降のセクションでは、UE5 を使用してこれらの高解像度アセットを簡単に処理できる方法だけでなく、環境アート チームが UE5 のツールを使用してランドスケープをきわめて柔軟に作成できる事例を紹介します。
Nanite 仮想化ジオメトリ
これらのアセットは、従来の LOD を使用しないため、追加で最適化を行う必要もありません。 代わりに、全てのアセットで Nanite が有効になっています。 Nanite は、スタティック メッシュ アセットをディスクからストリーミングして、仮想化ジオメトリを使用して表現します。使用するポリゴン数は、ユーザーのビューポートの解像度に応じて動的にスケーリングされます。 仮想テクスチャは、テクスチャのディテールでも同様に動作します。 この表現は、ユーザーがシーン内を移動するたびに変化し、詳細度もその場で更新されます。 近くのものはより細かく、遠くのものはより小さく表現されますが、画面上の全体的な詳細度はほぼ一定です。
Nanite により、Valley of the Ancient 環境では、何百ものきわめてポリゴン密度の高い Megascans アセットを、追加の準備作業を行うことなく、シーンに直接使用することができます。 数千万のポリゴンで構成され、大規模なテクスチャを使用した岩肌も、テクニカル アーティストが追加のセットアップを行うことなく、瞬時にレンダリングすることができます。 ハイポリゴンの Zbrush スカルプトもゲーム内で直接使用できます。
Nanite の動作を確認するには、[View Mode (表示モード)] ドロップダウンをクリックして、[Lit (ライティング)] から [Nanite Visualization (Nanite ビジュアライゼーション)] > [Triangles (トライアングル)] に変更します。
これにより、Nanite からのトライアングル出力がリアルタイムで表示されます。
Nanite では変形をサポートしていないため、スタティック メッシュでのみ機能します。 ただし、これだけでも環境開発パイプラインが大幅に簡略化されます。 また、Nanite ではスケルトンの変形は使用できませんが、フィナーレで登場する強大な Ancient One は、スケルタル メッシュにアタッチしたスタティック メッシュを使用しており、Nanite を利用して超高解像度のアーマーをレンダリングしています。
Nanite の使用および設定方法の詳細については、Nanite に関するドキュメントを参照してください。
Lumen グローバル イルミネーション
この詳細に表現された谷のライティングには、Unreal Engine 5 の新しい完全に動的なグローバル イルミネーションおよび反射システムである Lumen が使用されています。 Lumen は、間接ライティングが直接ライティングやジオメトリの変化に適応し、新旧の技術を組み合わせて質の高いリアルタイムの結果を得ることで、ダイナミックでリアルなシーンを作り出します。 Lumen は、次世代のコンソールやハイエンド PC 向けに開発されており、Unreal Engine 5.0 のリリース バージョンでは、これらのプラットフォームで 30~60 FPS を実現することを目指しています。
Lumen はスケーラブルで、ソフトウェア レイ トレーシング モードおよびハードウェア レイ トレーシング モードを使用して、DX11 および DX12 対応のハードウェアを幅広くサポートしています。 古代の谷では、スクリーン トレース (またはスクリーン空間トレーシング) とサーフェス キャッシュ 表現を組み合わせたソフトウェア レイ トレーシングを使用して、シーンの間接ライティングを生成しています。 Lumen では、クリーン トレースを使用して、個々のメッシュの符号付き距離フィールドから生成される品質の低いサーフェス キャッシュで発生する可能性のある不一致に対処しています。 サーフェス キャッシュは、[Show (表示)] > [Visualize (視覚化)] > [Lumen Scene (Lumen シーン)] を使用して視覚化できます。 サーフェス キャッシュは最初の 200m のみ機能し、その後、距離のあるシーンでは画面トレースにフォール バックします。
Lumen は汎用性が高く、Nanite の仮想化されたジオメトリと従来のスタティック メッシュ ジオメトリの両方に対応できる品質オプションを備えています。また、画面トレースにより、スキン メッシュが間接ライティングを受けて、作用することができます。ただし、これはスクリーン上に表示される内容に制限されます。 Lumen の組み合わされた技術は、エディタのビューポート内で [Show (表示)] >[Visualize (視覚化)] >[Lumen Global Illumination (Lumen グローバル イルミネーション)] をクリックすると視覚化できます。
Lumen は、光源としてのエミッシブ マテリアルを含むすべての可動光源で機能します。 スカイライティングでは、Lumen のファイナル ギャザーを使用してスカイ シャドウイングを行います。スカイ シャドウイングでは、屋内領域を屋外よりもはるかに暗くできるようにしたり、より多くのライトを反射する明るい色のサーフェスを生み出したりすることができます。
Lumen/スカイライティングを有効にしたとき、Lumen を無効にしたとき、Lumen /スカイライティングの両方を無効にしたときのキャンプファイヤー エリアの比較。
Lumen の品質と速度のバランスおよび「ただ機能する」性質のおかげで、チームは、従来のライティング技術に伴うあらゆる設定オプションについてあれこれ考える必要なく直感的に古代の谷の巨大なランドスケープのライティングを構成することができました。 Lumen の詳細およびその仕組みの詳細については、「Lumen のグローバル イルミネーションおよび反射」および「Lumen の技術面の詳細」を参照してください。
新しいモデリング ツールでメッシュを調整する
この環境の Megascans のメッシュの多くは、オリジナルでインポート済みの「ストック」のメッシュではなく、ランドスケープ独自のニーズに合わせて Unreal Editor 内で変更されています。 古代の谷の環境アーティストは、UE5 の新しい [Modeling Editor Mode (モデリング エディタ モード)] を使用してこの変更を行いました。
モデリング エディタを使用すると DCC ツールと同じ方法でメッシュを一から作成することができますが、この環境でスタティック メッシュやインスタンス化されたスタティック メッシュを選択して、そのジオメトリを変更することもできます。 これらの編集をポリゴン単位で行うのは手間がかかりますが、モデリング エディタのモードには、高密度のメッシュを素早く変更できる多数のデフォーマおよびスカルプティング ツールがあります。
例えば、SM_umshejnga_High2 などの岩肌のアセットがあり、このアセットの湾曲したバージョンが必要だとします。 モデリング エディタ モードを切り替えて、ビューポートで該当するメッシュを選択して、屈曲度デフォーマを適用します。 少し微調整を行ってから、メッシュに変形を適用すると、適用後の結果を確認できます。
画像をクリックするとフルサイズで表示されます。
UV をやり直す必要は一切なく、1 つの高解像度の基本メッシュから様々な独自のメッシュを、オリジナルと同等の品質で作成することができます。 これにより、アーティストは、あらゆる解像度のアセットをきわめて柔軟に編集できるため、独自のニーズに対応したコンセプトをレベル エディタ内で作成できます。
パックされたレベル インスタンスでランドスケープを作成する
Valley of the Ancient のランドスケープは非常に広大であるため、これまで紹介してきたツールを使用しても Megascans アセットを個々に配置していると、詳細度の高い環境を構築するには非常に長い時間がかかります。 そのため、V古代の谷の環境アート チームは、パックされたレベル インスタンスを活用して大規模なアセンブリをキットバッシュしました。
レベル インスタンスとは、基本的には、ワールド パーティション システムを実装する任意のワールドに追加できるネストされたレベルです。 レベル インスタンスを使用しなくてもワールド パーティションは機能しますが、ワールド内のコンテンツのチャンクを再利用可能なパーツに編成したり、メイン レベル外で編集するためにレベルをより管理しやすいパーツに分割したりするのに役立つツールです。
レベル インスタンスを作成するには、ワールド内のオブジェクトのグループを選択して右クリックして、[Create From Selection (選択項目から作成)] をクリックします。
これにより、[New Level Instance (新規レベル インスタンス)] メニューが表示され、作成するレベル インスタンスのタイプを選択できます。
[OK] をクリックすると、新しいレベル インスタンスをプロジェクトのレベル ファイルとして保存することができ、対応するブループリント アセットも生成されます。 選択したすべてのアクタは、それらを含む Level Instance アクタに置き換えられます。 このレベル インスタンスはレベル ファイルを使用して編集したり、ブループリント アセットを使用してレベル インスタンスのコピーを配置したりすることができます。
レベル インスタンスの操作は、レベルの他のアクタの操作と同様に簡単です。 レベル インスタンスのコンポーネント パーツをインプレースで編集することもできます。 配置されたレベル インスタンスの [Details (詳細)] パネルで、[Level Instance Editing (レベル インスタンスの編集)] の [Edit (編集)] ボタンをクリックして、該当するレベル インスタンスに焦点を絞ります。 その後、他のワールドのコンテキストに沿って、レベル インスタンスのコンポーネント パーツを編集することができます。
編集が完了したら、[Commit Changes (変更をコミット)] をクリックして調整を確定し、ワールドの編集に戻ります。 変更を保存するかどうか、および該当するレベル インスタンスのすべてのコピーにも同じ変更が反映されることを確認するプロンプトが表示されます。
Valley of the Ancient サンプルでは主にパックされたレベル インスタンスを使用してアセンブリを作成します。 標準的なレベル インスタンスとは異なり、これらはスタティック メッシュではないアクタはすべて無視し、スタティック メッシュをインスタンス化されたスタティック メッシュに変換することで、それらのコンポーネント アセットによって作成されるドロー コールの数を削減します。
このワークフローにより、環境アート チームは大規模なアセンブリのライブラリを独自に構築し、非破壊編集を行うことができるようになりました。 これらには、プレイヤーの周りの観測可能なランドスケープを構成する汎用性の高い小さなアセットから、遠方のランドスケープの大型のチャンクを構成できる巨大なジオフォームまで、様々なアセットがあります。 これらのアセンブリの多くがエディタ内にあるスタティック メッシュ アセットで構成されていますが、一部は Megascans アセットをベースにしてチームがカスタムビルドしたものもあります。 チームは、これらを活用して、このワークフローを活用して、わずか数週間で 4 平方 Km 以上にわたる大地をフォトリアルなディテールでセット ドレッシングする柔軟なアセンブリ ラインを構築しました。
これらのアセンブリのマップ ファイルは、[AncientGameContent/Maps/MASS] フォルダにあり、対応するレベル インスタンス アクタは [AncientGameContent/Geometry] フォルダに格納されています。 これらのツールの使用方法の詳細については、[Level Instancing (レベル インスタンス化)] を参照してください。
Chaos Destruction (カオス破壊) ワークフロー
古代の谷の被破壊メッシュ (ダーク ワールドの柱や、フィナーレで Ancient One が立ち上がる小山など) を開発する過程で、UE5 の Chaos Destruction ワークフローに多くの改良が行われました。 チームが開発したワークフローでは、新しいモデリング エディタ モードとフラクチャ エディタ モードを組み合わせて使用します。
破壊チームは、モデリング ツールを多用してメッシュを準備し、ターゲットとなるフラクチャを作成しました。 [Simplify (単純化)]、[ Planar Cut (平面切り取り)] (PlnCut)、[Offset (オフセット)]、および [Displace (変位)] (ノイズの多いサーフェスを追加) によって、ソース メッシュ自体から初期のフラクチャをスカルプトできるようになりました。 このプロセスではブーリアン ツールを使用して、重なり合うメッシュを全て取り除き、サーフェス上のジオメトリのみを残しました。 孤立しているポリゴンやジオメトリの浮島は、TriSel ツールを使用して除去しました。
フラクチャ編集モードでは、チームはメッシュ フラクチャ ツールを使用して、被破壊メッシュを大きなチャンクに分割しました。 このツールは、他のメッシュを効果的に使用してジオメトリを破壊するもので、ブーリアンの減算ツールと同様に機能します。ただし、メッシュの両方のパーツはそのまま残されます。 このツールで作成されたチャンクは、非破壊オブジェクトの主要なフラクチャとして機能し、崩壊するときの外観をある程度コントロールすることができます。 これらのチャンクを作成した後、チームは従来の Voronoi フラクチャ (均一またはクラスタ フラクチャ ツールを使用) を適用して、チャンクをさらに小さなパーツに分割しました。
画像をクリックするとフルサイズで表示されます。
UE5 で導入されたノイズ設定により、これらのフラクチャは自然な外観で、エッジが不均一なフラクチャになっています。
チームでは、フラクチャされたアセットの内面の UV 処理には、AutoUV ツールを使用しました。 このツールは、メッシュの深さに基づくグラデーションにマッピングされたテクスチャを生成します。 これにより、複数のマテリアルを融合して、断面の異なるパーツに深さに応じた異なる表面品質を持たせることがでるようになり、より自然な外観が実現します。 例えば、断面内の奥にあるメッシュ パーツは埃っぽく乾いた感じにして、表面により近い部分は黒っぽく風化した感じにすることができます。
最後に、チームは Chaos キャッシュ マネージャー を使用してアセットの物理シミュレーションをキャッシュしました。 カオス キャッシュ マネージャーは、シミュレーションをエディタ内に記録してゲームで再生できるシステムで、トリガーされるたびにシミュレーションが同一の方法で進行することが保証されます。 これにより、処理能力を節約しながら、複雑で緻密な破壊をゲームで表現できます。また、レベル デザインにおけるゲーム内の具体的なニーズに合わせて破壊をオーサリングすることもできます。 例えば、エコーが破壊した最初の柱が入り口を塞ぐような形で倒れることはありません。また、Ancient One のマウンドがエコーのアリーナの横断を妨げるがれきが残ることもありません。 キャッシュ マネージャーでシミュレーションをレコーディングした後、そのコピーをレベル内に配置すると、それに関連付けられている他のアセットが全て配置されます。
これらのアセットのオリジナルのシミュレーション設定は、プロジェクトの最終ビルドでは除去されます。 ただし、ジオメトリ コレクションとそれらのキャッシュ マネージャーは、[AncientBattle Content] > [Maps] > [Destruction] にあります。 [c_Destruction] > [3_Lt_Hand] にあるコレクションで、ターゲットのアセットに使用されているアセットの例を確認できます。また、L_AncientBattle_Gameplay レベルを表示すると、ダーク ワールドで使用されている全てのキャッシュ マネージャーを確認することができます。
このワークフローの柔軟性については継続的に改善されています。 また、Valley of the Ancient の実装により、UE5 の Chaos Destruction (カオス破壊) の品質、アクセス性、柔軟性を向上させるという Epic Games のコンセプトを実証しています。
Sky Atmosphere とボリュメトリック ナイアガラ エフェクトを使用して設定する
古代の谷の環境を作成するため、Epic Games では新しい スカイ環境システムを使用しています。
シーンに Sky Atmosphere アクタを配置すると、地上半径 (Km)、大気の物理パラメータ、アート ディレクションのオーバーライドなど、シミュレートされた惑星に関する情報を設定することができます。 このシステムは、[Atmosphere Sun Light (大気での太陽光)] に設定した [Directional Light (ディレクショナル ライト)]、および [Sky Light (スカイライト)] と連動して機能します。 Sky Atmosphere システムは、これらの要素が揃うことで、リアルな大気、ボリュメトリック クラウド、およびフォグ (霧) を地球規模で生成します。 このシーンの環境ライティングは、スカイライトのリアルタイム キャプチャおよび畳み込みプロセスにより、完全にダイナミックなライティングが実現しています。
Valley of the Ancient の光のワールドでは、Sky Atmosphere アクタを使用して、実際の地球上の大気を反映したより繊細な大気を表現しています。 また、アニメート化されたボリュメトリック クラウドも、リアルタイムでダイナミックにライティングされています。 一方、闇のワールドでは、よりスタイライズドされた幻想的な外観を実現するために、従来のスカイドームを使用しています。
画像をクリックすると拡大表示されます。
チームは、岩場を吹き抜ける霧や砂などの仕上げに、Niagara パーティクルとボリュメトリック ペイント データとを併用して、環境内での霧や砂を演出しました。
これらのパーティクルシステムのアクタは、ダーク ワールド データ レイヤーにあります: BP_NiagaraPainted_FarFog、BP_NiagaraPainted_FogDetail、および BP_NiagaraPainted_SandStripe です。
各アクタは、VolumetricPaintingDensityMap と VolumetricPaintingVelocityMap の 2 つの Niagara データインターフェースを使用します。
密度マップはアルファ チャンネルと組み合わされた RGB 情報を使用して、テレインを基準としたパーティクルの高さと密度を決定し、速度マップはパーティクルの移動方向を決定します。 チームは、カスタムビルドのボリュメトリック ペイント ツールを使用して、環境内のこれらのレイヤーをペイントし、これらのテクスチャを出力しました。 次の画像では、環境の上に重ねて表示されたグリッドが密度マップを表し、矢印がフロー マップを表しています。 BP_NiagaraPainted_FogDetail (フォグのフリップブック) は、同じ 3D 密度の BP_TerrainFogMaster (ボリュメトリック フォグ) の上にレイヤー化され、ディテールを追加します。
このメソッドにより、古代の谷では、わずか 3 つの Niagara システムで、ダーク ワールドのランドスケープに 10 万個以上の GPU パーティクルをシミュレートしています。 全ての Niagara システムは環境とボリュメトリック フォグに装備され、同じボリュメトリック ペインティング データを使用してカスタマイズされたディテールを追加します。 ボリュメトリック ペインティングのツールはまだ開発中ですが、これはナイアガラの機能と併用した場合のパフォーマンスと実用性の概念実証となります。
広大なワールドを共同で構築する
これまでは、ユーザーはレベルをサブシーンに分割して、レベル ストリーミング システムまたはワールド コンポジション システムを使用して、パーシスタント レベルに分割したサブシーンをストリーム入力または出力していました。 この方法では、綿密な調整が必要となり、複数のユーザーによる共同作業が困難でした。これは、通常、バージョン コントロールの問題を回避するため、一度に 1 人のユーザーしかシーンを修正できないからです。
Unreal Engine 5 では、レベル ファイルの操作方法を刷新し、このプロセスをより明確かつ直感的に行えるようにしました。 たった 1 つのレベル ファイルから巨大なワールドを編集できるだけでなく、何十人もの他のデベロッパーとの共同作業でも、競合の発生を最小限に抑えて作業を進めることができます。 このセクションでは、これを可能にしたツールと、そのツールが古代の谷の制作時にチームのコラボレーションに役立った様子について説明します。
One File Per Actor
古代の谷のワールド全体で、UE5 の新システム [One File Per Actor (OFPA)] が使用されています。 このシステムを有効にすると、データを単一のマップ ファイルに書き込むのではなく、レベル内に配置されたアクタの独自のインスタンスごとに個別のファイルを作成します。
レベル エディタを操作するユーザーのワークフローは、まったく変わりません。 レベルを編集するには、引き続きエディタで単一のレベル ファイルを開きます。 ただし、基盤となるファイル システムが各アクタを個別のファイルとして追跡するため、レベル デザイナーや環境アーティストは同じレベルの異なる領域やレイヤーを編集することができます。この際、バージョン コントロール システムに変更をコミットする際に競合が発生することはほとんどありません。
Valley of the Ancient では、OFPA がグローバルに有効になっています。 この設定は、[World Settings (ワールド セッティング)] の [World (ワールド)] パラメータの [Advanced (詳細設定)] セクションにある [Use External Actors (外部アクタを使用)] という項目です。
この設定は、個々のアクタに対して有効にすることも、プロジェクト全体に対してグローバルに有効にすることもできます。 詳細については、One File Per Actor のドキュメントを参照してください。
このシステムにより、古代の谷のデベロッパーは、1 日の作業中に素早く変更をコミットし、エディタ内でお互いの変更をすぐに確認しながら、バージョンの競合の問題を心配することなく作業を行うことができました。 また、ゲームプレイ スクリプティングおよび環境アートへの微調整を常に相互に並行して実行できるため、迅速なイテレーション作業が可能となり、高度に協力的な環境アートのパイプラインが実現します。
World Partition
ゲームの大規模な広大なワールドでは、マップを複数のセクションに分割して、プレイヤーがランドスケープを移動していくのに合わせてセクションをロード/アンロードする必要があります。これは、数 km に及ぶマップ全体を一度にロードすることは不可能であるためです。 これまでのツールセットでは、デベロッパーが手作業でマップをサブレベルに分割し、ストリーミングの入出力を慎重に管理しなければなりませんでした。 また、ワールドの各セクションを相互に関連付けて表示することも困難でした。
新しい World Partition システムは、このプロセスを大幅に簡素化します。 ワールド パーティションがレベルで有効になると、オブジェクトがグリッド位置に基づいて複数のセルに自動的に分割されます。また、レベル エディタでワールドを調整すると、セルの内容も更新されます。そのため、手動でオブジェクトをセルに割り当てる必要はありません。 ゲームプレイ中は、プレイヤーがゲーム ワールドを横切ると、ワールド パーティションによって自動的にセルがロード/アンロードされるため、セルを手動で管理したり、ストリーミング ボリュームを指定する必要もありません。
ワールド パーティションは、AncientWorld シーンの [World Partition Setup (World Partition 設定)] の [World Settings (ワールド セッティング)] で有効化されています。
[World Partition] ウィンドウは、[Window (ウィンドウ)] > [World Partition] をクリックすると表示されます。 このウィンドウ内では、エディタのセルをクリック&ドラッグして選択したり、編集のためにセルをロード/アンロードすることができます。 また、このウィンドウを使用すると、選択したセルにカメラを移動させることで、エディタ内を素早く移動することができます。
個々のアクタの [World Partition] 設定は、そのアクタの [Details (詳細)] にある [World Partition] セクションで確認できます。 これはブループリント エディタのクラスのデフォルトでも編集できます。
デフォルトでは、環境内のほとんどのアクタはワールド パーティションのグリッド内の位置を使用して、アクタが属しているセルを特定します。 Echo はプレイヤー キャラクターであるため、常にロードされるように設定されています。
おわかりのように、ワールド パーティション システムは、広大なワールドを構築するプロセスを大幅に効率化します。 サブレベルに相当する多くのファイルを引き続きバックグラウンドで管理しながら、アーティストやデザイナーは、技術的なディテールが自動化されているため、作成したい環境やユーザー エクスペリエンスの作業に集中することができます。 ゲームで World Partition を設定する方法の詳細については、[World Partition] セクションを参照してください。
データレイヤー
データ レイヤーは、ワールド内のオブジェクトを個別のレイヤーに整理するシステムで、オプションで自由にロード/アンロードすることができます。 データ レイヤー システムはサブレベルに代わるもので、ワールド パーティションと連動するように設計されています。 データ レイヤーは、プロジェクトの編成に役立つもう 1 つのツールであり、ゲームプレイ機能を高め、自分のワールドをより細かくコントロールすることができます。
[Data Layers (データ レイヤー)] ウィンドウは、[Window (ウィンドウ)] > [Data Layers (データ レイヤー)] で開くことができます。 このメニューを使用すると、エディタでデータ レイヤーの作成、編成、ロード/アンロードを行うことができます。
アクタの [Details (詳細)] の [Data Layers (データ レイヤー)] セクションにスクロールすると、アクタのデータ レイヤー情報を確認できます。 ここのドロップダウンを使用して、アクタのデータ レイヤーを変更したり、[Data Layers (データ レイヤー)] ウィンドウからデータ レイヤーをクリックしてこれらのエントリの 1 つにドラッグすることができます。
また、[World Outliner (アウトライナ)] からアクタをデータ レイヤーにクリック&ドラッグすると、複数のアクタを一度にデータ レイヤーに割り当てることができます。
Valley of the Ancient では、データ レイヤーを使用して光のワールドと闇のワールドの間での遷移を制御します。 Echo がポータルをアクティブにすると、光のワールドを表す複数のデータ レイヤーがアンロードされ、闇のワールドを表すもう 1 つのデータ レイヤーがロードされます。
画像をクリックするとフルサイズで表示されます。
これらのデータ レイヤーは、Dark World Rift オブジェクトによってトリガーされるインゲーム イベントを使用して、アクティブ化/非アクティブ化されます。 どちらのデータ レイヤーも同じレベル ファイルに作成され、同じ空間を共有していますが、同じワールドでありながら、まったく異なるバージョンです。
Campfire データ レイヤーは両方のワールドで使用され、Echo が一方のワールドからもう一方のワールドに遷移する際に、プレイヤーのための共通の参照フレームを作成します。 これには重複するバージョンは必要ありません。外観の唯一の変更点は、光のワールドと闇のワールドで使用される大気やライティングのみです。
開発段階では、このデータ レイヤーは、ゲームプレイ要素と環境設定要素を分離する有益なツールとしても機能しました。環境アーティストは、重複するトリガーやゲームプレイ オブジェクトを処理する必要なく各自のデータ レイヤーで作業することができ、デザイナーはインゲーム イベント関連のオブジェクトに集中できたためです。
詳細については、[Data Layers (データ レイヤー)] ページを参照してください。
柔軟なリアルタイム アニメーション
UE5 では、スケルタル メッシュを使用したリアルタイム アニメーションに、キャラクターおよびキャラクターとワールドとのインタラクションに焦点を絞って、いくつかの点を改善しました。 Valley of the Ancient では、これらの改善点を活かして、Echo とデモの終わりに Echo が対峙する巨大な Ancient One の両方のインタラクションを制御しています。
モーションワープ
新しい モーション ワープ システムを使用すると、アニメーションで、環境のワープ ポイントに基づいてルート モーションを変更させることができます。 これにより、1 つのアニメーションを様々な状況で柔軟に使い分けることが可能になり、複雑な環境のインタラクションの処理で生じる作業負荷が大幅に縮減されました。
例えば、Valley of the Ancient デモでは、Echo が闇のワールドの中で瓦礫や障害物を跳び越えていくことができます。
これまでのワークフローでは、このようなインゲーム アクションを実現するためには、障害物の物理的なパラメータについて制約の多い規則を採用するか、特定の障害物のために特定のアニメーションを作成するか、これらのアクションをコンポーネント アニメーションに分割して、その再生方法とタイミングについて複雑なルールを設定する必要がありました。
しかしながら、このプロジェクトでは、エコーの跳び越えていくアクションは、VaultOver_Montage アセットによって完全に処理されています。
VaultOver_Montage アセットは、新しい MotionWarping 通知ステート を使用して、キャラクターのルート モーションを環境に合わせてワープできるアニメーションのセグメントをマークしています。 各セグメントが、環境に配置された同期ポイントに反応します。 この例では、各セグメントの名称は、FrontEdge、BackEdge、BackFloor という名称で、これらは跳び越えることができるオブジェクト上の異なる参照ポイントに対応しています。 FrontEdge はエコーの手がオブジェクトに触れて直立姿勢になる位置、BackEdge はエコーが素早く跳び越え始める位置、BackFloor はオブジェクトの反対側に着地する位置を表します。
これらのポイントは、 GA_Vault という名称の GameplayAbility 内で設定され、 BP_EchoCharacter にアタッチされた VaultingTriggerVolume に基づいて、跳び越え動作がトリガーされます。 モーション ワープの同期ポイントを個別に設定するためのビルトインのブループリント ノードがありますが、この機能では、跳び越え可能なアクタに関するデータに基づいて、すべての同期ポイントを一度に計算するカスタム ノードを使用します。
これら 3 つのポイントがエコーの MotionWarping コンポーネントに提供されると、VaultOver_Montage では、プレイ時に Echo のルート モーションをこれらのポイントに自動的に整合させます。 これは、MotionWarping の通知状態の持続時間と、それらのセグメントのモーション ワープの動作の設定を考慮しています。
このシステムのおかげで、Echo は 1 つだけのアニメーションで環境内の様々なオブジェクトを簡単に跳び越えていくことができます。 オブジェクトの高さや奥行きを問わず、Echo のアニメーションは自然な感じで、それぞれの目的地ポイントに合わせて調整されます。 このため、デベロッパーは少数のアニメーション アセットのライブラリできわめて高い柔軟性を得ることができます。
モーション ワープの実装方法については、モーション ワープに関するドキュメントを参照してください。
コントロールリグの改善点
エコーと強力な Ancient One の両方に Unreal Engine のコントロール リグが実装されており、Unreal Engine エディタ内で両方をアニメートすることができます。 UE5 では、コントロールリグで使用できるツールが次のように拡充されました。
ポーズ ライブラリは、アニメーション作成時にモデルのパーツに素早く割り当てることができる再利用可能なポーズのリストが保持されます。
Tween ツールは、中間キーフレームを生成し、周囲のキーフレームの情報に基づいて重み付けを行うことができます。
スナッパー ツールは、コントロール リグのパーツをゲーム ワールド内のオブジェクトに固定できます。
これらのツールにより、作業の質が向上し、アニメーションのライブラリを構成するためのショートカットも提供されます。 古代の谷サンプルでは、Ancient One のアニメーションは、モデルのデザインと製作を担当した Aaron Sims Creative チームが、コントロール リグとシーケンサーを使用して、全て Unreal Editor でオーサリングしました。
Ancient One と Echo の両方にコントロールリグが設定されています。これらを使用して、新機能を確認することができます。 エコーのコントロール リグは、[AncientContent] > [Characters (キャラクター)] > [Echo (エコー)] > [Rig (リグ)] にあり、Ancient One コントロールリグは、[AncientBattleContent] > [Characters (キャラクター)] > [AncientOne] > [Rig (リグ)] にあります。
UE5 におけるコントロール リグの改善点の詳細な概要については、コントロール リグのドキュメントを参照してください。
フルボディ IK ソルバ
どちらのキャラクターにも、新しいフルボディ IK (FBIK) ソルバが実装されており、環境に対してどのように反応するかをさらに細かく制御することができます。 FBIK は各キャラクターの コントロール リグ アセット内でフォワード ソルブ グラフのノードとして適用されます。 このソルバは、メッシュの標準的なアニメーションがすべて処理された後、ポストプロセス レイヤーでモデルに補正を適用します。
この実例として、Ancient がエネルギー ビーム アタックを行う際に、腕がエコーの位置を追跡するブループリント ロジックによって腕の配置が制御され、フルボディ IK ソルバが本体の残りの部分の修正を、ビームを発射します。
さらに細かい例としては、Echo は FBIK を使用してゲーム ワールド内の様々なテレインに適応し、地面の角度に合わせて足を調整したり、凹凸のある場所を移動する際に腰の位置を変えたりしています。 これにより、特に傾斜を登ったり、下ったりしたり、障害物を乗り越えたりする際に、よりバリエーションに富んだ自然な動きが実現されます。
フルボディ IK の実装方法の詳細については、フルボディ IK に関するドキュメントを参照してください。
Modular Gameplay を作成する
また、UE5 にはモジュール式のゲームプレイをビルドするためのフレームワークも備えており、Valley of the Ancient では、闇のワールドへの移行時にこれらのシステムを活用しています。 エコーの環境の変更だけでなく、ランタイム時に一連の新しい入力バインディングやメカニクスも導入されました。
Game Feature プラグインを使用してゲームプレイを拡張する
ライト ワールドでは、エコーがリモート制御の光を使用して周囲の状況を把握します。 闇のワールドでは、光を放って障害物を破壊したり、敵にダメージを与えたりします。 これらのシステムは、それぞれ独立したゲーム機能プラグインです。 Fortnite のパイプラインから着想を得たこのシステムは、機能をそれぞれ独立して開発し、自由にゲーム本編に統合することを可能にしています。 ランタイム時にロード/アンロードすることもできます。
新しいゲーム機能を作成するには、[Plugins (プラグイン)] ウィンドウを開いて、[Create Plugin (プラグインを作成)] をクリックします。 プラグインのベース タイプとして [Game Feature (ゲーム機能)] を選択できます。
このプラグインは、プロジェクトのプラグイン ディレクトリにあります。
標準的なプラグインを使用する場合、ゲームはそのプラグインのクラスやアセットを参照することができますが、プラグインはベース ゲームのコードやアセットに対する可視性がありません。 Game Feature (ゲーム機能) では、その依存関係のフローが逆になっています。 Game Feature (ゲーム機能) はベース ゲームに依存していますが、ベース ゲームは、Game Feature (ゲーム機能) のクラスや関数を参照することはできません。 そのため、Game Feature (ゲーム機能) の実装では、MOD と同じように、ベース ゲームの要素を拡張したり、修正したりします。
古代の谷では、Light Dart と Ancient One の両方が AncientBattle というゲーム機能に含まれています。 Echo が特殊能力を取得して使用するために必要な基本システムは、Echo のベース アクタにすでに組み込まれています。ただし、Light Dart ではベース アクタの特殊な実装を提供します。 また、Ancient One などダメージに反応できるアクタは、この Game Feature に格納されており、戦闘システムはこのモジュール内に完全にカプセル化されたされています。 この機能のコンテンツは、[AncientBattle コンテンツ] フォルダにあります。
[コンテンツ ドロワー] でゲーム機能のコンテンツを表示するには、[Settings (設定)] ボタンをクリックし、[Show Plugin Content (プラグイン コンテンツの表示)] をオンにして、[AncientBattle Content] フォルダを特定します。
アニメーション、ビジュアル エフェクト、UI 要素、ブループリントなど、Light Dart に関連するすべてのアセットがこのフォルダ内に格納されています。 このフォルダの最上位レベルには、AncientBattle ゲーム機能データ アセットがあります。
このアセットには、プラグインがロード/アンロードされると、どのように動作する必要があるかに関する指示が含まれています。 Light Dart プラグインでは、LightDart Gameplay Ability を Echo に追加し、能力をアクティベートする入力を使用して Echo をセットアップし、必要なコンポーネントを Echo にアタッチするという指示が含まれています。
ゲームプレイ中、これらの機能は BP_DarkWorldRift ブループリント内で、ダーク ワールドへの遷移がトリガーされると、切り替わります。
ゲームのメイン コードベースやアセットに LightDart への参照を追加する必要ありません。 LightDart が Echo に追加されると、Game Feature Data に記載されている指示に従って、すべてのコンポーネントを使用することができます。
このシステムを使用することで、デベロッパーはある時点でどの機能セットがアクティブであるかを簡単にコントロールできます。 これは、限られた期間や範囲内で機能するメカニクスを処理する場合に特に役立ちます。 ここでは、エコーの Light Dart の切り替えに使用しています。ただし、オンライン ゲームの限定イベントや、短編映画のセグメント、ゲームプレイ中の大きなモードの変更などにも簡単に対応できます。
ゲーム機能プラグインの詳細およびプロジェクトでのこのプラグインの実装方法については、ゲーム機能プラグインに関するドキュメントを参照してください。
Enhanced Input System (強化された入力システム) を使用した柔軟なコントロール
UE5 は、新しい 拡張入力システムを備えています。このシステムは、古代の谷ではエコーのコントロールに使用されています。 このシステムは、エコーの動きや能力を処理するだけでなく、特定のコントロールのための状況データや、プレイヤーの状態に応じた入力の追加や削除など、該当する入力の状況に応じた要素を処理する方法を提供します。
UE4 の入力システムでは列入力をアクタのイベント グラフ内のイベントで処理していましたが、拡張入力ではコントロールをコンテンツ ドロワー内のアセットで表現される入力アクションとしてモデル化します。 古代の谷の入力アクションのほとんどは、[Content (コンテンツ)] > [AncientGameContent] > [Input (入力)] に格納されています。 ダーク ワールド専用の入力アクションは、[AncientBattle_Content] > [Input (入力)] に格納されており、ホバー ドローン専用の入力アクションは[HoverDrone_Content] > [Input (入力)] に格納されています。
これらには、IA_MoveForward や IA_MoveRight などの一般的なコントロールだけでなく、エコーがキャンプファイアーから立ち上がるときに使用される IA_SitStand など、高度に状況に応じたコントロールも含まれています。 入力アクションを開くと、異なる型の軸の値など、どの型の値を返すかを設定できます。 また、入力を有効にするための状況依存の要件を追加するトリガーや、ゲームプレイに渡す前に入力の値を処理するモディファイアー のリストを提供することもできます。
Triggers や Modifiers を使用すると、デッド ゾーンや反応性曲線、入力を有効にするために必要な状況依存のアクションを、アクタのゲームプレイ コードで入力データを一切手動でフィルタリングすることなく処理することができます。 Triggers や Modifiers は、ブループリント クラスや C++ クラスとして定義することで、プロジェクトに追加することができます。
コンテンツ ドロワーで InputAction を定義すると、ブループリントのイベントを使用して InputAction にアクセスできます。 Echo をコントロールする InputActions は BP_EchoCharacter で処理します。
これらのイベントは、標準の入力イベントと同じように機能する一方で、アクションの開始、終了、進行中、および強制キャンセル時、およびアクションがアクティブにであるときは、入力アクションに関するより状況に応じた情報を提供します。 入力イベントの値は、InputAction アセットにリストされている [Value Type (値の型)] によって定義されます。 この値が出力される前に、InputAction にリストされているすべての Modifiers が適用されます。
入力マッピング コンテキストは、InputActions の物理コントロールへのマッピングを処理します。 これらのアセットは、InputActions と一緒に格納されています。 IM_ThirdPerson_Controls_InputMapping にはエコーのコントロールの大部分が含まれ、IM_LightDartInputMappings には Light Dart 能力とジョギング用に追加されたコントロールが含まれています。
これらは UE4 の入力システムのアクションおよび軸マッピングと同様に編成されていますが、InputActions を物理入力にマッピングすることに加えて、特定のコントロールの実装に Modifiers と Triggers を適用することができます。 例えば、Echo はIA_MoveForward を読み取り、前方および後方の動きを決定します。 W キーにはモディファイアーが追加されていませんが、S キーは Negate モディファイアを使用しているため、マイナスの入力として読み取られます。
Input Mapping Contexts のメリットの 1 つは、ランタイム時にプレイヤーごとに追加および削除できることです。 例えば、AncientBattle Game Feature プラグインでは、ロード時に IM_LightDartInputMappings が追加されます。
この Game Feature アクションは、このプロジェクト専用に C++ で作成されました。 ランタイム時に追加および削除される入力マッピングの別の例は、HoverDroneControlsComponent で確認できます。これは、HoverDrone ゲーム機能の C++ クラスで、EnhancedInputComponent を拡張します。
この例では、拡張入力システムが、ゲームの入力を管理するための拡張性と柔軟性の高いフレームワークを提供していることを示しています。 ゲームプレイのコードを破壊的に変更することなく、開発期間中にゲームの入力を簡単に拡張して適応させることができ、このシステムには文脈上の入力や特殊なケースの入力用に多くのツールが用意されています。 詳細については、拡張入力システムのドキュメントを参照してください。
ダイナミックなインタラクティブ オーディオ
Unreal Engine 5 では、ビジュアル、ゲーム メカニクス、ワールドを自由に構築できるツールに加えて、まったく新しいオーディオ システムを装備しており、ゲームのオーディオをより自由にコントロールすることができます。 このセクションでは、古代の谷でこれらの新しいツールを使用することで、エコーが Ancient One と最後に対峙するシーンを一層洗練された迫力ある場面にする方法をご紹介します。
MetaSounds
MetaSounds は、Unreal Engine 5 のための新しい高性能オーディオシステムで、オーディオ デザイナーに完全な機能を持つ DSP (DSP) グラフを提供します。 このシステムは、プロシージャルなサウンド エフェクトや音楽を一から合成することができ、ブループリント API を装備しているため、デザイナーはゲームプレイ イベントやゲーム内データに基づいてサウンドを操作することができます。 MetaSounds により、サウンド デザイナーはきわめて柔軟に開発を行うことができるため、迅速なイテレーション、複雑でダイナミックなサウンド、ゲーム デザインの変更にサウンド エフェクトを簡単に適応させることができます。
MetaSounds の性能と汎用性の例としては、[Audio (オーディオ)] > [MetaSounds] の下にある [AncientBattle Content] フォルダの sfx_Golem_RobotBlast_Meta にあります。
この MetaSound はプロシージャルに生成されたオーディオと .wav ファイルのミックスを使用します。この MetaSound は、手続き的に生成されたオーディオと .wav サンプルを組み合わせて、 最初のセクションでは、メインのチャージアップサウンドの合成とモジュレーションの大部分を処理しますが、これは完全にプロシージャルなものです。
たとえば、[Intro Wave (イントロ ウェーブ)] および [Shot Waves (ショット ウェーブ)] セクションでは、いくつかの補足 .wav ファイルを使用してサウンドにテクスチャのレイヤーを追加します。 The Intro Wave section triggers when the beam initially starts to charge up. The Shot Waves section also has a sound that triggers when the beam begins charging, but also has components that trigger after the charge-up sound has fully played.
グラフの中央セクションでは、これらの異なるセクションそれぞれ間でのミキシングとフィルター処理を行い、最終的なステレオミックスを作成した後、出力ノードに送って最終的なサウンドを再生します。
Triggers, parameters, and .wav files act as inputs, then the MetaSounds flow graph processes that information based on DSP nodes and mixes it into a final sound output. This system provides audio designers with a workflow for sound that is as powerful and flexible as the Material editor, capable of adapting to both typical sound parameters as well as in-game data, making it possible for them to work more closely and efficiently with a game development team within one sound design environment.
For example, during development of the battle sequence, a lot of iteration time was spent fine-tuning the amount of time the Ancient One spends charging up its beam. In other sound design workflows, this might entail re-authoring the sound based on changes to gameplay. 代わりに、sfx_Golem_RobotBlast_meta MetaSound は、ChargeDuration と呼ばれる時間入力を使用して、サウンドの再生時間を決定します。 Since the main charging sound is entirely procedural, it automatically adjusts its length based on the given input.
その動作を確認するには、入力 リストから [ChargeDuration] を選択し、デフォルト値の [4.0] 秒から変更して、サウンドを再生します。
この機能により、ゲーム デザイン チームは、このサウンドを再オーサリングすることなく、必要に応じて Ancient One のチャージ持続時間を変更できます。
There are many other Input parameters available to work with, including Triggers that you can activate from gameplay code using the Audio Parameter Interface. You can use these to create MetaSounds that procedurally handle starts, stops, and intermediate events. For instance, where an action like a gun firing would previously require multiple sounds for starting, stopping, and looping fire, this system can condense it all into just one MetaSound.
You can also manipulate other audio parameters using this API. This makes it possible for MetaSounds to fully encapsulate the sound playback logic for complex sound effects, all with sample-accurate timing.
MetaSounds による柔軟な設計と無限のバリエーションは、パフォーマンスの大幅な改善によって補完されています。 The MetaSounds graph is rendered asynchronously, similarly to how individual sound effects are normally decoded, which provides an extra degree of flexibility in handling CPU resources. More importantly, since MetaSounds is a true audio rendering system, each MetaSound represents a single in-game voice, regardless of its complexity. This means that the playback you hear in the MetaSounds editor will always be accurate to its in-game sound, and in-game voice management is more predictable compared with earlier systems. This also condenses the workflow for evaluating audio performance, as in the future UE5 will be able to profile the performance of specific MetaSounds individually.
MetaSound の詳細については、MetaSound のドキュメントを参照してください。
Quartz によるオーディオの同期
Normally, discrepancies between the way the gameplay and audio threads are processed makes it difficult to synchronize events between them with accurate timing. Quartz は、ゲームプレイ イベントからのサンプルアキュレートなオーディオ再生をスケジュールするためのクロックを提供します。 When you schedule a sound using Quartz, you can set up delegates based on specific timing relative to scheduled playback. Quartz Clock は、ゲームプレイが意図したタイミングを先取りし、適切な場合に他のゲームプレイ イベントを同期させることができるように、そのサウンドの再生のイベント デリゲートを提供します。 This makes it possible to create sample accurate dynamic music systems, as well as game systems with a high level of synchronicity with audio.
古代の谷では、音楽のビートや小節に基づいてイベントをスケジュールする、Underscore Subsystem というダイナミックな音楽システムに Quartz を使用しています。 Notably, the Ancient One chooses when to fire its laser based on the timing of the music cue during its showdown with Echo. このシステムのクラスは、[Underscore C++ Classes] に含まれています。
このシステムの音楽は、UnderscoreCue という名称の専用のデータ アセットに格納されています。UnderscoreCue には、音楽のキューの拍子記号、さまざまな楽節、転調、および音楽の状態やイベントに関するその他の情報のデータが含まれています。 Ancient One とのバトルで流れるバトル ミュージックは、Arena_Battle_Cue アセットに格納されています。このアセットは、[AncientContent] > [Audio] > [UnderscoreCues] にあります。
これには、この音楽キューを構成するクリップへの参照と、音楽の BPM と拍子記号が含まれています。 This data is a description of the music, used by the music system to set up the Quartz Clock and manage timing transitions between each section. The introduction is set up to transition into the main body of the battle music, which is broken up into several different states. These states occur based on many different in-game events, and the music concludes with a beat-synchronous ending. Thanks to Quartz, all of this occurs with seamless, sample-accurate precision.
これらのセクションがインゲーム イベントにどのように関連しているかの例を確認するには、AncientBattle Content ディレクトリにある BP_Laser と BP_AncientOne にこのシステムのフックがあります。 レーザー自体のロジックに加えて、BP_Laser には、音楽がレーザーをトリガーするのを可能にする Underscore Subsystem にイベントをバインドする呼び出しが含まれています。
また、Underscore Subsystem への呼び出しも含まれており、ビームの発射が終了したときや Ancient One を倒したときなど、曲の他のセクションに移行するタイミングを音楽に伝えることができます。
これらは、Underscore Subsystem が Quartz を使用して、ダイナミックな音楽システムやゲームプレイおよびオーディオの正確なインタラクションを促進する方法のほんの一部の例です。
最後に
このように、Unreal Engine 5 には、大掛かりで忠実度の高いプロジェクトをかつてないほど簡単に構築できる、優れた幅広いツールが搭載されています。 Valley of the Ancient では、これらのツールをすべて使用して、実現可能な価値ある制作のサンプルを提供するとともに、同じツールを使用してゲームの開発プロセスを効率化したケース スタディを紹介しています。 UE5 によりデベロッパーは、より少ないステップでビジュアル品質を向上させ、より少ない作業でより広大なワールドを作り出すことができます。さらに、クリエイターをサポートする各種ツールを使用することで、詳細なインタラクションと環境を実現することができます。