【前編】はこちら>>



2. 多様なゲーム性へ対応するWwise制御

最初にお話ししたように、本作ではカメラポジションが通常のバックビューに加え、トップビュー、サイドビュー、シューティングビューなど頻繁に切り替わるので、音響空間表現もそれらのあらゆる変化に対応する必要がありました。


・リスナーポジションをインタラクティブに切り替える

先ず、基本となるデフォルトのリスナーポジションをどこに配置するのかという問題ですが、どのカメラアングルにおいてもアクションの爽快感が損なわれないようなバランスを目指した結果、プレイヤー付近にデフォルトのリスナーポジションを配置することがベストだという考えに至りました。

プレイヤー付近に配置することで、カメラがどのようなアングルになろうと、基本的なMIXバランスや、アッテネーションなどは大きくずれることはないので、ユーザーは特に違和感なくゲームをプレイすることができたのではないかと思います。

デフォルト リスナーポジション

シューティングを除くトップビュー、バックビュー、そしてサイドビューのほとんどは、デフォルトのリスナーポジションでカバーすることができましたが、カットシーンなどは、演出上特別な対応が必要な箇所がありました。

こちらのシーンは、2B達が劇場で敵である機械生命体の演劇を観る、という少し特殊なシーンになるのですが、プレイヤーから劇が行われるステージまで距離があるので、リスナーポジションがプレイヤーの位置のままだと、演劇の音が狙った音量バランスになりません。このような場面に対処するため、リスナーポジションをサウンドデザイナー側から、必要に応じて切り替えられる機能を用意しました。

ステージからプレイヤーまでの距離
(小さく見えていますが赤い点がリスナーポジションです)

リスナーポジションをデフォルト位置からステージの中央付近に移動
(プリセットNO.11)

このように複数のリスナーポジションのプリセットを用意しておき、サウンドデザイナーが任意に指定したエリア位置や、WwiseEventから切り替えられる仕組みになっています。

上記のシーンでのWwiseEventの操作画面
(リスナープリセット切り替え中)

またリスナーポジションの切り替えの際に、3D配置の音飛びが出ないよう、パラメーターを調節し補間処理を行っています。特にディレクターのヨコオさんは、こういった、いわゆる繋ぎの部分での音のシームレスさにもこだわりを持たれていたので、ゲーム全体を通して、違和感のない音の繋ぎを目指しました。



・特殊なアッテネーション
 
アッテネーション設定においても、特殊なカメラアングルに対応するために特別なアッテネーションカーブで対応しているものがあります。

こちらのシーンは、カメラがプレイヤーから大きく離れ、ステージ全体の広さを見せつつ、ゲームプレイが進行するという場面の実際のゲーム画面ですです。ほとんど見えないですが、画面中央の赤い小さな点の場所にプレイヤーがいます。リスナーポジションについては、デフォルトのプレイヤー付近よりも遠い位置に配置し、音自体が少し遠目に聞こえる演出にしています。

プレイヤーキャラクターと、リスナーポジションとの距離
(右下の赤い丸がリスナーポジション)

リスナーポジションとプレイヤーまでの距離は常に固定されているので、少し離れたイメージの音量バランスは保たれますが、敵キャラクターとの距離は通常の想定よりも大きく離れているので、この状態ではすぐにアッテネーション外になってしまい、敵キャラクターのSEはほとんど聞こえなくなってしまいます。

リアルに考えると正しい挙動なのですが、ユーザーが敵キャラの存在に気付けなくなってそれがストレスになることがあります。(グラフィック的にも、離れているのでキャラクターが小さく、視認が難しい)

そこで、少し特殊なアッテネーションカーブを用いて、一定以上の距離は減衰しないよう設定することで、ユーザーが音で感じる違和感を補間する処理をしています。



・多数の音源の発音制御

最後に、本作で採用した発音制御システムを紹介したいと思います。この作品は、シーンによって多くの敵キャラクターが配置されるため、全ての音を素直に鳴らしてしまうと、CPUが足りなくなってしまいます。

同時に発音される音は、常に50~60音の間で推移するよう調整し、発音の制御については、大きく2段階に分けて行いました。

  1. ゲームプログラムが、WwiseにEventのコールを行う前の段階での制御
  2. Wwiseが、Eventを発音してからの制御

「2」については、Wwise内での、VoiceLimitや、DistanceによるPriorityで制御するといった、一般的なものですので、今回は、「1」の制御についてご説明したいと思います。

大きく分けて、カリング機能、通過音制御、同時発音制御と分類される3つの機能をメインに使用しており、これらはWwiseのEventをコールする前に処理されます。この工程を入れることで、Wwiseに大量の不要なWwiseEventの命令が送られ、Wwiseがhang upするのを防いでいます。

また、これらの機能はWwiseのそれぞれのEventもしくはアッテネーションのパラメーターのメモ内にコマンドを書き込むことで制御が可能になります。

