「古代の谷」サンプル

UE5 早期アクセスのショーケース プロジェクトである「古代の谷」を紹介します。

Windows
MacOS
Linux

「古代の谷 (Valley of the Ancient)」 は、 Unreal Engine 5 の早期アクセス機能を紹介する短編のゲームプレイ映像です。プレイヤーは、UE5 のアナウンス トレーラーに登場した Echo を操作して、不毛の地を探索し、謎めいた暗黒の王国への入口を見つけます。その王国の中で Echo は様々な障害物を乗り越え、巨大な Ancient One と戦います。このサンプルでは、UE5 で導入された多くの Quality of Life (作業の質を高める) 機能、レンダリングの改善点、ワークフローに組み込まれたイノベーションの概要を示します。

このドキュメントでは、これらの優れた新機能について紹介します。また、Epic Games チームがこれらの新機能を使用して、リアルタイム レンダリング テクノロジーの可能性を広げると同時に、広大で忠実度の高いシーンを構築するワークフローを大幅に効率化した方法について説明します。

概要

「古代の谷」で取り上げている内容は次のとおりです。

  • Nanite と Lumen を使用してレンダリングされたハイエンドのビジュアル。

  • Megascans アセットのライブラリと新しいジオメトリ ツールで作成された広大なワールド。

  • 改良された Chaos Fracture ワークフローで作成された被破壊アセット。

  • レベル ファイルやアクタを整理するための新たなパラダイムにより、1 つのマップで多くのチーム メンバーによるコラボレーションが容易に。

  • フルボディ インバース キネマティクス (IK) とモーション ワープを用いた柔軟なリアルタイム アニメーションにより、キャラクターの動きをゲームプレイに合わせることが可能に。

  • ランタイム時にシステム全体をロード/アンロード可能なモジュール式ゲームプレイ システム。

  • 新しい Metasounds システムを使用して作成されたプロシージャルなサウンド エフェクト。

  • Quartz を使用してゲームプレイと音楽を同期させるダイナミックな音楽システム。

「古代の谷」サンプルにアクセスする

Unreal Engine 5 の早期アクセス ビルドと「古代の谷」サンプルはどちらも、 Epic Games Launcher[UE5] タブからダウンロードできます。

クリックして画像を拡大

[Sample project showcases new features in UE5] というラベルのエントリまでスクロール ダウンして、 [Get the Sample (サンプルを取得)] をクリックするとダウンロードできます。

The Valley of the Ancient sample as it is displayed in the Epic Games Launcher

推奨システム スペック

このサンプルは特にグラフィックを多用しているため、安定したフレームレートで動作させるには高性能ビデオ カードが必要です。また、Nanite および仮想テクスチャで、できる限り最高の結果を実現するためには読み取り速度が高速である必要があるため、高速 SSD にインストールすることをお勧めします。推奨されるハードウェア スペックは以下の通りです。

推奨されるシステム スペック (100% Screen Percentage)

最小システム スペック (50% Screen Percentage)

  • 12-core CPU at 3.4 GHz

  • 64 GB of system RAM

  • GeForce RTX 2080 / AMD Radeon 5700 XT or higher

  • 12-core CPU at 3.4 GHz

  • 32 GB of system RAM

  • GeForce GTX 1080 / AMD RX Vega 64

Nanite は、NvidiaMaxwell 世代の GPU および AMDGCN 世代の GPU 以降でのみサポートされます。グラフィックカード用の最新のドライバもあることを確認してください。

低スペックのシステムでは、ビューポート画面のパーセンテージ設定を調整してパフォーマンスを向上させることができます。最小スペックでは、50% 以下をお勧めします。これは、[Screen Percentage] スライダーを使用して、エディターのビューポートの左上隅にある [Viewport Options Menu] で設定できます。

Screen Percentage slider in the Viewport Options menu

または、コンソールコマンド r.ScreenPercentage を使用して、ランタイム時にこの値を設定することもできます。

UE5 エディタの操作方法

UE5 の Unreal Editor では、Unreal Engine 4 の機能をすべて引き継いでいますが、ワークフローとユーザー エクスペリエンスが一部改善されています。そのため、「古代の谷」サンプルを使用してみる前に、UE5 の Unreal Editor を少し操作して慣れることをお勧めします。

UE5 main screen

UE5 への変更に関する総括的な情報は、「Editor Improvements」を参照してください。このセクションでは、このサンプルを使用する上での変更を要約します。

コンテンツ ドロワー

コンテンツ ドロワー はエディタの左下にあります。[Content Drawer (コンテンツ ドロワー)] のボタンをクリックするか、 Ctrl + スペースバー を押すと、コンテンツ ドロワーを起動したり、消去したりにすることができます。

また、[Dock in Layout (レイアウトでドッキング)] をクリックすると、UE4 での機能と同様に、コンテンツ ブラウザが常時ドッキングされます。この操作により、ドッキングされたコンテンツ ブラウザとコンテンツ ドロワーの両方を同時に使用できます。また、メイン ツールバーの [Content (コンテンツ)] ドロップダウンをクリックして、コンテンツ ブラウザを管理することもできます。れにより、コンテンツ ブラウザの柔軟性が向上し、コンテンツ ブラウザを使用していないときにエディタ内で使用できる画面領域も拡大します。

また、コンテンツ ブラウザ自体のレイアウトが変更され、左側にフォルダ ツリーが常時表示されるようになりました。さらに、新しい [Settings (設定)] メニューが追加され、ビュー タイプ、サムネイル サイズ、コンテンツ フィルタなど、アセットの表示方法を設定できるようになりました。

エディタ モードを使用する

メイン ツールバーのアイコンで、 エディタ モード を切り替えることができるようになりました。

Editor Mode icons in main toolbar

UE4 ユーザーが使い慣れているモードだけでなく、強力な新機能を備えた新しいモードも追加されています。エディタ モードは次のとおりです。

番号

エディタ モード

説明

1

選択

ゲーム ワールドのアセットを選択して、その詳細を編集するためのデフォルトの編集モード。

2

ランドスケープ

ランドスケープのスカルプト、ペイント、および管理を行う。

3

フォリッジ

環境内のフォリッジをペイントして調整する。

4

メッシュ ペインティング

環境内のメッシュに頂点ペイントを施すツール。色、ウェイト、テクスチャをサポートします。

5

フラクチャ

Chaos destruction システムを使用してスタティック メッシュにフラクチャを生成するツール。

6

ブラシ編集

従来のブラシ ジオメトリ エディタ。ペン ツールを使用して正投影ビューポートでブラシを描画してから、必要に応じて、他のツールを使用して形状を調整します。

7

アニメーション

コントロールリグを操作したり、ポーズを素早く適用したり、簡単な Tween を設定したりするツール。

8

モデリング

フルポリゴンのジオメトリ編集スイート。基本的なプリミティブからのモデリングや、ゲーム ワールド内の個々のメッシュの変更を行うことができます。

サンプルを操作する

サンプルが開くと、Startup マップが開始されます。「古代の谷」のほとんどのコンテンツは、 AncientWorld マップに格納されています。このマップは、デフォルトで開く「AncientContent」>「「Maps」にあります。

このワールドの基盤となっているほとんどのファイルは、ゲームの「Content」ディレクトリにあります。ただし、Hover Drone と Ancient One のアセットは、ゲームのベース プロジェクトとは別個の Game Feature プラグインに格納されています。Hover Drone のアセットは「HoverDrone Content」ディレクトリに、Light Dart の能力と Ancient One とのバトルは「AncientBattle Content」ディレクトリに格納されています。これらのディレクトリを表示するには、[Content Drawer (コンテンツ ドロワー)] の [Settings (設定)] ボタンをクリックして、 [Show Plugin Content (プラグイン コンテンツの表示)] を切り替えます。

