« 11-11 : Memories Retold » は第一世界大戦中の西部戦線を舞台とするナレティブゲームで、2人のキャラクターを追います。ハリーは従軍カメラマンの若いカナダ人。クルトは子持ちのドイツ人男性で、行方不明の息子を探して戦場に出向きます。プレイヤーは2人のキャラクターを交互にプレイします。シューティングゲームではなく、戦争の影響を受ける両陣営の人々や、2人のキャラクターについての話です。「探検」と「ナレーション」のシーケンスが交互に入れ替わり、3人称視点で語られます。
ゲームを開発したのはフランス・モンペリエのDigixartと、イギリス・ブリストルのAardman Animations、そしてパブリッシャーはバンダイナムコです(2018年11月9日リリース、PC、PS4、XboxOne対応)。ビジュアルが独特で、絵筆のようなエフェクトを使いリアルタイムにゲームをレンダリングし、まるで生きた絵のように、何千もの筆の動きでゲームが描かれます。
声優は、イライジャ・ウッド(Elijah Wood)がハリー役、そしてセバスティアン・コッホ(Sebastian Koch)がクルト役です。音楽のコンポーザーはオリビエ・ドリヴィエール(Olivier Deriviere)。オリビエ・ランケット(Olivier Ranquet)が貴重なアセットを提供してくれ、アントワン・シャブロー(Antoine Chabroux)がサウンドインターンでした。私は主にオーディオのテクニカル面を担当しました(Wwiseのプロジェクトマネジメント、WwiseとUnityのインテグレーション、カスタムオーディオツール、一部のSFXとフォリーデザインなど)。
このゲームのオーディオ管理にWwiseを選択したのも当然で、その理由は次のとおりです:
- マルチプラットフォームゲーム: プラットフォーム別のコンバージョン(変換)やストリームマネジメントのほか、プロファイリング、最適化、デバッグなどを、効率的に管理できました。
- 別々の場所にいる2人のキャラクターの間で切り替える(ゲームの大きな特徴)ために必要なロジックの管理機能が、すでに組み込まれていました。
- 開発チームは少人数で、私はリモート勤務: 独立して仕事をすることが私にとって大切で、Wwiseはプログラマーの負担も軽減してくれました。
初期の作業
DigixArtとAardmanがこの規模のゲームに取り組むのは初めてで、開発チームも集結したばかりでした。Wwiseで作業するためのオーディオパイプラインはなく、Unityで使うビジュアルスクリプティングツールには、Wwise用のノードが作り込まれていませんでした。私に声をかけてくれたのが初期の段階だったので、私たちは、しっかりとしたプロダクション前の期間をもつことができました。忙しいプロダクション期間が到来する前に、納得のいくオーディオパイプラインを準備することが、目標でした。
« 11-11 : Memories Retold »のエクスペリエンスを牽引するのが、ストーリーです。分かりやすくて上手く作り込まれたナレーションが不可欠でした。そこで、私がまず取り組んだことの1つがWwiseとUnityの間のテキスト読み上げ機能の開発で、これを使えば、レベルデザイナーがボイス(ボイスオーバー(VO)、またはダイエジェティック(diegetic)ダイアログ)を基に、ゲームのペースを調整しながらデザインできます。
ここで私はベルナール・ロドゥリグ(Bernard Rodrigue)の WAAPI サンプル に出会いましたが、これはSound VoiceオブジェクトのNotesに従い、ロボット音声のオーディオファイルを生成してくれるものです。まず自分のローカル環境で試してから、機能の便利な部分をプログラマーに説明したり指摘したりして、以下のような大型システムを作成してもらいました。
- ライター陣がスプレッドシート上で作業をし、毎日、このドキュメントを更新します。
- カスタム設定した « オーディオスプレッドシート » を作成し、ダイアログの番号や、セリフを、ここにインポートしました。(下表参照)
- 次に、このタブ区切りドキュメントをWwiseにインポートし、Sound Voiceオブジェクトを作成し、名前にダイアログの番号を入れ、セリフをNotesに入れました。列を1つ追加し、Play_ イベントが、正しいWork Unitの中に作成されるように設定しました。
- 続いてWAAPIが、新しく作成したSound VoiceのNotesを読み上げてロボット音声を生成し、これに対応するSoundbanksを生成してくれました。
以上を全て自動化してバッチファイルにし、毎朝、自動的に実行させました。このシステムのおかげで、レベルデザイナーも私も、常に最新ダイアログのセリフを使って仕事できました。これは、ボイスのレコーディングセッションが始まる前にゲームのペースを把握するために、必要不可欠でした(もちろん、ゲームに本物のボイスを入れてから部分的に調整しましたが、このシステムがあったおかげでかなりの時間を節約できたのは、間違いありません)。
« Wwiseにインポートされる、自動オーディオ用スプレッドシートの例 »
プロトタイプをプレイして、ゲームデザインの詳細ドキュメントを研究した結果、ゲームエンジンからWwiseに渡す必要のあるデータを、一覧にまとめることができました。
私のニーズの多くを網羅したリストを、ここに紹介します:
- キャラクターのSwitch : 各キャラクターに固有なもの全てに関して
- キャラクターのStates : グローバルなもの全てに関して(アンビエンス、ミュージックなど)
- キャラクターの姿勢のSwitch(しゃがむ、走る、登るなど): 動作のフォーリー用に便利
- フットステップ用のマテリアル(素材)のSwitchと、マテリアル検知システム
- キャラクターのスピードのRTPC
- AkListenerのポジションのRTPC(X・Y・Z)
- ゲームの様々な機能に対応する、十数個のStates: NPC Dialogue On/Off、Cinematic On/Off、Voiceover On/Off、Puzzleビュー On/Off、Menu On/Off、GameView(PuzzleView / ExplorationView / CameraView / CardGameViewなど)
- そして、コアとなる複数のEvents : Level_Start_ イベント、Level_End_ イベント、Menuイベント、Pauseイベントなど
プログラマーに手伝ってもらい、これらのデータをプラグインし、各キャラクター(メイン、NPC)にアタッチするジェネリックなC#スクリプトを開発しました。全てのゲームプレイの要素(パズル、ハリーのカメラなど)にもジェネリックなスクリプトを付け、パズルやゲームの現在のステートをWwiseに送り込みました。
レベルデザイナーがNPCやパズルを追加すると、追加された新しい要素に対し、Wwiseで構築したロジックシステムが全て自動的に適用されました。私が何かを編集したり追加したりする必要があれば、雛形の親を変更するだけで、レベルにある、全ての子が、更新されます。
つまり、私は初期の段階から関与できたことで、ジェネリックでありながら適応力のあるシステムを構築する時間を充分にとれ、プロダクション中にインテグレーションを実行するための時間を確保できたほか、デバグプロセスが楽になり、インタラクティブミックスを作り上げながら進めることができました。
インテグレーションと、インタラクティブシステム
全てのダイエジェティックボイスに、私は2つのAttenuation Sharesetsを用意しました。1つはリアルで、現実の減衰をシミュレーションしたもの。もう1つは、とても長いスロープを設定し、ボイスが完全に減衰(フィルター)されることがなく、常に言葉を聞き取れるようにしました。Sound Voiceを、どちらかの減衰シェアセットと一緒に、ドラッグしてActor-Mixerにドロップするだけで、プレイヤーが何をしていようが、一番重要なダイアログが必ず聞き取れるようにできるのです。
ボイスオーバーが発生するのは探検中やシネマティック場面、そしてパズルなど、あらゆるタイミングです。ボイスオーバーのシーケンス中に、ほかの多数あるオーディオイベントも起きる可能性があり、肝心な情報が聞き取れない事態も考えられます。そこでボイスラインをコールするためにカスタムノードを設定しました。これを使い、そのボイスラインがナレーション(ボイスオーバー)なのか、ダイエジェティックなのかを設定し、複数のWwiseイベントを続けて再生できるようにし、イベントとイベントの間や、全てのイベントの終了後に、異なるアウトプットを出せるようにしました。
«DialoguesまたはVOを再生する、カスタムノード »
設定を « Narrative » にすると、以下のようにWwiseで違う設定がトリガーされ、ミックスに影響します:
- 最初のVOイベントの冒頭で、VoiceOver StateをOnに設定し、ノードの最後のイベントが終了した時点で、Offに戻します。このStateでは、VO以外の全てがダッキングされ(Busレベルにて)、ハイパス・ローパスと組み合わせます。このカスタムノードを使い、レベルデザイナーはVOイベントを細かく個別に設定することができ(VOのセリフの追加、削除、切り替え)、同時に、どのVOが何個再生されていても、ジェネリックかつ一貫したナレーションミックスを維持できるようにしました。私はAuto-duckingよりもStates機能を採用することを選びましたが、理由は、VOバスでオーディオが一切再生されていなくても、このミックス設定を適用する必要があったからです(例えば、VOラインとVOラインの間に、長いディレイを適用するときなど)。
- RTPC_Voice_Over_Effectを1に設定 : このRTPCは、0(再生中のVOがない状態)から、1(VOを再生中)までの間を、変化します。このRTPCが、音楽、アンビエンス、SFXのバスのコンプレッサのスレッショルドなどを下げ、VOの上に大きな音が重なるのを回避します。
VoiceOverというStateで、Musicバスを3 dBから下げます。当然、フルオーケストラの演奏中は、これでは下げが足りません。音楽のボリュームを下げ過ぎずに、VOがよく聞こえるようにするために(同時に、音楽が聞こえたり聞こえなくなったりするのを避けるために)、EQを使い、VOの最も大事なフリーケンシ部分を、フィルターで音楽の方から除きました。VOバスのメーターにRTPCを1つアサインして、このRTPCに2つのフリーケンシバンドをゲインと連動させました。オーケストラの音量が大きい時に、ダッキングし過ぎずにVOを通すために、これが非常に役立ちました。
« MusicバスにEQを適用し、VOメーターが2つのフリーケンシをダッキングする(Qが大きいもの) »
ゲーム中に、プレイヤーが猫をコントロールする場面があります。アニメーションのタイムラインにWwiseのイベントを入れてもフットステップが上手くいかなかったのですが、これはアニメーションの速さがプレイヤーのインプットによって変化し、フットステップの « リズム » が一定でなかったためです。
フットステップをもっとしっくりさせるために、私はContinuous/Loopモードのランダムコンテナを採用し、Trigger Rate値を、猫のスピードに連動させました(ボリュームやピッチも同様)。Playbackイベントは、コードで対応しました。Play_ イベントは猫スピードが0よりも大きい時に発生し、Stop_ イベントは猫スピードが0に到達した時点でコールするようにしました。
音楽
コンポーザーのオリビエ・ドリヴィエールは、このプロジェクトに最初から関わっていました。彼の作曲した音楽は美しく、ゲームで重要な役割を果たし、多くの感情を表現します。音楽がナレーションのガイド役であり、後ろ盾であり、クルトやハリーの気持ちを強調してくれます。演奏はフィルハーモニア管弦楽団で、レコーディングはアビーロードスタジオで行われました。
« アビーロードスタジオにて、レコーディング中 »
ゲームの構成からして、複雑なインタラクティブミュージックのシステムは必要ありませんでした。実装の作業は、主に音楽とナレーションのタイミングを正確に合わせ、目的を達成することでした。最もシンプルな方法で行い、メインのSwitchコンテナを1つ設け(ゲームスタート時に再生)、Set Statesアクションを様々なイベント(Level_Start、VOイベントなど)や、ビジュアルスクリプティングツールに入れました。
«クリエイティブプロセスとレコーディングについて語るオリビエ»
サウンドトラック完全版を ここ で聞けます。
ミックス
Wwiseが提案するインタラクティブミキシングの方式が複数あるなか、HDRは、今回のゲームのジャンルに合わないため検討しませんでした。(今回は、流れがかなり決まっていて、同時進行のイベント数が制御されています。)私が使ったのは、カスタム設定のサイドチェイン、State機能、そしてAudo-Duckingの組み合わせです。Auto-DuckingでなくStateダッキングを使うかどうかは、ダッキングバスを通過するオーディオが無いときも、ダッキング状態を維持したいかどうかによって、決めました。ダッキングは毎回、-2から-6 dBの間のボリュームを適用しますが、それ自体は大きくなくても、これらの値が状況によって蓄積されることもあり、それが最終的なミックスになります。
«単純化されたミックスシステムの仕組み »
StatesをAuto-Duckingの代わりに使うことで、特定の音に対するダッキングの度合いを強くしたり弱くしたりできます。例えば、あるSound SFXのダッキングを軽くしたければ、VoiceOVerというStateをそこに追加し、バスのレベルで適用されるボリューム減やフィルター結果などを補います。ダッキングを強めたい音に関しても、同じです。
また、組み込みのAzimuthパラメータをRTPCに連携させ、AkListenerの視界よりも後方に回り込んだエミッターもダッキングさせました。ミックスをきれいに維持し、プレイヤーの注意力がずれないようにするために、役立ちました。(AzimuthパラメータをPitchカーブに連携させるのも、かなり便利で、例えば上空を飛ぶ飛行機のドップラー効果のシミュレーションなどに使いました。)
« AzimuthのRTPCフィルタと、ボリュームカーブ »
まとめ
« 11-11 : Memories Retold »はストーリー性のあるナラティブゲームで、音楽やボイスオーバーが、オーディオの中心的な役割を担っています。これを念頭に、Wwiseを使ってジェネリックかつ適用力のある、インテグレーションしやすいシステムを作り上げ、オーディオでストーリーを伝えたりプレイヤーの感情を引き起こしたりしました。
コメント