EBP(イベントベースパッケージング)の概要

ゲームオーディオ / Wwiseの使い方やツール

Event-Based Packagingとは?

少し前に、Wwise 2019.2のUE4インテグレーションで、イベントベースパッケージング(Event-Based Packaging、EBP)という新しいアセット管理のワークフローが発表されました。SoundBankの従来のワークフローと異なり、この新しいパイプラインではEventがパッケージングされ、1つのEventの様々なリソースが、1つのSoundBankとしてパッケージングされます。

さて、そんなことをするメリットは?Wwiseの従来のパイプラインでは、ユーザーが自分でSoundBankの編成方法を決めてきました。大規模なプロジェクトでは、編成するのに時間がかかることが珍しくありません。また、手作業で整理して管理するので、リソースを読み込むときに冗長性が生じるのは、ほぼ避けられません。EBPの新しいワークフローでは、あるEventに対応する各種リソースは自動的にSoundBankにパッケージングされ、そのEventの .uasset に格納されます。Eventが呼び出されると、そのEventに対応するメディアリソースだけがロードされるので、結果的に、必要なリソース以外はロードされません。つまり、リソースの冗長の発生も根本的に排除されるのです。また、1つの SoundBank に1つのEventのリソースしか入っていないので、ほかのEventからリソースへのアクセスを妨げてしまう不安もなく、柔軟にアンロードできます。

この記事では、EBPワークフローで使用される主要なリソースと、それをロードするプロセスを紹介し、みなさんが新しいパイプラインを理解できるようにしたいと思います。

EBPとWAAPIの関係

UE4でイベントベースのパッケージングを自動化するには、Eventや、Eventに対応するサウンドメディアとの関係を取得する必要があります。この段階でEBPパイプラインが依存するのが、 WAAPI です。WAAPIは、Wwise Authoring APIの略で、外部アプリケーションとWwise Authoringツールのやりとりを可能にするAPIです。ユーザーはこれらAPIを呼び出してWwiseオーサリングツールを制御できるので、WAAPIはUE4プロジェクトとWwiseプロジェクトの橋渡し役ととらえることができます。

Wwise AuthoringツールでEventを作成すると、登録済みコールバック関数を通して操作を指示されたUE4インテグレーションが、該当する event.uasset を自動的に作成します。同様に、ユーザーがUE4のWAAPI Pickerパネルで、Generate Sound Dataボタンをクリックすると、Wwise AuthoringツールでGenerate SoundBanksの処理が実行されます。EPBのワークフローで、確実にUE4とWwiseプロジェクトを常に同期されるように、 WAAPI が使われます。

SoundBankを生成するには、WAAPIを介してWwiseに接続するのが望ましいですが、これがSound Dataを生成する唯一の方法ではありません。WAAPIを使ってWwise Authoringツールに接続できない場合は、Wwise PickerウィンドウのGenerate Sound Dataボタンをクリックして、 Wwise Console で生成処理を開始できます。この場合、WAAPIよりもシステムI/Oコールが多くなるので生成時間が長くなりますが、出てくるアセットは同じです。また、UnrealのBuildメニューの、Audiokineticセクションにある、Generate Sound Dataダイアログも利用できます。

UE4のWwiseリソース

サウンド開発の過程で、ユーザーはEvent、State、Switch、RTPC、Bank、Auxiliary Bus、そして各種MediaリソースをWwiseで使いこなしながら、プロジェクトの音の世界を構築して編成していきます。これらのリソースはすべて、UE4で「.uasset」として存在し、デフォルトで Content/WwiseAudio/ フォルダに保存されます。プロジェクトのWwiseリソースをどこに保存するかは、UE4 Project SettingsのWwise Integration Settingsセクションにある、Wwise Sound Data Folderの設定で調整できます。

以下の表は、Wwiseリソースの該当するクラスと、UE4内の保存場所の一覧です。