アッテネーションへのコマンド記述の例
(カリング: –C、同時発音制御:–L2)



・カリング制御

先ず、アッテネーションのMax distance より遠くで発音される音を、カリングする処理が入ります。多くのアッテネーションパラメータに書き込まれています。

コマンド パラメーター 内容
-C [level] [distance] level 0-15 (def 1), distance 0-65535 (def 0) level を 1 以上に設定すると Maxdistance より遠くで発音されるイベントが呼ばれなくなります。また、distance より遠くで発音するイベントが概ね level 回に 1 回呼ばれるように間引かれます。性質上 -P との共存はできません。



・通過音制御

次に、通過音制御になります。今作では待機ループSEなどの制御に使用しており、敵の浮遊音などのループSEがそれにあたります。これらのキャラクターはMax distanceより遠くで配置されることも少なくないので、その場合は上記のカリングは使用せず、WwiseEventが遠くでコールされた場合でも、実際のWwiseEventのコールをMaxdistance内になったタイミングでコールされる仕組みを入れています。

コマンド パラメーター 内容
-P [distance] distance 0-65535 (def Maxdistance) イベントが遠くで呼ばれた場合に、実際のイベント起動を distance まで近づいてから行うようになります。性質上 -C との共存はできません。



・同時発音制御

最後に、MaxDistance内の距離でコールされるものの内、大量に同時コールされそうな特定のWwiseEventについて、発音制御を設定します。指定したフレームより短い時間内に同じ名前のWwiseEventが繰り返しコールされた場合に、後から発生したものをコールしないよう制限をかけています。

コマンド パラメーター 内容
-L [frames] [target] frame 0-63 (def 1) target g or o (def g) frames を 1 以上に設定すると、同じ名前のイベントが frame で指定したフレームより小さい間隔で呼ばれた場合に、後から発音した側を呼ばないようにします。target に o を指定した場合は同じオブジェ(パーツ番号は問わない)から呼ばれた場合のみに制限がかかります。

これらの制御は、プログラマーの手を介さず、全てサウンドデザイナーが自ら設定・調整することが可能で、この仕組みを確立することこそ、最も重要視した点でした。




3. オーディオをよりインタラクティブに表現する
オリジナルWwise Plug-in



・LoFi Plug-in

lo-fi 処理は割と一般的ですが、不快にならない lo-fi 感を出すのは難しく、こういった表現を自由に行えるようにするのは、リアルタイムオーディオの役割の一つだと思っています。

実際、『NieR:Automata』でのlo-fi のエフェクトは、通信時の音声やプレイヤーの感覚に異常が起こった時の演出など、非常に多くの場面で使用していますが、エフェクト自体の動作がとても軽く作られているので、多くのAudio busやActor Mixerにインサートしています。また、lo-fiエフェクトはMultiエフェクタープラグインの一部であり、実際は下記のように、ディストーションや、フィルター、フランジャーなど、いくつものエフェクトの機能を兼ね備えたプラグインとなっています。ハードウェアのギターエフェクターなどの制作経験がある木幡らしい、シンプルな操作感で音はしっかり変わるという、サウンドデザイナー目線でもありがたいコンセプトで作られています。

プレイヤーキャラの2Bがウイルスに汚染されていく演出の際の、LoFiのパラメーター
※左が汚染レベル0で、右に行くにつれ汚染レベルが上がり、loFiのかかり具合が強くなる。

lo-fi の DSP を図で表すとこちらのようになっています。モノラルの場合の図ですが、多チャンネルある場合にはチャンネル毎に同じ処理を行います。

lo-fi DSP Diagram



・lo-fi処理の流れ

  1. サンプリングレートを一旦半分の 24kHz に落とす。
    (これは処理負荷の軽減と lo-fi なので高レートが不要なため)
  2. 前回値に一定量近づけた後、Quantize処理を行う。
    (前回値に近づけるのは、Quantize によるノイズ感やザラザラ感が強く出過ぎてしまうのを防ぐため)
    ※前回値に近づける量を増やすと、音の途切れ途切れ感が増し、Quantize を粗くすると、音のノイズ感やザラザラ感が増します。全体としては単純な作りになっているのですが、前回値に近づける処理がポイントになります。
  3. サンプリングレートを戻して、Outputする。

このように一見ありふれた処理でも、ひと工夫加えることで、没入感のある雰囲気を作り出すことができます。



・Voice Changer Plug-in

インタラクティブな表現とは異なりますが、このVoice Changerも本作の世界観を表現するうえで重要なWwiseプラグインです。ゲーム内で特定の条件を満たすと、オプション設定から、操作プレイヤーのボイスにエフェクトをかけることが出来るようになるという仕組みです。

2B達はアンドロイドなので、設定によって声を変えることもできるだろうという考えの元、ピッチのシフトだけでなく、ロボットが話しているようなイメージなど、様々なバリエーションを作れるものを目指しました。

