こんにちは!Blue Manchuのオーディオ・ディレクター、ライアン・ロスです。私がこれまでに手がけてきたゲーム(『Guacamelee 2』、『The Beginner’s Guide』)を、プレイした読者もいるかもしれません。私はオーストラリアのキャンベラにあるBlue Manchuチームと一緒に『Void Bastards』をつくり、今回私たちの最新作である『Wild Bastards』がリリースされました。
ファーストパーソンシューティングの『Wild Bastards』には、戦略のレイヤーが3層あります。この3つのフェーズ向けにオーディオをデザインする際、プレイヤーがどの画面でどれくらいの時間を過ごすのかを判断し、どのようにプレイヤーを引き込むのかを計画することが重要でした。Wwiseのミュージックエンジンを使うことによって、プレイヤーが1つのフェーズに入るたびに、これまでと違うものが聞こえるようにできます。『Wild Bastards』はダイアログの数も多く、キャラクターをリアルタイムで変えることができますが、そのために活用したのがこれから説明する入れ子式のスイッチコンテナです。
惑星マップ
『Wild Bastards』のアクションの中心となるのはファーストパーソン形式の戦闘ですが、同時にゲームの大きな部分が戦略マップ(惑星マップ)上で展開されます。これはプレイヤーが自分の「移動ポイント」を使い、惑星内を移動するゲームフェーズです。『Wild Bastards』に出てくる惑星の種類は、砂漠、沼地、氷、月、森、そして豪華な荘園風の6種類です。私はそれぞれの惑星に伴奏の音楽や、その惑星固有のBG要素を取り入れることにしました。
敵対的な惑星(月)
最初は1つのステムから成るステレオループを入れましたが、毎回同じものが聞こえるより音楽をプロシージャル(手続き型生成)なものにして、単調な流れを崩した方がよいのではと思いました。ここからが面白いのです。
音楽の準備
最初にWwiseで楽器を個別に再生できるように、各トラックをステムに分ける必要がありました。音楽理論に深入りせずに、すべての音楽でキーとテンポを揃えました。ほかにも、すべてのステムが同じ長さにならないようにしつつ、ダウンビートでカットされるようにすることも重要です。それぞれのステムが同じビートでループしながらも、長さは異なるため、プレイリストコンテナの中で各ステムのはじまるタイミングや終わるタイミングが異なっていても、テンポは正確に保つことができます。この点をこれから詳しく説明します。
ステムの数がかなり多くなりました
ステムをWwiseミュージックエンジンに取り込む
私はプレイリストコンテナを作成し、すべてのステムを1つのミュージックセグメントに入れました。次に、楽器ごとにステムの数と同じだけサブトラックを作成しました。ミュージックセグメントをランダムステップに設定してしまえば、この楽器は準備完了です。トラック内のすべての楽器に対して同じテクニックを繰り返し、各プレイリストコンテナがランダムステップに設定した、1つのセグメントを無限に再生するようにしました。さらに、中身のないサブトラックを1つか2つほど追加したことも重要な点です。これは重いメロディーなどで特に役に立ち、リズム感のある要素においても有効でした。セグメントがランダムステップに設定されているため、Wwiseが何も入っていないサブトラックを選択することもあり、全体が大きく変わることがあります。何も再生しない方が、何かを再生するのと同じくらい面白くなることがあるのです。
Random Stepのステム 空白トラックあり
昼夜のサイクル
『Wild Bastards』の惑星マップには昼夜のサイクルもあります。夜の音は昼間のステムと少し違う音にしたいと考えました。そのためには、昼間サイクルと同じ方法で音楽をステムに分けただけです。楽曲はMIDIデータの多くをそのまま使いましたが、メロディー素材を再生する楽器やサンプルを変えました。
惑星マップの昼夜サイクル
夜用のプレイリストコンテナを準備し、惑星マップの音楽を再生するためのイベントと同じものを使い、ポストしただけです。どうすればすべてが一斉に再生されるのを防げると思いますか?単純に昼・夜サイクルのステートを作成しただけです。各プレイリストコンテナのStatesタブで文字通り、昼間用にポストするプレイリストの夜間ボリュームを「-108」に設定して、夜用はその逆にしました。ステートを切り替える時間のデフォルトは1秒ですが、私はこのゲームにおける昼から夜への切り替えは3秒の方が聞こえがよかったため、3秒に調整しました。少しズルをした気分ですが、とてもよい結果となりました!
ステムDay(昼)のステートNight(夜)は、「-108」に設定
さらに、美しいステレオBGレイヤー(砂の吹く音や風など)をイベントに追加し、惑星独自の背景を加えました。昼夜サイクルを意識して設定しており、昼と夜のステートが入れ替わるとBGも変わるようにしました。鶏の鳴き声や狼の遠吠えのボーナスイベントをこの上に追加し、コード側でステートが切り替わった時に、これもポストされるようにしました。音によるちょっとしたヒントが加わり、1日のうちのいつ頃なのかが分かります。
試してみてください!
ここまで済ませてしまえば、あなたの音楽が入ったたくさんのプレイリストコンテナが揃うはずです。これらをすべて1つのイベントに一緒に入れることで、再生されるステムをWwiseがランダムに選択し、毎回違う聞こえ方がしますが、まとまり感のある1編のトラックとして聞こえてきます。
最高の組み合わせが生まれることもあり、単独の楽器が再生されたかと思うと、次のバーで一気にたくさんの音が入ってくることがあります。惑星マップ内でとてもよい結果が得られました。プレイヤーは戦略を立てようとここで長時間を過ごしても、同じ音を2回聞くことはありません。
Alpine(雪)の惑星マップをWwiseで何度か試聴し、毎回異なることを確かめる
入れ子にしたスイッチコンテナと、キャラクター交代
『Wild Bastards』にはたくさんのキャラクターが登場し、FPSが展開される場面では、特定のタイミングで数多くのダイアログが発生するため、あらゆる形式のアクションに対応する堅牢なシステムをつくる必要がありました。システムをつくりはじめた時はダイアログのさまざまな台詞をカットしながら、どこに配置すればよいのかを判断するのに苦労しました。「ちょっと待って...どういう設定にしたんだっけ?」と迷うことがよくありました。しかしそれも、すすめるうちに慣れました。
私は『Final Fantasy 7 Remake』をプレイしました
『FF7 Remake』のキャラクター切り換え時のダイアログ
上記タイトルから分かる通り、私は『Final Fantasy 7 Remake』をプレイして、戦闘中のキャラクター交代時の流れがとても気に入りました。あるキャラクターから別のキャラクターに移り変わる時、最初のキャラクターが「あとは頼んだ!」みたいなことを言うのです。すると、次のキャラクターが「自分の番だね!」といった具合で返事をします。キャラクターの交代は文脈に沿って行われることもあり、誰かのヘルスが低迷していることもあります。
『Wild Bastards』ではファーストパーソンの戦闘中に似たようなしくみがあり、2人のアウトローキャラクター間で好きな時に交代することができますが、ここで『Final Fantasy 7 Remake』のシステムを少し拝借したいと思いました。
2つのステート
プログラマーに楽をしてもらうには、どのような設定がよいのか?Wwiseでロジックの大部分を行えます。どのアウトローがアクティブで、どれが休止中なのかを判断できれば充分です。はじめに、『Wild Bastards』でプレイすることのできるアウトロー全員(13人)を入れたステートグループを2つ作成しました。1つは“Character”と呼び、これはプレイヤーが制御するアクティブキャラクターとし、もう1つは“Last_Character”と呼びましたが、これは画面外にいる交代可能なアウトローを指します。
キャラクターのステート(使用可能なすべてのアウトロー)
“Vox_Out”(ボイス・アウト)と“Vox_Outlaw_Arrive”(ボイス・アウトロー・到着)というスイッチコンテナ作成しました。交代用のダイアログをすべてここに放り込みました。スイッチコンテナは、“Character”ステートを使用してどのアウトローがアクティブであるのかを選択し、この2つのイベント(Vox_Out、Vox_Outlaw_Arrive)を立て続けにポストします(後者にディレイを適用することで間を取り、お互いに声を掛け合っているかのようにしています。)
Doc CasinoとSpider Rosaが交代しながら呼び合っている様子
ところで、画面外キャラクターのヘルスが低くなっている場合は?私はヘルス低迷時のダイアログを録音してから、大元のスイッチコンテナ内に、さらに2つのスイッチコンテナを入れました。これらは“Fine”(ヘルス良好)と“Low”(低ヘルス)と名付けました。次に“Health”というステートをつくり、2つのステートパラメータ(Fine、Low)を設定しました。その後、各台詞を該当するヘルスステートのスイッチコンテナに入れました。つまり、Wwiseは最初に交代前と後のアウトローのヘルスが低迷していないかを判断してから、ポストするアウトローの台詞を選びますが、これはすべて1つのイベントで済むのです。
入れ子のスイッチコンテナは、上がヘルスステートlowまたはfine、下がアウトローのステート
画面外のアウトローの専用コメント
アウトローたちがアクティブ状態のキャラクターのアクションについて話し、コメントするようにしたいと思いました。基本的にダイアログの収録が済んでしまえば、あとは同じようなスイッチコンテナの入れ子を用意するだけです。ここからが“Last_Character”ステートの出番です。プレイヤーが勝ち技を実践し、その時のアウトローを褒めるダイアログがある場合、どのアウトローがアクティブであり、どのアウトローが話しているのかを知る必要があります。最初のスイッチコンテナがアクティブなアウトローを判断し、次に画面外アウトローごとにある、内部の13のスイッチコンテナから選びます。最下位のスイッチコンテナには、当該アウトローがアクティブ状態の各アウトロー(自分自身を除く)について言うかもしれない台詞が、すべて入っています。これら2つのステートを追えばよく、先ほどと同様に、1つのイベントだけでゲームが正しい台詞を再生します。
上にCharacterステート、下にLast_Characterステートの入っている入れ子スイッチコンテナ
ステート“Character”と“Last_Character”を変えながら、入れ子式のスイッチコンテナを視聴
私のちょっとしたブログを、お楽しみいただけたでしょうか。Wwiseは非常に堅牢であり、『Wild Bastards』の2種類の状況において達成したことは、ほかにも多くのやり方があると思います。
このゲームをチェックしてみたい方は、ぜひSteamをご覧ください:Wild Bastards
それではまた!
ライアンより
コメント