Show Plugin Content highlighted in the Content Drawer's settings

「古代の谷」は広大なワールドを表現していますが、UE4 でレベル ストリーミングに従来使用するようなサブシーンはありません。代わりに、このサンプルでは、 World Partitionデータ レイヤー を使用して、1 つのシーンを編集可能な複数のパーツに分割しています。

ワールドを移動するには、 [Window (ウィンドウ)] > [World Partition] をクリックします。この操作により、[World Partition] ウィンドウが開き、ワールドの簡易マップが表示されます。

World Partition window

マウス ホイールを使用して、ワールドの様々な領域を拡大したり、マップ上のセルをクリック & ドラッグして選択したりすることができます。複数のセルを選択した後に右クリックして、 [Load Selected Cells (選択したセルをロード)] をクリックすると、それらのセルがメイン ビューポートにロードされます。同様に、 [Unload Selected Cells (選択したセルをアンロード)] を使用すると、表示させる必要のないセルを削除することができ、コンピュータの負荷を軽減することができます。

すべての World Partition セルを一度にロードするのではなく、表示または編集する必要のあるレベルのセクションのみをロードすることをお勧めします。ロードできるセルの数は、システムに搭載されているメモリの容量応じて異なります。このシステムの詳細については、以下の「World Partition」セクションを参照してください。

World Partition window close-up

闇のワールドと光のワールドを構成するレイヤーを表示するには、 [Window (ウィンドウ)] > [Data Layers (データ レイヤー)] をクリックして、[Data Layers (データ レイヤー)] ウィンドウを表示します。

Data Layers window

このウィンドウでは、シーンを構成するすべてのレイヤーのオン/オフを切り替えることができます。闇のワールドを表示するには、 Dark World データ レイヤーをオンにします。光のワールドを表示するには、 Campfire ReplaceFoliage 、および Hero Area Mountain Range データ レイヤーをオンにします。Campfire Geometry データ レイヤーは常に存在している必要があります。これらのレイヤーのオン/オフを切り替えることで、両方のバージョンのワールドを比較してみることができます。

このシステムの詳細、このサンプルでのこのシステムの実装方法、ワークフローにおけるメリットについては、「広大なワールドを共同で構築する」を参照してください。

ハイエンドのビジュアルと高速イテレーション

Unreal Engine 5 が目指しているのは、高忠実度のビジュアルの新たな基準を提供することだけでなく、ワールドでのリアルタイムの高解像度アプリケーションのためのきわめて利用しやすいパイプラインも提供することです。このセクションでは、UE5 の新しいレンダリング機能が、「古代の谷」の詳細度の向上にどのように役立つか、また、チームがいかに迅速かつ容易にこのサンプルを作成したかについて詳しく説明します。

Unreal Editor から直接利用できる Quixel Megascans アセット

Utah Megascans assets

「古代の谷」のスタティック メッシュとテクスチャのライブラリは、ユタ州モアブで採取された Quixel Megascans アセットをベースとして構成されています。このライブラリのスタティック メッシュとテクスチャを使用して環境内のほぼ 90% のアセットを表現しています。これらのアセットは、コンテンツ ドロワーの「AncientContent」>「Megascans」フォルダに格納されています。

Ancient Content Megascans folder in Content Drawer

これらすべてのアセットが Canyons of Utah Megascans パックに含まれています。さらに、Quixel Bridge は Unreal Editor に直接統合されているため、Megascans アセットのインポートや管理に外部プログラムを使用する必要がありません。UE5 では必要なマテリアル インスタンスとメッシュを自動的に生成し、生成したインスタンスやメッシュをゲーム内で直接使用できます。以降のセクションでは、UE5 を使用してこれらの高解像度アセットを簡単に処理できる方法だけでなく、環境アート チームが UE5 のツールを使用してランドスケープをきわめて柔軟に作成できる事例を紹介します。

Nanite 仮想化ジオメトリ

これらのアセットは、従来の LOD を使用しないため、追加で最適化を行う必要もありません。代わりに、すべてのアセットで Nanite が有効になっています。Nanite は、スタティック メッシュ アセットをディスクからストリーミングして、仮想化ジオメトリを使用して表現します。使用するポリゴン数は、ユーザーのビューポートの解像度に応じて動的にスケーリングされます。この表現は、ユーザーがシーン内を移動するたびに変化し、詳細度もその場で更新されます。近くのものはより細かく、遠くのものはより小さく表現されますが、画面上の全体的な詳細度はほぼ一定です。

Nanite streaming detail

Nanite により、「古代の谷」環境では、何百ものきわめてポリゴン密度の高い Megascans アセットを、追加の準備作業を行うことなく、シーンに直接使用することができます。数千万のポリゴンで構成され、大規模なテクスチャを使用した岩肌も、テクニカル アーティストが追加のセットアップを行うことなく、瞬時にレンダリングすることができます。ハイポリゴンの Zbrush スカルプトもゲーム内で直接使用できます。

Nanite の動作を確認するには、 [View Mode (表示モード)] ドロップダウンをクリックして、[Lit (ライティング)] から [Nanite Visualization (Nanite ビジュアリゼーション)] > [Triangles (トライアングル)] に変更します。

Selecting the Triangles visualization in the View Modes dropdown

これにより、Nanite からのトライアングル出力がリアルタイムで表示されます。

標準レンダリング

Nanite トライアングル ビジュアリゼーション

Nanite では変形をサポートしていないため、スタティック メッシュでのみ機能します。ただし、これだけでも環境開発パイプラインが大幅に簡略化されます。また、Nanite ではスケルトンの変形は使用できませんが、フィナーレで登場する強大な Ancient One は、スケルタル メッシュにアタッチしたスタティック メッシュを使用しており、Nanite を利用して超高解像度のアーマーをレンダリングしています。

標準レンダリング

Nanite トライアングル ビジュアリゼーション

Nanite の使用方法および構成方法については「Nanite」を参照してください。

Lumen グローバル イルミネーション

この詳細に表現された渓谷のライティングには、Unreal Engine 5 の新しい完全に動的なグローバル イルミネーションおよび反射のシステムである Lumen が使用されています。Lumen は、間接ライティングが直接ライティングやジオメトリの変化に適応し、新旧の技術を組み合わせて質の高いリアルタイムの結果を得ることで、ダイナミックでリアルなシーンを作り出します。Lumen は、次世代のコンソールやハイエンド PC 向けに開発されており、Unreal Engine 5.0 のリリース バージョンでは、これらのプラットフォームで 30~60 FPS を実現することを目指しています。

GI/SkyLighting あり

GI/SkyLighting なし

Lumen はスケーラブルで、ソフトウェア レイ トレーシング モードおよびハードウェア レイ トレーシング モードを使用して、DX11 および DX12 対応のハードウェアを幅広くサポートしています。「古代の谷」では、 画面トレース (またはスクリーン空間トレーシング) と サーフェス キャッシュ 表現を組み合わせたソフトウェア レイ トレーシングを使用して、シーンの間接ライティングを生成しています。Lumen では、Screen Traces を使用して、個々のメッシュの符号付き距離フィールドから生成される品質の低いサーフェス キャッシュで発生する可能性のある不一致に対処しています。サーフェス キャッシュを視覚化するには、 [Show (表示)] > [Visualize (視覚化)] > [Lumen Scene (Lumen シーン)] を使用します。サーフェス キャッシュは最初の 200m のみ機能し、その後、距離のあるシーンでは画面トレースにフォール バックします。

