3D or not 3D

3Dサウンドを扱う場合、一時的に2Dサウンドにしたい場合があります。

3Dサウンドとは?

そもそも3Dサウンドにする理由は、サウンドの音の再生に現実感(リアル)を追求したい時に使用します。

見た目に
左側のから発生した音は左から、右側の音右から。
遠くの音は小さく、近くの音は大きい。

ですが、この音の鳴っている方向や距離による減衰は、ゲームでは何が決めているのでしょうか?。

カメラか?

カメラの位置と3Dのオブジェクトの位置から距離、カメラの向きと3Dオブジェクトの位置から方向が決まります。
3Dのゲームではカメラやゲームのオブジェクトが動き回るので、これを利用するのは効率が良さそうです。

ADX2では、カメラの位置にリスナーを設定し、
ソースの位置を音源の位置にすることで3Dの音を自動で表現することができます。

ゲームでの重要な音

キャラクターのまわりの音が実際には大事な音です。
カメラのところにマイクがあると、カメラの近くの音が最大で鳴ってしまう場合があります。
とくにカメラに映らないぎりぎりちょっとだけ後ろの場合、とてもうるさい状態になり、ゲームに無関係な音となったりします。
例えば乗り物にキャラが乗った場合など・・・
自キャラが巨大ロボットに搭乗していたら、足音や駆動音を正直に大きな音を鳴らしていたら、周りの音が聞こえなくなるでしょう。
戦車や車のゲームでも似たようなことがおこりえます。
実際のシミュレーション的な音と、ゲームでの音の音量は違う場合が多いです。
通常は敵キャラの音は派手目に、自キャラは控えめにすることが多いかと思います。

フォーカスポイント

ユーザーが注目している点(注視点)という考え方があります。
注視点を固定し、カメラを動かすといった操作はよく行われます。

で、カメラは画角があります。
広角だと広い範囲を見渡せる。逆に望遠レンズだと、遠くのある一部を切り出す形になります。
実際のテレビなど画面内に映る範囲の角度にもよるのですが、画角が実際とは合わない演出が多くあります。
この時、音源の角度が極端に変化します。
見ている位置と、カメラの位置のズレが大きくなり違和感につながる場合があります。

ADX2でもフォーカスポイントの指定が可能です。
以下、マニュアルから一部抜粋
使用するAPI
フォーカスポイントの制御には、以下のAPIを使用します。
criAtomEx3dListener_SetFocusPoint関数でフォーカスポイントを配置し、criAtomEx3dListener_SetDistanceFocusLevel関数とcriAtomEx3dListener_SetDirectionFocusLevel 関数で距離と方向の起点を設定します。

備考:
距離・方向の起点となる位置は0.0f~1.0fの範囲で指定します。
0.0fがリスナ上、1.0fがフォーカスポイント上に該当します。
0.5f等を指定することで、リスナとフォーカスポイントの間の位置に起点を置くことも可能です。
以上、といった関数を呼ぶことで、様々な用途に利用できます。

フォーカスが定まらないこともある

特にカメラが激しく回ったりしてフォーカスが定まらない場合、音源も定まらない。

この時、それぞれの効果を弱めるようにコントロールする(リスナー、フォーカスポイントに移動させる、回転の中心点)などで、極端な音の変化を回避したりできます。

実際には、音源を動かさない場合もあるかもしれません。
例えばGoProにマイクがついていて、プレーヤーがぐるぐる回転したら、
音はたしかにぐるぐる回るのですが、それを望むかどうかは音のデザインに関わります。

画面の手ブレを補正するのに近い考え方もありそうです。

3人称のゲーム

カメラにリスナー

よくカメラにリスナーがついているのがゲームエンジンなどでは初期状態となっています。
これは、ハンディーカメラで取っているような演出には最適でしょう。ホラー映画などで常に第三者としてのカメラマンとしての音。
あるいは1人称のゲーム。
実際の撮影現場では、ピンマイクや、さまざまな指向性のマイクを組み合わせ、調整が行われます。
もし、キャラクターがカメラから遠くにいった場合、操作しているユーザーが置いてけぼりになったような印象をうけます。