TYPE CLASS PATH
Bank UAkAudioBank Content/
RTPC UAkRtpc Content/WwiseAudio/Game_Parameters/
State UAkStateValue Content/WwiseAudio/States/
Switch UAkSwitchValue Content/WwiseAudio/Switches/
Event UAkAudioEvent Content/WwiseAudio/Events/
InitBank UAkInitBank Content/WwiseAudio/
Auxiliary Bus UAkAuxBus Content/WwiseAudio/Master-Mixer_Hierarchy/
AcousticTexture UAkAcousticTexture Content/WwiseAudio/Virtual_Acoustics/
Media UAkMediaAsset Content/WwiseAudio/Media/
ExternalSource UAkExternalMediaAsset Content/WwiseAudio/ExternalSources/
Localized UAkLocalizedMediaAsset Content/WwiseAudio/Localized/

 

Wwise

リソースから派生したこれらのクラスをオブジェクトにするには、デシリアライズが必要です。デシリアライズとは、バイトストリームをメモリ上のオブジェクトに変換する処理です。次の図は、Wwiseの全リソースのクラス図です。全リソースの派生関係を見ることができます。

ゲームでは、これらのリソースを、開発者がリソースリファレンスやC++コードでロードできます。シーンにドラッグ&ドロップしたオブジェクトや、Componentプロパティで参照したリソースの場合、Componentオブジェクトがインスタンス化されると、その中のWwiseリソースもロードされます。また、これらのリソースは、UE4の LoadObject() 関数を呼び出してロードすることもできます。

エディタで UAKAudioType クラスから派生したリソースをロードするタスクは AkAssetDatabase クラスが行い、このクラスのコンストラクタが onAssetAdded 、 onAssetRemoved 、 onAssetRenamed の3つのEventを登録します。このうち、 onAssetAdded が全リソースのロードを処理する役割を担います。UE4エンジンのエディタを開いてみると、実際に現在のマップのWwiseリソースがすべてロードされています。

media.uasset のロードは、 event.uasset のインスタンス化のときに実行します。ロード処理の詳細については後述します。では、最も重要なリソースである events.uasset と media.uasset の2つを見ていきます。

EBS(イベントベースパッケージング)の概要

ユーザーが一番頻繁に接するリソースは、ゲーム内の様々なEventです。Wwise Authoring ツールのEventと、UE4プロジェクトの event.uasset リソースは、1対1の関係です。Eventを使うのは再生、一時停止、SwitchやStateの設定など、様々なアクションを実行するときです。EBPでは、1つの event.uasset の中に、Wwiseプロジェクトで定義したすべてのプラットフォーム用に、そのEventのコンテンツが入っています。そして最も重要な情報は、Eventが必要とするSoundBankやメディアリソースのパスです。SoundBankにはメディアリソース自体はなく、EventやStructureのデータしか入っていないので、 event.uasset ファイルは大きさが数KBほどしかありません。メディアリソースのパスは、メディアリソースを探したりロードしたりするためのベースとなります。

media.uasset のコンテンツ

異なるEventから、同じオーディオファイルが参照されることがあります。よくあることで、リソースの冗長性につながりかねません。 event.uasset 間でサウンドファイルを共有できるように、すべてのメディアがSoundBankから取り除かれてデフォルトで、 ContentWwiseAudio\Media\ フォルダに別途保存されます。Wwise Authoringツールの整理方法でいくと、Eventが依存するAudio Soucreごとに media.uasset ファイルが用意されています。 event.uasset, media.uasset ファイルで説明したとおり、すべてのプラットフォームのコンテンツが1つのファイルにまとめて入っています。ユーザーが新しいプラットフォームを追加したとき、そのプラットフォームのメディアがファイルに追加されると、 media.uasset のファイルサイズは大きくなります。

メディアリソースはIDで指名されます。該当するMediaNameを探す場合は、UE4のContent Browserで Content\WwiseAudio\Media を開き、列に表示できます。

Wwiseリソースのロードプロセス