Lumen は汎用性が高く、Nanite の仮想化されたジオメトリと従来のスタティック メッシュ ジオメトリの両方に対応できる品質オプションを備えています。また、画面トレースにより、スキン メッシュが間接ライティングを受けて、作用することができます。ただし、これはスクリーン上に表示される内容に制限されます。また、エディタのビューポート内で [Show (表示)] > [Visualize (視覚化)] > [Lumen Global Illumination (Lumen グローバル イルミネーション)] をクリックすると、Lumen の組み合わされた技術を視覚化できます。

標準レンダリング

Lumen GI ビジュアリゼーション

Lumen は、光源としてのエミッシブ マテリアルを含む、すべての可動光源に対応しています。スカイライティングでは、Lumen のファイナル ギャザーを使用してスカイ シャドウイングを行います。スカイ シャドウイングは、屋内領域を屋外よりもはるかに暗くさせたり、より多くのライトを反射する明るい色のサーフェスを生み出したりすることができます。

Lumen/スカイライティングを有効にしたとき、Lumen を無効にしたとき、Lumen /スカイライティングの両方を無効にしたときのキャンプファイヤー エリアの比較。

Lumen の品質と速度のバランスおよび「とにかく機能する」性質のおかげで、チームは、従来のライティング技術に伴うあらゆる設定オプションについてあれこれ考える必要なく直感的に 「古代の谷」の巨大なランドスケープのライティングを構成することができました。Lumen の概要と機能については、「Lumen グローバル イルミネーションと反射」および「Lumen 技術の詳細」を参照してください。

新しいモデリング ツールでメッシュを調整する

Modeling Editor example

この環境の Megascans のメッシュの多くは、オリジナルでインポート済みの「ストック」のメッシュではなく、ランドスケープ独自のニーズに合わせて Unreal Editor 内で変更されています。「古代の谷」の環境アーティストは、UE5 の新しい モデリング エディタ モード を使用してこの変更を行いました。

モデリング エディタを使用すると DCC ツールと同じ方法でメッシュを一から作成することができますが、この環境でスタティック メッシュやインスタンス化されたスタティック メッシュを選択して、そのジオメトリを変更することもできます。これらの編集をポリゴン単位で行うのは手間がかかりますが、モデリング エディタのモードには、高密度のメッシュを素早く変更できる多数のデフォーマおよびスカルプティング ツールがあります。

例えば、SM_umshejnga_High2 などの岩肌のアセットがあり、このアセットの湾曲したバージョンが必要だとします。モデリング エディタのモードを切り替えて、ビューポートで該当するメッシュを選択して、 Bend デフォーマを適用します。少し微調整を行ってから、メッシュに変形を適用すると、適用後の結果を確認できます。少し微調整を行ってから、メッシュに変形を適用すると、適用後の結果を確認できます。

初期メッシュ

Bend デフォーマをアクティブ

Bend デフォーマを適用した最終結果

Click images for full size.

UV をやり直す必要は一切なく、1 つの高解像度の基本メッシュから様々な独自のメッシュを、オリジナルと同等の品質で作成することができます。これにより、アーティストは、あらゆる解像度のアセットをきわめて柔軟に編集できるため、独自のニーズに対応したコンセプトをレベル エディタ内で作成できます。

パックされたレベル インスタンスでランドスケープを作成する

「古代の谷」のランドスケープは非常に広大であるため、これまで紹介してきたツールを使用しても Megascans アセットを個々に配置していると、詳細度の高い環境を構築するには非常に長い時間がかかります。そのため、「古代の谷」の環境アート チームは、大規模なアセンブリをキットバッシュするために、 パックされたレベル インスタンス を活用しました。

レベル インスタンスとは、基本的には、World Partition システムを実装する任意のワールドに追加できるネストされたレベルです。レベル インスタンスを使用しなくても World Partition は機能しますが、ワールド内のコンテンツのチャンクを再利用可能なパーツに編成したり、メイン レベル外で編集するためにレベルをより管理しやすいパーツに分割したりするのに役立つツールです。

レベル インスタンスを作成するには、ワールドのオブジェクトのグループを選択して、右クリックして [Create from selection (選択項目からの作成)] をクリックします。

Create From Selection example

これにより [New Level Instance (新規レベル インスタンス)] メニューが表示され、作成する必要のあるレベル インスタンスのタイプを選択できます。

New Level Instance selection

[OK] をクリックすると、新しいレベル インスタンスをプロジェクトのレベル ファイルとして保存することができ、対応するブループリント アセットも新しいレベル インスタンスと一緒に生成されます。選択したすべてのアクタは、それらを含む Level Instance アクタに置き換えられます。このレベル インスタンスはレベル ファイルを使用して編集したり、ブループリント アセットを使用してレベル インスタンスのコピーを配置したりすることができます。

Placing a Level Instance

レベル インスタンスの操作は、レベルの他のアクタの操作と同様に簡単です。レベル インスタンスのコンポーネント パーツをインプレースで編集することもできます。配置されたレベル インスタンスの [Details (詳細)] パネルの [Level Instance Editing (レベル インスタンスの編集)][Edit (編集)] ボタンをクリックして、該当するレベル インスタンスに焦点を絞ります。その後、他のワールドのコンテキストに沿って、レベル インスタンスのコンポーネント パーツを編集することができます。

Editing a Level Instance

編集が完了したら、 [Commit Changes (変更をコミット)] をクリックして行った調整を確定し、ワールドの編集に戻ります。変更を保存するかどうか、および該当するレベル インスタンスのすべてのコピーにも同じ変更が反映されることを確認するプロンプトが表示されます。

Commit Changes for Level Instance

「古代の谷」サンプルでは主にパックされたレベル インスタンスを使用してアセンブリを作成します。標準的なレベル インスタンスとは異なり、これらはスタティック メッシュではないアクタはすべて無視し、スタティック メッシュをインスタンス化されたスタティック メッシュに変換することで、それらのコンポーネント アセットによって作成されるドロー コールの数を削減します。

このワークフローにより、環境アート チームは大規模なアセンブリのライブラリを独自に構築し、非破壊編集を行うことができるようになりました。これらには、プレイヤーの周りの観測可能なランドスケープを構成する汎用性の高い小さなアセットから、遠方のランドスケープの大型のチャンクを構成できる巨大なジオフォームまで、様々なアセットがあります。これらのアセンブリの多くがエディタ内にあるスタティック メッシュ アセットで構成されていますが、一部は Megascans アセットをベースにしてチームがカスタムビルドしたものもあります。チームは、これらを活用して、このワークフローを活用して、わずか数週間で 4 平方 Km 以上にわたる大地をフォトリアルなディテールでセット ドレッシングする柔軟なアセンブリ ラインを構築しました。

これらのアセンブリのマップ ファイルは、「AncientGameContent/Maps/MASS」フォルダに格納されており、対応するレベル インスタンス アクタは「AncientGameContent/Geometry」フォルダに格納されています。各ツールの詳細情報については「レベルのインスタンス化」を参照してください。

Chaos Destruction ワークフロー

「古代の谷」の非破壊メッシュ (闇のワールドの柱や、フィナーレで Ancient One が立ち上がる小山など) を開発する過程で、UE5 の Chaos Destruction ワークフローに多くの改良が行われました。チームが開発したワークフローでは、新しいモデリング エディタ モードと フラクチャ エディタ モードを組み合わせて使用します。