ピッチシフター、タイムストレッチ、グリッチエフェクト、ピッチコレクトなど、複数の機能を組み合わせたエフェクターです。

実際のゲームでは11種類のプリセットを用意しましたが、ユーザー目線で変化がわかりやすく、そして効果が重複しないようパラメーターの値を決めました。このプリセットを決める作業は楽しくもあり、苦労した点でもあります。市販のエフェクターやシンセのプリセットを考えておられる方を尊敬します……。

本作でのボイスチェンジャーの設定パラメーター



・機械生命体ボイスエフェクト

Wwiseとは直接関係ないのですが、聞かれることも多いので、機械生命体のボイスエフェクトのメイキングをご紹介させていただきたいと思います。

本作で敵キャラクターとして出てくる機械生命体のボイスには、それぞれロボットをイメージさせるエフェクト加工がされています。その肝は、ピッチを揃えるロボット加工ですが、ピッチコレクトエフェクターは色々なメーカーから発売されており、選択肢も幅広く、いくつか試してみました。最終的にはNuendo付属のPitchcorrectを採用したのですが、それ以外も性能面では問題なく、きっちりとピッチを揃えることが出来ました。

Nuendo付属のものを採用した理由は、他のものに比べ、元音のピッチの揺れ具合によって少し癖のある音がゆらぐようなかかり方をすることがあったのと、Formantの機能が他のものにはないデジタル感もあり、人間臭さも感じるような良いかかり方をしたからです。ピッチが揺らぐ感じは、機械生命体達が人間を模倣しようと、なんとか頑張ってイントネーションを再現したようにも感じられました。

・機械生命体のボイス加工に使ったプラグイン

個人的にはここが重要なポイントでした。クールで感情を出さないアンドロイドの2Bとは逆に、敵キャラである機械生命体は、ロボットだけど温かさや感情を感じられるものにしたかったからです。

実は、機械生命体のボイスは、音声収録の際、ピッチをなるべく一定にして収録したパターンとピッチを揃えず普通にイントネーションをつけて収録したもの、2パターンを用意していましたが、最終的にはピッチを揃えないものを採用しました。

ピッチの雰囲気が決まった後は、DelayやFlanger、Speakerphoneで、機械生命体に内蔵されているであろうスピーカーから、聞こえるようなイメージになるよう、エフェクトを足していきました。




4. 最後に

改めて開発過程を思い返すと、あらゆる表現をWwise上で制御することに成功した、と言えるかと思います。一つのツールで制御出来るということは、パラメーターの管理や、デバッグにおいても大変便利で、他のプロジェクトへの応用も容易になりました。

今回は、音響空間表現に主軸をおいて、ゲームオーディオのクオリティアップを目指しましたが、今回用いた手法や、プラグインは、まだまだ発展の余地があるものばかりです。

例えば、Simple3Dは簡単に立体感のある音像を表現できるプラグインですが、今作では音の方向を立体的に表現するにとどまっていました。今後はリスナーと音源位置の距離に応じた、立体感の表現などにも挑戦していきたいと考えています。K-verbについても更なる質感の向上を行っていきたいですし、遮蔽情報と絡めたより網羅的なシステムを構築したいと考えています。

また、音響空間表現とは異なりますが、ハードの進化によって、膨大になりつつあるゲームモーションへの音付けの自動化についても、現在挑戦しています。単純な工数の削減を狙うだけでなく、そこから新しい発想や、表現が生まれるようなツールにすることが、近い将来の目標です。

ゲーム制作をする上で、ツールはたくさん用意されており、また課題もたくさんあります。日々、この課題にどう対応していくかという議論が、サウンドデザイナー、コンポーザー、プログラマーの間で繰り広げられていますが、これはどこのゲーム会社でも同じなのではないかと思います。そんな訳で今回は、Wwiseを使用している各国のゲームクリエイターの皆さんに、微力ながら何か役に立てることがあればと思い、記事にさせていただきました。少しでもヒントや、アイディアの種となれば幸いです。

Audiokinetic Blogより転載





shindo進藤美咲 Misaki Shindo
バンドでのインディーズ活動や、楽器販売店での勤務を経て、2008年にサウンドデザイナーとしてプラチナゲームズに入社。最新作『NieR:Automata』では、リードサウンドデザイナーとして、SE制作、Wwise実装、SE全体のシステム構築を担当。



kohata木幡周治 Shuji Kohata
電子楽器の開発会社を経て2013年にプラチナゲームズへ。オーディオプログラマーとして、サウンド表現の技術面を支えている。『NieR:Automata』では、システムの整備やオーディオエフェクト(音響効果)の実装を担当。“新しい感触のサウンド表現の研究とゲームへの反映”を目標に、日々関連技術の研鑽に努めている。