最も重要な2つのリソースであるevent.uassetとmedia.uassetの中身が理解できたところで、これらをロードする手順を見ていきます。 SoundBank とメディアは別々に保存されるので、リソースをロードするときは最初にSoundBankをロードし、続いてそれが参照するメディアをロードする必要があります。

Soundbankのロード 

Wwiseでは、Eventが依存するSoundBankを、 PostEvent をコールする前にロードする必要がありますが、EBPの場合も同じです。 event.uasset をロードするときに、 SoundBank 、つまりすべてのEventやStructureが、自動的にロードされます。なお、EBPでは event.uasset がインスタンス化された時点で、 SoundBank はすでにメモリにロードされているので、そのロード済みSoundBankがある場所は、Wwiseが予約したメモリではなく、UE4の予約メモリであるということに注目してください。Sound Engineは、メモリアドレスを、SoundBankのロードを行う AK::SoundEngine::LoadBankMemoryView() 関数に対する引数として受け取ります。

必要なメディアのロード

SoundBankのロードが完了すると、 media.uasset がロードされます。ここではメディアを、 event.uasset に保存されたメディアリソースパスを通してロードします。そのためSoundBankと同じくUE4の予約済みメモリにあります。

EBPパイプラインでは、メディアをロードするのに PrepareEvent を使いません。代わりに SetMedia() 関数を通して、メディアリソースのメモリ場所をSoundEngineに提供するのです。どの media.uasset もインスタンス化されるのは1回だけなので、データが重複して読み込まれる心配はありません。 

まとめ

このブログの目的は、EBPというアセット管理ワークフローで取り扱う主なリソースと、それをロードするプロセスを紹介し、新しいパイプラインを分かりやすく説明することでした。EBPパイプラインは比較的新しいので、今後のリリースに合わせて更新や改善が予想され、この記事の対象にも変化があるかもしれません。とはいえ、SoundBankの管理を自動化することで、ゲームオーディオの開発時間やコストが大幅に削減できると信じています。EBPがこれからさらに成熟して安定するにつれ、多くのゲーム開発チームの役に立つことと思います。

FAN RUNPENG(范润鹏)

フィールドエンジニア - 中華圏 • R&D

Audiokinetic

FAN RUNPENG(范润鹏)

フィールドエンジニア - 中華圏 • R&D

Audiokinetic

一流のミドルウェアや最適化されたワークフローを熱心に提唱。実用的なソリューションの提供にも力を注ぐ。一方で、料理に強いこだわりを持つフィールドエンジニアとして、テクノロジーが珍味のように共有されることを喜ぶ。

コメント

Replyを残す

メールアドレスが公開されることはありません。

ほかの記事

『NieR:Automata』における空間音響表現と多様なゲーム性に対応するWwise制御 (Part 1)

18.6.2019 - 作者 PlatinumGames Inc.(プラチナゲームズ株式会社)

新しくなったPositioning: Wwise 2018.1で機能強化

Wwise...

30.7.2019 - 作者 ギヨーム・ルノー(GUILLAUME RENAUD)

フルプラットフォームアクセスとサウンド無制限のインディー開発者向け無償Wwise~提供目的と申し込み方法について

みなさん、こんにちは! Audiokineticライセンス担当のマイクです。今回こちらのブログで私が 4月に公開した動画...

21.9.2022 - 作者 マイク・ドラムルスミス

WAQL 2.0

WAQL(Wwise Authoring Query...

22.8.2023 - 作者 ベルナール・ロドリグ(Bernard Rodrigue)

『ウェイワード ストランド』のボイスオーバーのパイプライン パート1

『ウェイワード ストランド(Wayward...

26.9.2023 - 作者 メイズ・ワーリン

ゲームにおけるオーディオGameObjectの管理

I. はじめに GameObjectはWwiseでオーディオデザインを行う際の基礎となる概念です。Wwiseの基本機能(特にProfiling機能)からWwise...

16.1.2024 - 作者 徐巍