破壊チームは、モデリング ツールを多用してメッシュを準備し、ターゲットとなるフラクチャを作成しました。Simplify (単純化) 、Planar Cut (平面カット) (PlnCut)、 Offset (オフセット) 、および Displace (変位) (ノイズの多いサーフェスを追加する) を使用することで、最初のフラクチャをソース メッシュ自体からスカルプトすることができました。このプロセス全体を通じて、 ブーリアン ツールを使用し、相互に貫通している、重なり合ったメッシュを削除し、サーフェス上のジオメトリのみを残しました。孤立しているポリゴンやジオメトリの浮島は、 TriSel ツールを使用して除去しました。

Using the mesh tools to create planar cuts in a mesa

フラクチャ編集モードでは、チームは メッシュ フラクチャ ツールを使用して、非破壊メッシュを大型のチャンクに分割しました。このツールは、他のメッシュを効果的に使用してジオメトリを破壊するもので、ブーリアンの減算ツールと同様に機能します。ただし、メッシュの両方のパーツはそのまま残されます。このツールで作成されたチャンクは、非破壊オブジェクトの主要なフラクチャとして機能し、崩壊するときの外観をある程度コントロールすることができます。これらのチャンクを作成した後、チームは従来のボロノイ フラクチャ (均一 フラクチャまたは クラスタ フラクチャ ツールを使用) を適用して、チャンクをさらに小さなパーツに分割しました。

メッシュ カットを柱に適用

メッシュ カット適用後の柱

ボロノイ破砕を適用

クリックして拡大表示。

UE5 で導入された [Noise (ノイズ)] 設定により、これらのフラクチャは自然な外観で、エッジが不均一なフラクチャになります。

Fracture mode AutoUV tool

チームでは、フラクチャ (破砕) されたアセットの内面の UV 処理には、 AutoUV ツールを使用しました。このツールは、メッシュの深さに基づくグラデーションにマッピングされたテクスチャを生成します。これにより、複数のマテリアルを融合して、断面の異なるパーツに深さに応じた異なる表面品質を持たせることがでるようになり、より自然な外観が実現します。例えば、断面内の奥にあるメッシュ パーツは埃っぽく乾いた感じにして、表面により近い部分は黒っぽく風化した感じにすることができます。

最後に、Chaos Cache Manager (ケイオス キャッシュ マネージャー) を使用してアセットの物理シミュレーションをキャッシュしました。ケイオス キャッシュ マネージャーは、シミュレーションをエディタ内に記録してゲームで再生できるシステムで、トリガーされるたびにシミュレーションが同一の方法で進行することが保証されます。これにより、処理能力を節約しながら、複雑で緻密な破壊をゲームで表現できます。また、レベル デザインにおけるゲーム内の具体的なニーズに合わせて破壊をオーサリングすることもできます。例えば、Echo が破壊した最初の柱が入り口を塞ぐような形で倒れることはありません。また、Ancient One のマウンドが Echo のアリーナの横断を妨げるがれきが残ることもありません。キャッシュ マネージャーを使用してシミュレーションを記録した後、そのコピーをレベルに配置すると、それに関連付けられている他のすべてのアセットが配置されます。

Chaos Cache Manager

これらのアセットのオリジナルのシミュレーション設定は、プロジェクトの最終ビルドでは除去されます。ただし、ジオメトリ コレクションとそれらのキャッシュ マネージャーは、[AncientBattleContent] > [Maps] > [Destruction] にあります。ターゲット フラクチャに使用されるアセットの例については、c_Destruction > 3_Lt_Hand のコレクションを調べることができます。また、L_AncientBattle_Gameplay レベルを表示して、ダーク ワールドで使用されるすべてのキャッシュ マネージャーを確認できます。

このワークフローの柔軟性の改善は進行中です。なお、このワークフローの柔軟性については引き続き改善されています。また、「古代の谷」の実装により、UE5 の Chaos Destruction の品質、アクセス性、柔軟性を向上させるという Epic Games のコンセプトを実証しています。

Sky Atmosphere と Volumetric Niagara のエフェクトを使用して設定する

Sky Atmosphere third person wide view

「古代の谷」の環境を作成するため、Epic Games では新しい Sky Atmosphere システムを使用しています。

シーンに Sky Atmosphere アクタを配置すると、地上半径 (Km)、大気の物理パラメータ、アート ディレクションのオーバーライドなど、シミュレートされた惑星に関する情報を設定することができます。このシステムは、 [Atmosphere Sun Light (大気太陽光)] として設定した ディレクショナル ライト 、および スカイ ライト と連動して機能します。Sky Atmosphere システムは、これらの要素が揃うことで、リアルな大気、ボリュメトリック クラウド、およびフォグ (霧) を地球規模で生成します。このシーンの環境ライティングは、スカイライトのリアルタイム キャプチャおよび畳み込みプロセスにより、完全にダイナミックなライティングが実現しています。

SkyAtmosphere オン

SkyAtmosphere オフ

「古代の谷」の光のワールドでは、Sky Atmosphere アクタを使用して、実際の地球上の大気を反映したより繊細な大気を表現しています。また、アニメート化されたボリュメトリック クラウドも、リアルタイムでダイナミックにライティングされています。一方、闇のワールドでは、よりスタイライズドされた幻想的な外観を実現するために、従来のスカイドームを使用しています。

光のワールド シーン

闇のワールド シーン

画像をクリックしてフルサイズ表示

チームは、岩場を吹き抜ける霧や砂などの仕上げに、Niagara パーティクルと ボリュメトリック ペイント データとを併用して、環境内での霧や砂を演出しました。

Dust stripe flowing across the ground

これらのパーティクル システムのアクタ (BP_NiagaraPainted_FarFogBP_NiagaraPainted_FogDetail 、および BP_NiagaraPainted_SandStripe) は、Dark World (闇のワールド) データ レイヤーで確認できます

Dark world Niagara Blueprints

各アクタが、2 つの Niagara テクスチャ データ インターフェイス (VolumetricPaintingDensityMapVolumetricPaintingVelocityMap) を使用しています。

Niagara Data Interface textures

密度マップは RGB 情報とアルファ チャンネルを併用して、テレインに対するパーティクルの高さおよび密度を決定します。また、速度マップはパーティクルの移動方向を決定します。チームでは、カスタムビルドのボリュメトリック ペインティング ツールを使用して、環境内のこれらのレイヤーをペイントし、テクスチャを出力しました。次の画像では、環境の上に重ねて表示されたグリッドが密度マップを表し、矢印がフロー マップを表しています。BP_NiagaraPainted_FogDetail (フォグ フリップブック) は、BP_TerrainFogMaster (ボリューム フォグ) の上に同じ 3D 密度でレイヤー化され、詳細が追加されます。

Density map grid and flow map arrows overlays

この方法により、「古代の谷」では、わずか 3 つの Niagara システムで、闇のワールドのランドスケープに 10 万個以上の GPU パーティクルをシミュレートしています。次に、すべてのナイアガラシステムを環境に適合させ、同じ体積塗装データを使用する体積フォグを使用して、特注の詳細を追加します。ボリュメトリック ペインティングのツールはまだ開発中ですが、これは Niagara の機能と併用した場合のパフォーマンスと実用性の概念実証となります。

広大なワールドを共同で構築する

これまでは、ユーザーはレベルをサブシーンに分割して、レベル ストリーミング システムまたはワールド コンポジション システムを使用して、パーシスタント レベルに分割したサブシーンをストリーム入力または出力していました。この方法では、綿密な調整が必要となり、複数のユーザーによる共同作業が困難でした。これは、通常、バージョン コントロールの問題を回避するため、一度に 1 人のユーザーしかシーンを修正できないからです。

