『Headbangers: Rhythm Royale』は世界初のオンラインミュージックゲーム競技です。ほかの29人のプレイヤーと共に、激しい音楽とリズムのバトルを繰り広げてゆくゲームです。制作過程での困難は計り知れませんでした。この記事では苦労した点をいくつか紹介し、どのように制限事項に対応したのかを説明します。
オンラインで同期
私たちは『Headbangers』の30人のプレイヤーたちを、ユニークな方法で同期させています。このゲームはキャラクターたちの空間内の動きやアクションをベースにしているのではなく、音楽イベントに対するキャラクターの反応に基づいています。そこでクライアントとサーバを、音楽とその進行状況に同期させることにしました。
時間や検証はサーバ側で管理するため、プレイヤーがネットワーク時間と同期していない時はそれを検知できます。タイムラグが100ms以上となった場合はプレイヤーの再同期が行われ、音楽の再生ヘッドの位置が実質的に動き、プレイヤーはちょうどよいタイミングに合わせて同期されます。ネットワークが広範囲で最適化されているため、このような再同期が必要となることは非常にまれです。
以上をWwiseで実装しようとした時、大きな問題に直面しました。私たちが考えたこの方式に対応するようにWwiseは設計されていません。Wwiseにはネットワークのタイム指示に従い、音楽やサウンドの再生ヘッドを前後に動かす簡単な方法がありません。
私たちは(基本的に偶然に)あるトリックを思いつきました。トランジションシステムを利用して具体的なルールをつくるという方法です。スイッチコンテナのTransitionsタブで、ある曲からその曲自身へのフェードなしのImmediate(即時)トランジションをつくることにより、再生ヘッドを思い通りに動かせることに気づきました。
この方式をゲーム全体で適用するのは、かなり面倒でした。『Headbangers』には何千ものミュージックセグメントが含まれ(50時間以上の音楽)、この処理をゲームのすべてのミュージックセグメントに適用しなければなりませんでした。これが次の話に繋がります。
SoundBankの管理と最適化
Wwiseに格納した音や音楽の数は膨大であり(合計数万件ほど)、ビデオゲーム史上、サウンドコンテンツの最も多いゲームの1つであることに間違いありません。すべてのコンソールとPC向けにリリースを予定していたため、メモリやSoundBankの管理は非常に困難でした(特にSwitchでは)。
このような問題は、できるだけはやく対処することをおすすめします。私の場合、開発プロセスの終盤になってこの懸念点を検討する必要が出てきたため、アーキテクチャを完全につくり直すしかありませんでした。
『Headbangers』には23の「ミニゲーム」があります。最終的に、ゲームのSoundBankを24に分けることにしました。ミニゲームごとに1つのSoundBankを設け、さらに汎用SoundBankを1つ設け、ここに全ミニゲームに共通するサウンドと、メニューのサウンドと音楽を入れました。サウンドをSoundBankにこのように分割するという判断はメモリ管理上、重要なポイントです。これらをすべて最適化するために、ゲーム内にある1つ1つのサウンドの用途と場所について、時間をかけて考えました。
同様の省スペースと省メモリの精神で、コンバージョンも最適化する必要がありました。そこでWwiseでいくつかのコンバージョンパラメータを作成しましたが、一部はSwitchなどの特定プラットフォーム専用となっています。SwitchコンソールではすべてのサウンドエフェクトをADPCMに変換することにより、品質への影響を最小限にしてスペースを大幅に節約することができ、Vorbisで音楽(ゲームのキー要素)の最適な結果を維持することができました。
プレイヤーのアクションとオーディオフィードバックを同期
多くのゲームではプレイヤーがボタンを押した瞬間から、その行為のフィードバック音が返されるまで、一定のレイテンシが許容されます。『Headbangers』はこのレイテンシを許容することが不可能でした。実際、音楽ゲームでボタンを押してから音のフィードバックまでの時間が長いと、プレイヤーの感覚全体があやふやになってしまいます。
そこでゲームプレイに直接関連する特定のサウンドに、ストリーミングパラメータを適用することにしました。サウンドをストリーミングするように定義すると、サウンドをよりすばやく呼び出せるようになるため、オーディオの遅延が短縮されます。次に大切なのは、各サウンドのPrefetch長を設定し、ソーススターベーション(音源枯渇)やタイミングの悪いオーディオカットを回避することです。
『Piano Mezzo Forte』というミニゲームでは、ハトがバックグランドミュージックに合わせて歌を歌います。私たちは各ノートの各ニュアンス(ピアノ、メゾ、フォルテ)のイベントを作成し、その特徴や時間に合わせてPrefetch長を設定しました。もし最終的な結果が本当にくだらなかったとしても(私たちはそれを望んでいました)、ほぼパーフェクトに同期させることが最重要であり、それは以下の動画を見ても分かると思います。
ダイナミックなメニューミュージック
私はWwiseでダイナミックミュージックを簡単に制作できることが特に気に入っています。
この観点でいうと『Headbangers』はさほど必要とするゲームではありませんでしたが(細かい台本のあるゲームです)、メニュー用にダイナミックに変化し続ける音楽を制作することは大変楽しく、プレイヤーも必ず喜んでくれます。
メインメニューにはタブがいくつかあり、ゲームのメニューの種類を表しています。タブにホーム、プログレス、チャレンジ、カスタマイズ、ショップ、オプションなどと表示されています(以下の動画参照)。
このダイナミックミュージックのエフェクトのつくり方は簡単です。メニューごとに1曲ずつ作曲しましたが、その時の条件として、曲のテンポ、長さ、和声進行が全曲揃うようにしました。次にWwiseのトランジション機能でImmediate(即時)にSame time as playing segment(再生中セグメントと同じタイム)というトランジションルールを作成し、最初の曲中のあるポイントから別の曲の同じポイントに、スムーズかつ効率的に遷移するようにします。
一貫して設定がとてもシンプルですばやく、常に満足できるエフェクトを出してくれます。『Headbangers』の多くの課題を解決する上でWwiseが非常に役に立ち、私たちはWwiseが本当に信頼できる丈夫なオーディオエンジンでありながら、コンポーザーやサウンドデザイナーにとって使いやすく手ごたえのあるオーディオエンジンであると思います。
コメント