「実戦的なゲームのための音響空間表現 – NieR:Automata における事例 –」講演レポート
概要
このセッションはCEDEC2017、8/30の13:30~14:30に行われたものです。本レポートは講演での口頭説明をしていた部分を付け加えつつ、資料と合わせて見返した時、内容がすぐわかるように講演内容をまとめたものとなります。
音響空間表現の重要性
音響空間表現はグラフィックスで言うならば、ライティングやシェーディングに当たる部分である。
使用目的としては、リアリティを高めて没入感を向上させることが主となる。また、SE/Voiceの質感を揃えて全体的に馴染ませる役割もある。
ただし没入感を向上させる副作用として、BGMや背景など他の要素の印象に影響を与える可能性もある。
音響空間は目に見えないものなので、意外と直接心象に反映されやすいのではないかと木幡さんは考えている。
NieR:Automata での音響空間表現
NieR:Automataでのコンセプトの1つに、フィールドの途中で足を止めて、背景のグラフィックや環境音を楽しむことができると言うものがあった。このコンセプトを実現するために、SEのクオリティはもちろん、残響表現などの音響空間を出すことで、より自然な表現で没入感を出そうと考えられた。
また、NieR:Automataでは、これまでプラチナゲームズが作成していたゲームと比べると、とてもフィールドが広大で、これまでの作業方法だと膨大な作業量になることが予測できた。なので、この作業量を自動制御などでなんとか軽減できないか目指した。
これら2つがNieR:Automataで目指した音響空間表現のテーマとなる。
音響空間表現の分類:感格別
音響空間表現は広い意味の言葉である。なのでこのセッションでは感覚別に大きく3つに分類している。これらの分類はきっちり分かれているわけではなく、二種類、三種類に属する現象も存在する。
音源方角
音源が自分から見てどの方角にあるかと言う知覚について。
人間は耳で音を受け取り、脳で処理をする。ここである程度どの方角から音が聞こえているかが判断できる。このような知覚に対する、表現となる。
反響
音は直接聞こえてくるように思えるが、多くは壁などに反射した音が後から聞こえてきている。この状態に対する表現となる。
遮蔽
障害物による音の変化を表している。周囲の地形によって周波数帯に依存した減衰(音がこもって聞こえるような現象)を表現する。
物理現象の要素
次は物理現象に着目してみる。、それらの要素を先ほどの3つの分類に割り当てて見る。
- 耳自体/聴覚:音源方角への影響が強いため、ほとんど一緒と考えることができる。
- 反射&回折&透過&共鳴:遮蔽現象を中心に、いろんな感覚に影響しており、その影響力も無視できないほど大きい。
- 屈折&干渉&距離遅延:たまに影響の大きい現象が起こるが、その程度である。
今回のような音響空間表現をしていくと言うことに対して、物理現象を厳密にシミュレーションして再現して行っていく場合、反射&回折&透過&共鳴という部分を正確にモデル化していかないとリアルな表現に辿り着かない。しかしこれを自分で行うのは理論的にもコスト的にも非常に厳しい。
また、正確なシミュレーションが必ず良い結果をもたらすわけではない。あくまでもゲームにとって良い表現を探る必要がある。
ただ、この辺りを詳しく解説するのは難しいので今回は割愛。
結果として、今回の音響空間表現を行う際には、要素別ではなく、感覚別に沿っていくことにした。
では実際にどのような表現手法となるのかを見ていく。
音源方角表現:提案
(提案の意味)以下のものを考えて、実現させていったということ。
ポイントは以下の6つ。
- 音源方角をより自然に感じられるように
- 聴覚を重視
- 方角変化を滑らかに、エフェクト的な部分で処理をする。
- 原音を維持(デザイン上必要、後ほど補足)
- 再生環境の違いを吸収
- 上記処理を一音ずつかけるので非常に低い処理負荷にしたい
この中でも、押さえておきたいポイントは「再生環境の違いを吸収」。音源方角の表現というのは、VRやヘッドホンサラウンドの分野で語られることが多いが、NieR:AutomataではVRもヘッドホンも特に推奨してるわけではない。普通のゲームとして、どんな再生環境でも立体感を強調する必要があった。
これらの考えを元に、Wwiseを使ってエフェクトプラグインを作った。NieR:Automataでは、3D配置されている音のほとんどがこのエフェクターを通って再生されているので疑似サラウンドに近い状態で、より変化がわかりやすくなっている。
では実際どのような仕組みとなっているのかを、簡単に解説していく。
音源方角表現:信号処理
EffectName:Simple3D
ここでモノラルの信号処理の図が表示される。一般的な3Dサラウンドはステレオ処理されているが、今回はスピーカーで鳴らす必要があり、処理がぐちゃぐちゃにならないようにモノラルにした。また、モノラルの方が処理が軽いのも理由。
図の上部ではインプットからLPF(ローパスフィルター)を4kHzと500Hzの2つをかけている。これによって4kHz以上のhigh(高音)と500Hz以下のlow(低音)の音量を上げ下げしている。
※LPF=設定数値より低い方の音だけを通す。
また図の下部ではインプットからBPF(バンプパスフィルター)をかけている。これが特徴的で、音源が自分の後ろに行った時のような音を再現している。
※BPFとは=特定の周波数の音だけを残す。
※自分用のメモ:インプットから3つの処理に分かれている。得た音をそのまま音量調節する処理と、4kHzのLPFにかける処理と、設定した特定の周波数(可変)の音を残すBPFにかけた後に音量調節する処理。4kHzのLPFにかける処理後は更に2つの処理に分かれている。4kHz以下の音をそのまま音量調節する処理と、500HzのLPFにかける処理。500HzのLPFにかけた後は500Hzより低い音だけを音量調節する。全ての音量調節終了後に足し合わせてアウトプットされる。
このようなシンプルな図からどのように設計をしてパラメータの変化をつけたのか確認していく。
音源方角表現:主観イコライジング
主観イコライジングとは木幡さん達がつけた方式の名称。
自身の正面と、その他各方角から自分の方を向いているスピーカーを置いて、交互に同じピンクノイズを鳴らす。正面の方の音にはEQ(イコライザー)をかけておく。その状態で各方角の音と正面の音を聞き比べて、だいたい同じように聴こえると感じるまでEQを調整する。そうして、得た方角毎のEQパラメータを記録していく。
※ピンクノイズ=高い音の方が音量小さいノイズ
EQはグラフィックイコライザーというものを使っている。
大体当たりが付いてきたところで、先ほどのエフェクターを設計してEQパラメータを記録していくやり方をしている。
この方法の特徴の1つとして、正面の特性がフラットになる。つまり正面の音は変化しないため、原音維持ができる。なのでバーチャルサラウンドとは違って、連続変化する方角に対して色んな効果がつく面白い音を作ることができる。
反響表現:提案
- 周囲の地形を利用する反響表現
- 地形の材質による反射強度/音質の違いを表現
- 左右などの方角によって異なる反射強度/時間
- リスナーの向きに追従しない反響
- リアルタイムの地形変化に滑らかに追従
- シミュレーションの正確性より音としての気持ちよさ
- 地形情報の流用
- 低い処理負荷
項目は多いけど、考え方自体はシンプル。「周囲の地形を自動利用して、なるべく気持ちが良いインタラクティブな反響を作りたい」という感じ。
反響表現は地形判定することと、信号処理を行なってリバーブをかけることは別に考えている。
反響表現:地形判定
プレイヤーから周囲に向けて、1フレームあたり数本のレイキャストをランダム方角に飛ばして、衝突点を寿命付きで記録する。記録すると、衝突点群が常にできる。
衝突した点と材質を使って水平8方角毎の距離/反射率/フィルター強度を計算する。
反響に使うぶんには、ある程度ふわっとした計算で大丈夫。
反響表現:信号処理
EffectName:[K-verb]。誰かの名前の頭文字をとってる。美味しそう。
AUX(オグジュアリー)があって図の上部のスタートにあって、ここがエフェクトのバスになっている。ここにエフェクトをかけたい音(5.1chとか)を入れる。そしてリスナーの角度を元に、5.1chとかを絶対方向(北、南、南西等)の8chに変換する。その8方向ごとに、距離によって決まるdelayと、衝突率や材質で決まるレベルと、材質で決まるLPFをかける。更にここに、リバーブ感を出すためにAPF(オールパスフィルター)をかけて、各チャンネルを微妙に混ぜつつcrossfeedしつつ、フィードバックをする。
※AUX=外部入力とかのこと。
※APF=音にリバーブ感を出すためによく使われる。
※crossfeed=ステレオ音声をもとに、擬似的に立体感を付け加える方法の1つ。左右各チャンネルの信号を、左右反対側のチャンネルにわずかに遅延させて逆相でミックスする。左右反対側に逆相でミックスすることで定位の強調を行うほか、時間差により立体感を加える。ヘッドフォン聴取での頭内定位を緩和するためにも使われる。
※フィードバックする=あるタイミングの音を遅らせて、遅らせた後の信号に足し合わせて鳴らす。
これがリバーブの大きな実装部分。
ここで得られたリバーブを、今度は元のリスナー角度を使って、元にリスナーから見た4方向(4ch)に直して、Mainにマージする。
特徴的としては、delayとAPFのパラメータでリバーブの音の品質が決まってくる。距離を可変にするとdelayの値の変え方が難しくなるので注意が必要。APFの方が更に重要で、これの設計によってはリバーブの音がかなり変わってくる。本当なら、APFも距離や材質によって変えるべきだけど今回はそこまで辿り着いていない。
ここからDEMO。
NieR:Automataではプレイヤーの位置から1フレームの間に8本のレイキャストを飛ばしている。飛ばしたレイキャストは衝突地点で2秒間生存した後、消えていく。NieR:Automataは60FPSなので1sに480本のレイキャストを飛ばしている。
飛ばしたレイキャストの衝突した材質もパラメータとして常に持っている。
また、材質それぞれに反射率やフィルターの値を個別に設定できるシステムになっている。
反響表現:地形情報の流用
このK-verbで取得した地形データや広さ、地面の材質を反響表現以外でも流用して、活用している。
例えばレイキャストの衝突点の材質で草が多くなると、草の環境音を足したりしている。
また、レイキャストの衝突の結果、周囲が覆われている場合には擬似的に音をこもらせるなどをして遮蔽感を演出している。
今後はこのようにゲームから取得できるパラメータをどんどん増やしていって、色んなものを自動で制御できるようにしたいと考えている。
遮蔽表現:難しさ
これは自動制御やシステム化をしたり等やエフェクトで解決のようなことはしていない。遮蔽表現特有の難しさがある。
- 影響の大きい要素が複数(回折/反射/透過)存在していて、どれも難しい。
- 周波数領域による挙動の違いがある。例えば物陰に隠れた場合、高域が聞こえにくくなるが、高域以外は回折現象で普通に聞こえる。部屋の中なら、物陰であっても反射によって色んなところから音が飛んでくるので、音は通りやすい。壁に囲まれていたとしても、壁の材質や厚さや窓の有無によっては、向こう側の音が透過現象によって低域を中心に聞こえる。この辺りを正確に表現するのが難しい。
- 音源に大きさがある場合、パンとかの計算は一点で行うことで問題ないが、遮蔽に関しては音源の大きさを加味して遮蔽を考える必要がある。NieR:Automataでは特に、巨大な滝や巨大な機械生命体のような巨大な音源が存在するので、これは難しい問題だった。
- 地形の見た目とコリジョンの違い
- ゲーム演出としての表現も必要で、こちらに気づいていない敵とかは音量を下げたり、部屋の奥に行くにつれて外の環境音を下げたりしている。完全な遮蔽をリアルに再現せず、記号的でシンプルな表現をすることで、より没入感につながることがある。
- これら遮蔽の難しい部分を加味した上で美味しい部分をシステム化するというのは不可能ではないが、コスト的に見合わないと感じてシステム化は見送った。
サウンドエリアツール
これは、スポット環境音の配置をしたり、広域環境音やBGMの制御に使用したり、残響エリア(このエリアだと更に残響が響く)の配置をして反響表現の補完をしている。
また、位置に基づいてパラメータを制御し、それで更に特定の音群の調整制御をして、遮蔽表現に使用している。
このツールはプラチナゲームズに元々あったエリアツールを更にパワーアップさせたもの。遮蔽エリアというものを視覚的に配置することができ、深度なども設定できる。
音響空間のデザイン
- 「Simple3D」による立体的な音の配置で、音の動きの面白さを表現。実際のゲームでは音のほとんどをこのエフェクターを通している。また、この「Simple3D」はエフェクトをインサートするだけで対応できるので、ほぼ自動で立体的な動きを表現できる。
- 「K-verb」はフィールドの大部分の残響表現をカバーした。レイキャストを用いて周辺の地形や材質を取得するので、実際にはリバーブが変化するまで少し時間がかかっているが十分実用レベルとなっている。動的に残響を変化させるので自然に感じることができる。この「K-verb」はsend用のバスを用意して、そこにエフェクトをインサートし、必要な音を送るという形になる。なのでシステム系以外の3D配置のものはほとんどsendされている。「K-verb」では出来ない特殊なエリア(リアルではないリバーブをかけたい場所など)に関しては、サウンドエリアツールで残響エリアを設定することでカバーした。
- 遮蔽に関しては、NieR:Automataでは遮蔽対応箇所が少なく、ツール制作コストに見合わなかった。なのでサウンドエリアツールを強化させることで複雑な遮蔽エリアへの対応をした。
※send=音源からエフェクトかける用のトラックに音を送ること。
※バス=音の通り道(トラックのようなもの)。
結果
- エフェクトを通すだけで、簡単に自動で立体音響の表現ができるようになった。
- 「K-verb」では動的な残響処理ができるので、従来のサウンドエリアツールで表現していた残響の変化よりも自然な没入感を表現できた。
- また、「K-verb」によってエリア制作の作業時間を大幅に軽減できた。今までの手法だと、遮蔽エリアの作成が必要で且つ、背景の仕上がりを待つ必要があった。
- ただし「K-verb」だけではゲーム的な表現が物足りない場面があったので、表現の自由度を上げるために、サウンドエリアツールを組み合わせていた。
講演のまとめ
今回のように、複雑なオーディプロセッシングやエフェクトをゲームに活かせる時代になってきた。特に据え置き機やPCは性能が向上してきたので、こういった処理を挟み込む余地ができた。また理論的なだけではなくて感性的な面から攻めてみたりして、サウンド表現のブレイクスルー(大きく物事が進展する段階)を盛り上げられたらと考えている。
もう1つは、デザイナーやエンジニアがお互いの領域に踏み込むことの重要性を再認識した。エンジニアにはできなかった、音としての気持ち良さを追求したり、デザインしやすいエフェクトはどんなものかなどを攻めることができた。逆にデザイナーの方に処理負荷の低さを認識してもらって表現するものを増やし、全体の表現力を高めることができた。
質疑応答
Q:3Dエフェクターはバス単位で使用しているのか、それともオブジェクト単位なのか。
A:処理は3Dオブジェクト全てにかけている。なので信号処理部分はシンプルにしている。
Q:つまり全てのオブジェクトにエフェクターをインサートしても問題ない処理負荷?
A:はい。なのでゲーム中に40~50音が同時にエフェクトがかかることもある。
Q:残響成分の判定の基準がキャラクターの頭なのかカメラなのか。
A:プレイヤーの頭の位置で聞こえてくる音が流れてくる。早い段階でそこに至っていて、カメラにつけてしまうと、カメラの速度やカメラ移動を加味するのが大変なのと、大抵のゲームでは反響リスナーはキャラクターの頭で良いと考えられている。
Q:ゲーム中で穴が深いところに入った時(陥没した時)、遮蔽としてどのような判定になっているのか。
A:遮蔽エリアを引いているだけ。
Q:草むらや鉄を衝突判定しているが、それはシェーディングのマテリアルに紐づいているのか、独立して判定しているのか。
A:材質判定はサウンドがそのデータを欲しいという以前から存在していて、足音の鳴らし分けや、刀などの武器ヒット時にどのエフェクトを出すかというのは背景任せ。どっちかといえば、別で設定されている。
Q:「Simple3D」や「K-verb」を作ろうというのはどういった経緯でそうなったのか。
A:3年前のCEDECで空間音響あたりの話が始まってきていて、危機感があったので、感覚的な部分をベースとして決起し、プロト版を作成した。それを進藤さんが拾ってくれて、うまいことそのタイミングでNieR:Automataも開発が始まって、音響空間を大事にしているゲームだったので自由にやらせてもらえた。そういうのがあって、お互いに良い関係を築きつつ作成した。
Q:遮蔽のcurveはWwiseの標準についてあるプロジェクト設定で設定できるオブストラクションのcurveを使用しているのか?
A:Wwiseの標準の設定は使用していない。ゲームのパラメータを使って環境に合うように音を変化させているので場所によって違う。
Q:主人公以外のモブキャラ足音はどのように実装しているのか。
A:足音の判定は皆足元にレイキャストを飛ばしていて、それを使用している。
Q:「K-verb」の地形判定について、プレイヤーの真上はレイキャストを飛ばす数を少なくするなど、場所によって変えることはしているか。
A:水平方向を中心にして8方向に飛ばしている。スイカみたいに切った範囲内でランダムに飛ばしていて、且つランダムの分布で中心に少し重きを置いている。そして上と下を少し薄くしている。
Q:プレイヤーが歩ける場所以外にもレイキャストを飛ばしていたが、サウンド用にコリジョンを設定したりはしたのか。
A:サウンド用にコリジョンを張ることはしなかったが、注文は多く出していた。
感想
NieR:Automataでのリアルな音響空間を表現するのにはどのような工夫をしているのか、わかりやすく解説していただき、とても勉強になりました。サウンド関連の知識に疎い僕は、ほっとさんに用語の意味を教えてもらいながらタイムシフトを見ていましたが、どれもしっかりとした工夫を凝らしていることが伝わって来ました。