Unreal Engine 5 では、レベル ファイルの操作方法を刷新し、このプロセスをより明確かつ直感的に行えるようにしました。たった 1 つのレベル ファイルから巨大なワールドを編集できるだけでなく、何十人もの他のデベロッパーとの共同作業でも、競合の発生を最小限に抑えて作業を進めることができます。このセクションでは、これを実現するツールの詳細と、「古代の谷」を作成する際にこのツールを使用することでチームの共同作業にどのようなメリットがあったかについてご紹介します。

One File Per Actor

「古代の谷」のワールド全体で、UE5 の新システム One File Per Actor (OFPA) が使用されています。このシステムを有効にすると、データを単一のマップ ファイルに書き込むのではなく、レベル内に配置されたアクタの独自のインスタンスごとに個別のファイルを作成します。

レベル エディタを操作するユーザーのワークフローは、まったく変わりません。レベルを編集するには、引き続きエディタで単一のレベル ファイルを開きます。ただし、基盤となるファイル システムが各アクタを個別のファイルとして追跡するため、レベル デザイナーや環境アーティストは同じレベルの異なる領域やレイヤーを編集することができます。この際、バージョン コントロール システムに変更をコミットする際に競合が発生することはほとんどありません。

「古代の谷」では、OFPA がグローバルに有効になっています。この設定は、 [World Settings (ワールドセッティング)][World (ワールド)] パラメータの [Advanced (詳細設定)] セクションにある [Use External Actors (外部アクタを使用)] という項目です。

World Settings Use External Actors

この設定は、個々のアクタに対して有効にすることも、プロジェクト全体に対してグローバルに有効にすることもできます。詳細については「One File Per Actor」を参照してください。

このシステムにより、「古代の谷」のデベロッパーは、1 日の作業中に変更を素早くコミットし、エディタ内でお互いの変更をすぐに確認できるうえに、バージョンの競合の問題にわずらわされることもありません。また、ゲームプレイ スクリプティングおよび環境アートへの微調整を常に相互に並行して実行できるため、迅速なイテレーション作業が可能となり、高度に協力的な環境アートのパイプラインが実現します。

World Partition

ゲームの大規模な広大なワールドでは、マップを複数のセクションに分割して、プレイヤーがランドスケープを移動していくのに合わせてセクションをロード/アンロードする必要があります。これは、数 km に及ぶマップ全体を一度にロードすることは不可能であるためです。これまでのツールセットでは、デベロッパーが手作業でマップをサブレベルに分割し、ストリーミングの入出力を慎重に管理しなければなりませんでした。また、ワールドの各セクションを相互に関連付けて表示することも困難でした。

新しい World Partition システムは、このプロセスを大幅に簡素化します。World Partition がレベルで有効になると、オブジェクトがグリッド位置に基づいて複数のセルに自動的に分割されます。また、レベル エディタでワールドを調整すると、セルの内容も更新されます。そのため、手動でオブジェクトをセルに割り当てる必要はありません。ゲームプレイ中は、プレイヤーがゲーム ワールドを横切ると、World Partition によって自動的にセルがロード/アンロードされるため、セルを手動で管理したり、ストリーミング ボリュームを指定する必要もありません。

World Partition は、AncientGameEntry シーンの [WORLD PARTITION SETUP][World Settings (ワールド セッティング)] で有効化されます。

World Settings World Partition Setup

[World Partition] ウィンドウは、 [Window (ウィンドウ)] > [World Partition] をクリックすると表示されます。このウィンドウ内では、エディタのセルをクリック & ドラッグして選択したり、編集のためにセルをロード/アンロードすることができます。また、このウィンドウを使用すると、選択したセルにカメラを移動させることで、エディタ内を素早く移動することができます。

World Partition window

個々のアクタの [World Partition] 設定は、そのアクタの [Details (詳細)][World Partition] セクションで確認できます。これはブループリント エディタのクラスのデフォルトでも編集できます。

World Partition individual actor settings

デフォルトでは、環境内のほとんどのアクタは World Partition のグリッド内の位置を使用して、アクタが属しているセルを特定します。Echo はプレイヤー キャラクターであるため、常にロードされるように設定されています。

おわかりのように、World Partition システムは、広大なワールドを構築するプロセスを大幅に効率化します。サブレベルに相当する多くのファイルを引き続きバックグラウンドで管理しながら、アーティストやデザイナーは、技術的なディテールが自動化されているため、作成したい環境やユーザー エクスペリエンスの作業に集中することができます。World Partition の構成方法については、「World Partition」を参照してください。

データ レイヤー

データ レイヤー は、ワールド内のオブジェクトを個別のレイヤーに整理するシステムで、オプションで自由にロード/アンロードすることができます。データ レイヤー システムはサブレベルに代わるもので、World Partition と連動するように設計されています。データ レイヤー は、プロジェクトの編成に役立つもう 1 つのツールであり、ゲームプレイ機能を高め、自分のワールドをより細かくコントロールすることができます。

[Data Layers (データ レイヤー)] ウィンドウは、 [Window (ウィンドウ)] > [Data Layers (データ レイヤー)] で開くことができます。このメニューを使用すると、エディタでデータ レイヤーの作成、編成、ロード/アンロードを行うことができます。

Data Layers window

アクタの [Details (詳細)][Data Layers (データ レイヤー)] セクションにスクロールすると、アクタのデータ レイヤー情報を確認できます。このセクションのドロップダウンを使用して、アクタのデータ レイヤーを変更したり、[Data Layers (データ レイヤー)] ウィンドウからデータ レイヤーをこれらのエントリのいずれかにクリック&ドラッグすることができます。

Data Layer individual actor settings

また、アウトライナからアクタをデータ レイヤーにクリック&ドラッグすると、複数のアクタを一度にデータ レイヤーに割り当てることができます。

Dragging multiple actors on to a Data Layer

「古代の谷」では、データ レイヤーを使用して光のワールドと闇のワールドの間での遷移を制御します。Echo がポータルをアクティブにすると、光のワールドを表す複数のデータ レイヤーがアンロードされ、闇のワールドを表すもう 1 つのデータ レイヤーがロードされます。

光のワールド

闇のワールド

画像をクリックして拡大。

これらのデータ レイヤーは、Dark World Rift オブジェクトによってトリガーされるインゲーム イベントを使用して、アクティブ化/非アクティブ化されます。どちらのデータ レイヤーも同じレベル ファイルに作成され、同じ空間を共有していますが、同じワールドでありながら、まったく異なるバージョンです。

Campfire データ レイヤーは両方のワールドで使用され、Echo が一方のワールドからもう一方のワールドに遷移する際に、プレイヤーのための共通の参照フレームを作成します。これには重複するバージョンは必要ありません。外観の唯一の変更点は、光のワールドと闇のワールドで使用される大気やライティングのみです。

Campfire Light World

Campfire Dark World

開発段階では、このデータ レイヤーは、ゲームプレイ要素と環境設定要素を分離する有益なツールとしても機能しました。環境アーティストは、重複するトリガーやゲームプレイ オブジェクトを処理する必要なく各自のデータ レイヤーで作業することができ、デザイナーはインゲーム イベント関連のオブジェクトに集中できたためです。

詳細は、「データ レイヤー」を参照してください。

柔軟なリアルタイム アニメーション