キャラにリスナー

では、キャラクターにリスナーをつけると良いか?
これは、これである意味一体感がとても強い。ただ、見た目と音の方向があっているか?ラジコンのような操作のものであれば、これもまたありかもしれない。
左から音がしたら、左を向いて倒す。しかし画面との向きが合っていない状況。しかし視点は引いた状態で表現したい。
やりすぎな感じで、少しちぐはぐになり、感情移入できないかもしれません。
加減が必要かもしれません

カメラと合わない表現

距離はキャラ、角度はカメラ


画面内にあるので角度はカメラ、でもカメラからの距離ではない。キャラからの距離での表現。
すごく遠くから、俯瞰してみている、例えるなら神の視点のような。
スポーツのサッカー中継のような場合に、音がどこから鳴るでしょうか?
気持ちの良いシュート音が聞こえない?
音の演出は時に、現実とは異なることがあります。これは、すごく引きのカメラで、でも画面中央の対象に対しての事象を音であらわすような時の演出でよくあります。

距離はカメラ、角度はキャラ


キャラに指向性マイクがある、カメラからは遠いので音は小さくといった表現。
これは、例えるならラジコンのようなもので、あえて距離がある、広い空間を表現しつつ、周りから攻められる時の角度といった情報が重要な3人称ゲームなどであります。

まだまだ表現はいろいろ

システム画面

あるいは、システム画面のようなまったく違う視点が画面を覆い隠してしまった場合など、フォーカスポイントからリスナーへスムーズに変化させる必要があります。

速度、集中

加速した時の視界の狭さ、釣りをしている時の集中など様々。
意識しない主役の足音は聞こえないが、緊張している時の敵の足音や息遣いなどは大きく聞こえるかもしれません。
実際のカメラの画角とユーザーが感じている視界の広さも実は違っていたりとても奥が深いところです。

インタラクティブ3D

ゲームの世界では刻一刻とシステムが変化します。
これらの変化もカメラや状態変化に直接対応するのではなく、線形の補間など若干遅延させることでより自然にするなどプログラムで解決すると良い部分があります。
ミキシングのAIのような領域があります。
ゲームは常にインタラクティブな要素があります。

瞬間移動、カメラのカット割

これは実際には2つの音をクロスフェードするようなミックスがもとめられます。
もし、フレーム単位で瞬間移動をすると、音にノイズが入ります。ドップラー効果などは破綻します。
うまく音の変化の要素をごまかす必要があります。
一度音を無音にしたり、残響エフェクトで音の位置を不明瞭にしたり。
あるいはリスナーを一時的にカメラから外すといったことも必要かもしれません。

瞬間移動ではないのですが、イベントシーンなどのカメラのカットが変わる(1カメ、2カメ)と切り替えた場合の音の位置などの処理もあります。

画面分割

それぞれのカメラに近いオブジェクトのみ音を移動させ、その他の音、共有する音などは音は不定の位置から再生する・・・など一例ですが。
あるいは、縦に画面分割なら、左側、右側で音の中心をずらして鳴らすなど。
4分割ともなると・・・
音源不定、直接脳内に・・・
神の声などは音はどこからするのか?
BGMはどこから音が発生しているのか?

3D or not 3D

リアル志向といっても、音の演出として不自然でないという表現がすでに幻想のようなところもあります。
ゲームならではの表現がいろいろ試すことができるところでとても面白いところで、どれが正しいもありません。
逆にいえば、ゲームに合わせた最適な表現を試すことはユーザーにとっても良い体験につながります。
(もしかすると、ありがちな演出は機械学習などでほぼ自動化してしまうなんて将来もあるかもしれません)
あるいは、3Dの「視点切り替え」のような「リスナー切り替え(カメラ、キャラ)」みたいな演出をユーザーに選ばせるという選択もあるかもしれません。