UE5 では、スケルタル メッシュを使用したリアルタイム アニメーションに、キャラクターおよびキャラクターとワールドとのインタラクションに焦点を絞って、いくつかの点を改善しました。「古代の谷」では、これらの改善点を活かして、Echo とデモの終わりに Echo が対峙する巨大な Ancient One の両方のインタラクションを制御しています。

Motion Warping

新しい Motion Warping (モーション ワープ) システムを使用すると、アニメーションで、環境のワープ ポイントに応じて、ルート モーションを変更させることができます。これにより、1 つのアニメーションを様々な状況で柔軟に使い分けることが可能になり、複雑な環境のインタラクションの処理で生じる作業負荷が大幅に縮減されました。

例えば、「古代の谷」デモでは、Echo が闇のワールドの中で瓦礫や障害物を跳び越えていくことができます。

Motion Warping vaulting gif

これまでのワークフローでは、このようなインゲーム アクションを実現するためには、障害物の物理的なパラメータについて制約の多い規則を採用するか、特定の障害物のために特定のアニメーションを作成するか、これらのアクションをコンポーネント アニメーションに分割して、その再生方法とタイミングについて複雑なルールを設定する必要がありました。

しかしながら、このプロジェクトでは、Echo の跳び越えていくアクションは、 VaultOver_Montage アセットによって完全に処理されています。

VaultOver_Montage asset in editor

VaultOver_Montage アセットは、新しい MotionWarping Notify States を使用して、キャラクターのルート モーションを環境に合わせてワープできるアニメーションのセグメントをマークしています。各セグメントが、環境に配置された 同期ポイント に反応します。この例では、各セグメントの名称は、FrontEdge、BackEdge、BackFloor という名称で、これらは跳び越えることができるオブジェクト上の異なる参照ポイントに対応しています。FrontEdge は Echo の手がオブジェクトに触れて直立姿勢になる位置、BackEdge は Echo が素早く跳び越え始める位置、BackFloor はオブジェクトの反対側に着地する位置を表します。

これらのポイントは、 GA_Vault という名称の GameplayAbility 内で設定され、 BP_EchoCharacter にアタッチされた VaultingTriggerVolume に基づいて、跳び越え動作がトリガーされます。モーション ワープの同期ポイントを個別に設定するためのビルトインのブループリント ノードがありますが、この機能では、跳び越え可能なアクタに関するデータに基づいて、すべての同期ポイントを一度に計算するカスタム ノードを使用します。

Set Vault Sync Points for Montage Blueprint node

これら 3 つのポイントが Echo の MotionWarping コンポーネントに提供されると、VaultOver_Montage では、プレイ時に Echo のルート モーションをこれらのポイントに自動的に整合させます。これは、MotionWarping の通知状態の持続時間と、それらのセグメントのモーション ワープの動作の設定を考慮しています。

このシステムのおかげで、Echo は 1 つだけのアニメーションで環境内の様々なオブジェクトを簡単に跳び越えていくことができます。オブジェクトの高さや奥行きを問わず、Echo のアニメーションは自然な感じで、それぞれの目的地ポイントに合わせて調整されます。このため、デベロッパーは少数のアニメーション アセットのライブラリできわめて高い柔軟性を得ることができます。

モーション ワープの実装方法についてはドキュメント「Motion Warping」を参照してください。

コントロールリグの改善点

Echo と Mighty Ancient One の両方に Unreal Engine の コントロールリグ が実装されており、Unreal Editor 内で両方をアニメートすることができます。UE5 では、コントロールリグで使用できるツールが次のように拡充されました。

  • ポーズ ライブラリ 。アニメーション作成時にモデルのパーツに素早く割り当てることができる再利用可能なポーズのリストを保持します。

  • Tween ツール 。中間キーフレームを生成し、周囲のキーフレームの情報に基づいて重み付けを行うことができます。

  • スナッパー ツール 。コントロールリグのパーツをゲーム ワールド内のオブジェクトに固定できます。

これらのツールにより、作業の質が向上し、アニメーションのライブラリを構成するためのショートカットも提供されます。「古代の谷」サンプルでは、Ancient One のアニメーションは、モデルのデザインと製作を担当した Aaron Sims Creative チームが、コントロールリグとシーケンサを使用して、すべて Unreal Editor でオーサリングしました。

Control Rig editor

Ancient One と Echo の両方にコントロールリグが設定されています。これらを使用して、新機能を確認することができます。Echo のリグは、「AncientContent」 > 「Characters」 > 「Echo」 > 「Rig」 に格納されており、Ancient One のコントロール リグは 「AncientBattle Content」 > 「Characters」 > 「AncientOne」 > 「Rig」 格納されています。

Control Rig content folders

UE5 でのコントロール リグの改善点の概要については「コントロール リグ」を参照してください。

Full-Body IK Solver

どちらのキャラクターにも、新しい Full-body IK (FBIK) Solver が実装されており、環境に対してどのように反応するかをさらに細かく制御することができます。FBIK は各キャラクターの Control Rig アセット内で Forwards Solve グラフのノードとして適用されます。このソルバは、メッシュの標準的なアニメーションがすべて処理された後、ポストプロセス レイヤーでモデルに補正を適用します。

Full-body IK Solver in Control Rig asset

この実例として、Ancient がエネルギー ビーム攻撃を行う際に、Echo の位置を追跡するブループリント ロジックによって腕の配置が制御され、ビームを発射する際に Full-Body IK Solver がボディの残りの部分の補正を処理します。

Ancient firing beam gif

さらに細かい例としては、Echo は FBIK を使用してゲーム ワールド内の様々なテレインに適応し、地面の角度に合わせて足を調整したり、凹凸のある場所を移動する際に腰の位置を変えたりしています。これにより、特に傾斜を登ったり、下ったりしたり、障害物を乗り越えたりする際に、よりバリエーションに富んだ自然な動きが実現されます。

Echo walking downhill gif

フルボディ IK の実装方法の詳細については、「フルボディ IK」を参照してください。

Modular Gameplay を作成する

また、UE5 にはモジュール式のゲームプレイをビルドするためのフレームワークも備えており、「古代の谷」では、闇のワールドへの移行時にこれらのシステムを活用しています。Echo の環境の変更だけでなく、ランタイム時に一連の新しい入力バインディングやメカニクスも導入されました。

Game Feature プラグインを使用してゲームプレイを拡張する

Echo throwing light dart

光のワールドでは、Echo はリモート制御の光を使用して周囲の状況を把握します。闇のワールドでは、光を放って障害物を破壊したり、敵にダメージを与えたりします。これらのシステムは、それぞれ独立した Game Feature プラグインです。Fortnite のパイプラインから着想を得たこのシステムは、機能をそれぞれ独立して開発し、自由にゲーム本編に統合することを可能にしています。実行時にロード/アンロードすることもできます。

新しいゲーム機能を作成するには、 [Plugins (プラグイン)] ウィンドウを開いて、 [Create Plugin (プラグインを作成)] をクリックします。プラグインのベース タイプとして [Game Feature (ゲーム機能)] を選択できます。

Creating a Game Feature plugin

このプラグインは、プロジェクトの「Plugins」ディレクトリに格納されます。

標準的なプラグインを使用する場合、ゲームでそのプラグインのクラスやアセットを参照することができますが、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 Content」 フォルダにあります。

[Content Drawer (コンテンツ ドロワー)] で Game Feature のコンテンツを表示するには、 [Settings (設定)] ボタンをクリックして、 [Show Plugin Content (プラグイン コンテンツの表示)] をオンにして、 「AncientBattle Content」 フォルダを特定します。

AncientBattle Content folder

アニメーション、ビジュアル エフェクト、UI 要素、ブループリントなど、Light Dart に関連するすべてのアセットがこのフォルダ内に格納されています。このフォルダの最上位には、AncientBattle Game Feature Data アセットがあります。

AncientBattle game Feature Data asset

このアセットには、プラグインがロード/アンロードされると、どのように動作する必要があるかに関する指示が含まれています。Light Dart プラグインでは、LightDart Gameplay Ability を Echo に追加し、能力をアクティベートする入力を使用して Echo をセットアップし、必要なコンポーネントを Echo にアタッチするという指示が含まれています。

ゲームプレイ中、これらの機能は BP_DarkWorldRift ブループリント内で、闇のワールドへの遷移がトリガーされると、切り替わります。

BP_DarkWorldRift Blueprint

ゲームのメイン コードベースやアセットに LightDart への参照を追加する必要ありません。LightDart が Echo に追加されると、Game Feature Data に記載されている指示に従って、すべてのコンポーネントを使用することができます。

このシステムを使用することで、デベロッパーはある時点でどの機能セットがアクティブであるかを簡単にコントロールできます。これは、限られた期間や範囲内で機能するメカニクスを処理する場合に特に役立ちます。ここでは、Echo の Light Dart がワールドが遷移すると切り替わるようになっています。ただし、オンライン ゲームの限定イベントや、短編映画のセグメント、ゲームプレイ中の大きなモード変更などにも簡単に対応できます。

Game Feature プラグインの詳細およびプロジェクトでのこのプラグインの実装方法については、「Game Features と Modular Gameplay」を参照してください。

Enhanced Input System を使用した柔軟なコントロール

UE5 は、新しい Enhanced Input System を装備しています。このシステムは、「古代の谷」では Echo のコントロールに使用されています。強化された入力システムは、Echo の動きや能力を処理するだけでなく、特定のコントロールのための状況データや、プレイヤーの状態に応じた入力の追加や削除など、該当する入力の状況に応じた要素を処理する方法を提供します。

UE4 の入力システムでは raw 入力をアクタのイベント グラフ内のイベントで処理していましたが、Enhanced Input ではコントロールをコンテンツ ドロワー内のアセットで表現される 入力アクション としてモデル化します。「古代の谷」のほとんどの入力アクションは、Content > AncientGameContent > Input に格納されています。闇のワールド専用の入力アクションは、AncientBattle_Content > Input に格納されており、ホバー ドローン専用の入力アクションは HoverDrone_Content > Input に格納されています。

Input Actions in the Content Drawer

IA_MoveForward IA_MoveRight などの一般的なコントロールだけでなく、Echo がキャンプファイヤーから立ち上がるときに使用される IA_SitStand などの高度に状況に応じたコントロールも格納されています。入力アクションを開くと、異なる型の軸の値など、どの型の値を返すかを設定できます。また、入力を有効にするための状況依存の要件を追加する Triggers や、ゲームプレイに渡す前に入力の値を処理する Modifiers のリストを提供することもできます。

Input Action Details

Triggers や Modifiers を使用すると、デッド ゾーンや反応性曲線、入力を有効にするために必要な状況依存のアクションを、アクタのゲームプレイ コードで入力データを一切手動でフィルタリングすることなく処理することができます。Triggers や Modifiers は、ブループリント クラスや C++ クラスとして定義することで、プロジェクトに追加することができます。

コンテンツ ドロワーで InputAction を定義すると、ブループリントのイベントを使用して InputAction にアクセスできます。Echo をコントロールする InputActions は BP_EchoCharacter で処理します。

Input Actions in the BP_EchoCharacter Blueprint

これらのイベントは、標準の入力イベントと同じように機能する一方で、アクションの開始、終了、進行中、および強制キャンセル時、およびアクションがアクティブにであるときは、入力アクションに関するより状況に応じた情報を提供します。入力イベントの値は、InputAction アセットにリストされている Value Type によって定義されます。この値が出力される前に、InputAction にリストされているすべての Modifiers が適用されます。

Input Mapping Contexts は、InputActions の物理コントロールへのマッピングを処理します。これらのアセットは、InputActions と一緒に格納されています。IM_ThirdPerson_Controls_InputMapping には Echo のコントロールの大部分が格納されており、 IM_LightDartInputMappings には Light Dart 能力とジョギング用に追加されたコントロールが格納されています。

Input Action Mappings

これらは UE4 の入力システムのアクションおよび軸マッピングと同様に編成されていますが、InputActions を物理入力にマッピングすることに加えて、特定のコントロールの実装に Modifiers と Triggers を適用することができます。例えば、Echo はIA_MoveForward を読み取り、前方および後方の動きを決定します。W キーには Modifiers が追加されていませんが、S キーは Negate モディファイアを使用しているため、マイナスの入力として読み取られます。

Input Mapping Contexts のメリットの 1 つは、ランタイム時にプレイヤーごとに追加および削除できることです。例えば、AncientBattle Game Feature プラグインでは、ロード時に IM_LightDartInputMappings が追加されます。

Light Dart Input Mapping Details

この Game Feature アクションは、このプロジェクト専用に C++ で作成されました。HoverDrone Gameplay Feature の C++ クラスで、 EnhancedInputComponent を拡張する HoverDroneControlsComponent で、ランタイム時に入力マッピングを追加および削除するもう 1 つの例を確認できます。

この例では、Enhanced Input システムが、ゲームの入力を管理するための拡張性と柔軟性の高いフレームワークを提供していることを示しています。ゲームプレイのコードを破壊的に変更することなく、開発期間中にゲームの入力を簡単に拡張して適応させることができ、このシステムには文脈上の入力や特殊なケースの入力用に多くのツールが用意されています。詳細は「Enhanced Input」を参照してください。

ダイナミックなインタラクティブ オーディオ

Unreal Engine 5 では、ビジュアル、ゲーム メカニクス、ワールドを自由に構築できるツールに加えて、まったく新しいオーディオ システムを装備しており、ゲームのオーディオをより自由にコントロールすることができます。このセクションでは、「古代の谷」でこれらの新しいツールを使用することで、Echo が Ancient One と最後に対峙するシーンを一層洗練された迫力ある場面にする方法をご紹介します。

MetaSounds

MetaSounds は、Unreal Engine 5 のための新しい高性能オーディオシステムで、オーディオデザイナーに完全な機能を持つDSP (Dynamic Signal Processing) グラフを提供します。このシステムは、プロシージャルなサウンド エフェクトや音楽を一から合成することができ、ブループリント API を装備しているため、デザイナーはゲームプレイ イベントやゲーム内データに基づいてサウンドを操作することができます。MetaSounds により、サウンド デザイナーはきわめて柔軟に開発を行うことができるため、迅速なイテレーション、複雑でダイナミックなサウンド、ゲーム デザインの変更にサウンド エフェクトを簡単に適応させることができます。

MetaSounds の性能と汎用性の例としては、 「Audio」 > 「MetaSounds」 > 「AncientBattle Content」 フォルダの sfx_Golem_RobotBlast_Meta をご確認ください。

このメタ サウンドは、プロシージャルに生成されたオーディオと。wav サンプルの混合物を使用して、エンシェントワンのビームをチャージするためのサウンドエフェクトを作成します。最初のセクションでは、メインのチャージアップサウンドの合成とモジュレーションの大部分を処理しますが、これは完全にプロシージャルなものです。

Intro Wave セクションおよび Shot Waves セクションは、いくつかの補助的な .wav ファイルを使用して、サウンドのテクスチャを高めます。Intro Wave セクションは、ビームが最初にチャージを開始したときにトリガーされます。Shot Waves セクションでは、ビームがチャージを開始した時にトリガーされるサウンドがありますが、チャージアップ サウンドが完全に再生された後にトリガーされるコンポーネントもあります。

グラフ中央のセクションでは、これらの異なるセクション間のミキシングおよびフィルタリングを処理して最終的な ステレオ ミックス を作成し、そのステレオ ミックスを Output ノードに入力して最終的なサウンドを再生します。

トリガー、パラメータ、および.wav ファイルが入力として機能し、MetaSounds フロー グラフが DSP ノードに基づいて情報を処理し、処理した情報を最終的なサウンド出力にミキシングします。このシステムにより、オーディオ デザイナーは、マテリアル エディタと同等の機能を持ち、一般的なサウンド パラメータだけでなくゲーム内のデータにも対応できるパワフルで柔軟なサウンドのワークフローを利用できるため、単一のサウンド デザイン環境内でゲーム開発チームとより緊密で効率的に作業を行うことができます。

例えば、バトル シーケンスの開発では、時間をかけて Ancient One がビームをチャージする時間を細かく調整するイテレーションを実施しました。他のサウンド デザイン ワークフローでは、ゲームプレイの変更に応じてサウンドをオーサリングをやり直す必要がある可能性があります。sfx_Golem_RobotBlast_met では、再オーサリングするのではなく、MetaSound が ChargeDuration という名称の Time 入力を使用してサウンドの再生時間を決定します。メインのチャージ サウンドは完全にプロシージャルであるため、特定の入力に基づいてその長さを自動的に調整します。

この動作を確認するため、 Inputs リストから ChargeDuration を選択して、デフォルト値の「4.0」秒から変更し、サウンドを再生してみましょう。

ChargeDuration Time input

この機能のおかげで、ゲーム設計チームは、必要に応じて Ancient One のチャージ時間を変更でき、このサウンドを再オーサリングする必要はありませんでした。

この他にも、Audio Parameter Interface (オーディオ パラメータ インターフェース) を使用してゲームプレイ コードから起動できる Triggers など、様々な Input パラメータが用意されています。これらを使用して、開始イベント、停止イベント、中間イベントをプロシージャルに処理する MetaSounds を作成することができます。例えば、銃の発射のようなアクションでは、従来は発射の開始、停止、ループのために複数のサウンドが必要でしたが、このシステムでは 1 つの MetaSound にすべてをまとめることができます。

The StopBeam Event

また、この API を使用して他のオーディオ パラメータを操作することもできます。これにより、MetaSounds は複雑なサウンド エフェクトのためのサウンド再生ロジックを、サンプル アキュレートなタイミングで完全にカプセル化することができます。

MetaSounds の柔軟な設計と無限のバリエーションを誇る能力は、大幅なパフォーマンスの向上によって補完されます。MetaSounds グラフは、個々のサウンド エフェクトが通常デコードされる方法と同様に非同期にレンダリングされ、CPU リソースの処理にはるかに高い柔軟性をもたらします。さらに重要なのは、MetaSounds は本当の意味でのオーディオ レンダリング システムであるため、各 MetaSound はその複雑さにかかわらず、1 つのゲーム内の音声を表します。これは、MetaSounds エディタで聞く再生するサウンドが常にそのゲーム内のサウンドと正確に一致していることを意味し、ゲーム内の音声管理は従来のシステムと比較して、さらに予測可能になっています。また、将来的には UE5 で特定の MetaSounds のパフォーマンスを個別にプロファイリングできるようになるため、オーディオ パフォーマンスを評価するためのワークフローも簡素化されされます。

MetaSounds の詳細については「MetaSounds」を参照してください。

Quartz によるオーディオの同期

通常、ゲームプレイ スレッドとオーディオ スレッドの処理方法が異なると、それらの間のイベントを正確なタイミングで同期させることが困難になります。Quartz では、ゲームプレイ イベントからサンプル アキュレートなオーディオ再生をスケジューリングするためのクロックを提供します。Quartz を使用してサウンドをスケジュールすると、スケジュールされた再生を基準とする特定のタイミングに基づいてデリゲートを設定することができます。Quartz Clock では、そのサウンドの再生のためのイベント デリゲートを提供しているため、ゲームプレイは意図するタイミングを予測し、必要に応じて他のゲームプレイ イベントを同期させることができます。これにより、サンプル アキュレートなダイナミックな音楽システムとオーディオとのシンクロ率の高いゲーム システムを実現することができます。

「古代の谷」 では、Underscore Subsystem というダイナミックな音楽システムで Quartz が使用されており、音楽の拍子や小節に基づいてイベントがスケジュールされています。特に、Ancient One は Echo との対決で、音楽のキューのタイミングに基づいてレーザーを発射するタイミングを選択します。このシステムのクラスは、「Underscore C++ Classes」 に格納されています。

Quartz Underscore Subsystem in Content Drawer

このシステムの音楽は、 UnderscoreCue という名称の専用のデータ アセットに格納されています。UnderscoreCue には、音楽のキューの拍子記号、さまざまな楽節、転調、および音楽の状態やイベントに関するその他の情報のデータが含まれています。Ancient One とのバトルで流れるバトル ミュージックは、 Arena_Battle_Cue アセットに格納されています。このアセットは、 「AncientContent」 > 「Audio」 > 「UnderscoreCues」 にあります。

Arena_Battle_Cue asset Details

これには、この音楽キューを構成するクリップへの参照と、音楽の BPM だけでなく、 Time Signature が含まれています。このデータは音楽の説明で、音楽システムが Quartz Clock を設定し、各セクション間のタイミング トランジションを管理するために使用されます。イントロは、バトル ミュージックのメイン テーマへと転調するように構成設定されており、複数の異なる状態に分かれています。これらの状態は、ゲーム内のさまざまなイベントに基づいて発生し、音楽はビート同期したエンディングで締めくくられます。Quartz により、これらすべてがシームレスで、サンプル アキュレートな精度で行われます。

これらのセクションがゲーム内のイベントとどのように関連しているかの例を見るには、「AncientBattle Content」ディレクトリにある BP_Laser および BP_AncientOne 全体に、このシステムのフックがあります。レーザー自体のロジックに加えて、BP_Laser には、音楽がレーザーをトリガーするのを可能にする Underscore Subsystem にイベントをバインドする呼び出しが含まれています。

UnderScore subsystem music cue for laser in graph

また、Underscore Subsystem への呼び出しも含まれており、ビームの発射が終了したときや Ancient One を倒したときなど、曲の他のセクションに移行するタイミングを音楽に伝えることができます。

UnderScore subsystem music transition cues

これらは、Underscore サブシステムが Quartz を使用して、ダイナミックな音楽システムとゲームプレイとオーディオ間の正確な相互作用を促進する方法のほんの一例です。

最後に

Echo attacking Ancient with Light Dart

このように、Unreal Engine 5 には、大掛かりで忠実度の高いプロジェクトをかつてないほど簡単に構築できる、優れた幅広いツールが搭載されています。「古代の谷」では、これらのツールをすべて使用して、実現可能な価値ある制作のサンプルを提供するとともに、同じツールを使用してゲームの開発プロセスを効率化したケース スタディを紹介しています。UE5 によりデベロッパーは、より少ないステップでビジュアル品質を向上させ、より少ない作業でより広大なワールドを作り出すことができます。さらに、クリエイターをサポートする各種ツールを使用することで、詳細なインタラクションと環境を実現することができます。