空間化の概要

Unreal Engine における空間化の概要を説明します。

はじめに

オーディオにおいて、サウンドの空間化 (サウンドの定位) は、さまざまなオーディオ テクノロジーの連携によって実現します。 それらのテクノロジーは、方向、減衰、伝播、オクルージョン、オブストラクション、リバーブなど、自然の音響現象を模倣したものです。

以下で、それらの現象を説明します。

現象

説明

方向

リスナーと音源の間の相対的な方向。

減衰

リスナーと音源の間の距離。

伝播

サウンドが音源からリスナーに移動する経路。

オブストラクションとオクルージョン

サウンドがリスナーに向かって移動する間に他のオブジェクトと衝突する場合があります。 それらのオブジェクトが、サウンドに対するオブストラクション (障害物) の役割を果たします。

リバーブ

サウンドは、複数の異なる経路を通ってリスナーに到達する場合があります。その際に、残響のようなエフェクトが発生します。

Unreal Audio Engine とゲーム オーディオにおいて、「空間化」という用語は通常、一般化された空間化の問題全体の一側面のみを指します。 それは、リスナーを基準にサウンドの方向を設定するために使用する手法とテクノロジーです。 減衰、リバーブ、オクルージョンといった、その他の考慮事項も、一般的に同じコンテキストで取り上げられます。 この概要ドキュメントでは、「空間化」という用語を、リスナーを基準にサウンドの方向を設定するための方法だけを指して使用します。

空間化の主な方法は 3 つあり、パニング音場空間化バイノーラル オーディオ空間化 です。

パニング

パニングは、空間化をシミュレートする方法の中で、最も古くからある、単純なものです。 もっとも基本的な形のパニングは、異なるオーディオ チャンネル (スピーカー) の間の相対ゲインを調整して行います。 ゲインとは、サウンドを減衰 (ゲイン < 1.0) または増幅 (ゲイン > 1.0) する操作を説明するために使われる一般用語です。

あるサウンドの左チャンネルのゲインを右チャンネルのゲインよりも高くすると、左からサウンドがするような錯覚が生まれます。 これは、ステレオ パニングと呼ばれます (「ステレオ」とは、オーディオに 2 つのチャンネルがあるという意味)。 このようにして空間化の印象が生まれることは当然に思われるかもしれません。しかし、この錯覚が生じるのは、音源が左にあるときは右耳よりも左耳で音が大きく聞こえるということを脳が学んできたからです。 厳密に言うと、この心理音響的な経験は、両耳間レベル差と呼ばれています (「レベル」は、音量の別称としてよく使われる)。

スピーカー セットアップに 3 つ以上のチャンネルがある (クワッド、5.1、7.1 サラウンド サウンドなど) 場合、パニングの手法はステレオ パニングと同じですが、手法の適用対象はスピーカーのペアとなります。 3 つ以上のスピーカーを使ったパニングで使われるこの手法は、ペアワイズ パニングと呼ばれます。

スピーカー セットアップに 3 つ以上のチャンネルがあり、スピーカーが受聴平面より上および下に配置されている場合のパニング手法は、ペアワイズ パニングに似ています。 ただし、2 組のペアになったスピーカーの間の相対ゲインを調整するのではなく、3 つで 1 組 (三重) になったスピーカーの間でゲインを調整します。 この種のパニングは、ベクターベースの振幅パニング (VBAP) と呼ばれます。

パニング値の決定: リスナーとスピーカーのジオメトリ

各種パニング手法の説明に入る前に、ゲームのジオメトリに基づくパン値の計算方法を理解しておくと役立ちます。 パン値の計算で考慮される主なジオメトリは 2 つあります。 リスナーのジオメトリと、物理スピーカーの位置のジオメトリです。

リスナーのジオメトリ

あらゆる空間化手法が、リスナーがいるという想定に基づいています。 このリスナーとは、仮想リスナーを置く場所と方向を意味します。 これは、定置型にすることも、3D 環境内で手動で制御することもできます。

通常、リスナーはプレイヤーのカメラにアタッチします。ゲーム ビューポートの「目」と「耳」が同じ場所にあるものと想定されるからです。 この想定はほとんどの状況に当てはまりますが、ゲームのタイプやゲームプレイの要件によっては、通常とは異なるセットアップにする場合もあります。 例えば、別の場所の音を聞く能力をキャラクターが持っている場合です。 他にも、サードパーソン ゲームでは、デザイナーがリスナーのジオメトリを分割することがよくあります。 リスナーの位置をキャラクター上に設定して距離減衰を行い、カメラを使用してパンするといった具合です。

スピーカーのジオメトリ

スピーカーのジオメトリには、プレイヤーがゲームを体験する際の、プレイヤーの環境におけるスピーカーの実際の物理配置が関係します。 ヘッドフォンの場合、配置は単純で、固定されています。 スピーカーはリスナーのすぐ右側と左側にあります。 緑の三角形がリスナーの位置と方向を表すとすると、ヘッドフォン スピーカーのジオメトリは次のようになります。

しかし、サラウンド サウンド スピーカーの場合、配置はもっと複雑で、スピーカーの数や、配置に使用する標準によって異なります。 以下に、5.1 サラウンド サウンド セットアップの一般的なスピーカー配置を示します (サブウーファーは描かれていません)。

標準的なスピーカー レイアウトとチャンネル構成は多数あります。 一般的に、ゲームでは、選択された標準構成に基づいてスピーカーが配置されていると想定します。 ノイズ バースト、サウンド トーン、マイクロフォン分析を使用してスピーカーの位置を自動判定する方法がありますが、これらの方法はビデオ ゲームではほとんど使われていません。

センター チャンネル

センター チャンネルは、多くの場合、パニング計算で無視されます。センター チャンネルは通常、セリフやインターフェース オーディオなど、非空間化オーディオ用だからです。

一般的に、センター チャンネルが活用されるのはシネマティック ミキシングです。重要なセリフではセンター チャンネルを使用して、セリフがはっきり聞こえるようにしています。 セリフはスペクトル バンドが狭く、パワー要件が低いため、多くのサウンド システムでセンター チャンネルのパワーが抑えられています。

そのような理由から、ゲームでは通常センター チャンネルを通じたパニングが無効になっており、センター チャンネルの用途は、セリフや、インターフェース オーディオなどの重要なオーディオがほとんどです。

モノ ソースのパン値の計算

リスナーとスピーカーのジオメトリが与えられ、これで、ワールド内におけるサウンドの相対位置を計算できます。

5.1 スピーカー配置のセンター チャンネルを無視するようにスピーカー配置を単純化して、ゲーム ワールド内の仮想位置としてスピーカー配置を概念化できます。 これらの位置はワールド内のリスナーの位置を基準としています。

パン値の計算は、次の図のように行うことができます。ここで、X はリスナーの位置から右スピーカーをつなぐ線と、リスナーの位置とワールド内の音源をつなぐ線の角度を表します。

リスナーを基準としたスピーカーの角度が既知 (または標準に従って選択した) の場合、この得られた角度 X を使用してパン パラメータを計算できます。このパラメータを、リニア パン アルゴリズムや一定パワー パン アルゴリズムで使用できます (以下の「オーディオ パニングの実行」セクション参照)。

PanLeft = X / TotalArcLength

PanRight = 1.0 - PanLeft

例えば、角度 X が 15 度で、左右のスピーカーの間の合計弧長が 60 度 (中央から右に 30 度、左に 30 度) の場合、パン パラメーターは左が 0.25、右が 0.75 になります。

サウンドがリスナーの周りをパンする場合のパン値を求める場合のアルゴリズムは、パン値の計算に使用する必要のあるスピーカーのペアを決定する点が異なります。 スピーカーそれぞれの水平方向配置を同じように使用して、左右のパン パラメータを求めます。

水平方向に配置されていないスピーカー (ハイト スピーカー) の場合、アルゴリズムは似ていますが、2 つではなく 3 つのパン パラメータが必要になります。

マルチチャンネル ソースのパン値の計算

マルチチャンネル ソースのパニングも、モノ ソース パニングと同様の方法で計算します。 違いは、ソース ファイルのチャンネルそれぞれに対して、固有のパニング マトリックス (どの出力チャンネルにどの程度のゲインを適用するか) を計算することです。

ステレオ ソースの場合、左チャンネルと右チャンネルそれぞれが、モノ ソースとして扱われます。 各ソース チャンネルの位置に使用するジオメトリを決定するために、スプレッド パラメータが使用されます。 このパラメータは、左チャンネルと右チャンネルそれぞれの間の実際の空間距離 (または半分の距離) として定義されます。

リスナーを基準とした左右チャンネルの方向も決定する必要があることに留意してください。 通常、ステレオ空間化の場合、左右のチャンネルはリスナーから音源の位置を指すベクターに常に直交するように方向が設定されます。

ステレオよりチャンネル ソースが多い場合 (通常は 4、6、8 など偶数個)、同様のアルゴリズムを使用できます。 スプレッド パラメータを左右チャンネルからの距離 (または半分の距離) として定義する代わりに、音源の位置を中心とする円の半径として定義します。 この場合、ソース チャンネルの仮想ポイントは、通常、円周上に均等に分散したポイントになります。

チャンネル数の多い空間化では、ソース方向のはっきりとした設定がないため、チャンネルの位置を設定する個別のベクターも指定する必要があります (ステレオ ソースの場合は直交方向を維持すればよかった)。 通常、ソースの固有の方向ベクターを使用して、ソース チャンネルの位置に方向を設定します。

オーディオ パニングの実行

オーディオ パニングを実行する方法は主に 2 つあります。 リニア パニングと一定パワー パニングです。

リニア パニング

リニア パニングは最も単純なパニング手法で、ペアになったチャンネルの間のサウンドの相対ゲインを線形に補間し、合計ゲインを一定に保ちます。

2 つのチャンネル (右と左) を使用する場合、次のゲイン計算方程式を使用します。

GainLeft + GainRight = 1

GainLeft = X

GainRight = 1 - X

リニア パニングをビジュアルで示すと、次のようになります。

リニア パニングは計算が簡単ですが、根本的な短所があります。 ラウドネス (音量。サウンド振幅の知覚体験を指す用語) は、オーディオ信号の実際の振幅では決まらず、オーディオ信号のパワーによって決まります。 パワーは信号の振幅の 2 乗に相当します。 サウンドの振幅 (またはゲイン) が X の場合、パニングのパワーは次の方程式で計算します。

PowerLeft = GainLeft2 = X2

PowerRight = GainRight2 = (1 - X)2

合計パワーは、計算した左右のチャンネルのパワーを足して求めます。

PowerTotal = GainLeft2 + GainRight2

PowerTotal = X2 + (1 - X)2

ゲイン値をこの方程式で使用すると、パワーは一定ではないことがわかります。 サウンドが左右どちらかの端 (X = 0.0 または X = 1.0) でパニングされた場合に比べ、中央 (X = 0.5) でパニングされた場合、パワー、つまりラウドネスは低下します。

左右のチャンネルの間で中央にパンした場合のパワー (知覚されるラウドネス) は以下のようになります。

PowerTotal = (0.5)2 + (1 - 0.5)2

PowerTotal = 0.25 + 0.25

PowerTotal = 0.5

一方、サウンドを左右のいずれかにパンした場合は以下のようになります。

PowerTotal = (1)2 + (1 - 1)2

PowerTotal = 1 + 0

PowerTotal = 1

パニング中のこのパワーの変化は、ゲームの全体的なオーディオ体験に影響します。サウンドがスピーカー場を非線形に移動しているように感じられるからです。

ステレオ (ヘッドフォンまたはスピーカー) の場合、サウンドはエッジに「張り付いている」ように感じられます。 サラウンド サウンド パニングの場合は、サウンドがスピーカーの位置を横切るので、サウンドが大きくなった後、スピーカーの間ではラウドネスが下がります。 それにより、ラウドネスが不均一になり、音源が回転したり、リスナーの周りを移動したりしているように感じられます。

ゲインの低減は距離減衰をシミュレートする主な方法であるため、このゲイン低減を使用することで、音がリスナーに近づいたり、リスナーから遠ざかったりしていると脳に解釈させることもできます。たとえ、オーディオ エンジンの意図が単にリスナーの周りで音を移動させるものであるとしてもです。

一定パワー パニング

一定パワー パニング手法は、一定のパワーが保たれるようにラウドネスを完全に増幅することで、リニア パニングのラウドネスの低下に対処します。 この手法では、振幅を一定に保つ代わりに、パニング中のパワー コンストレイントを保つことで、一定のラウドネスを実現します。

合計パワー方程式をもう一度見てみましょう。この手法では、結果としてあらゆるゲイン値 X で合計パワーが定数 (つまり 1) になるように X について解きます。

PowerTotal = GainLeft2 + GainRight2 = 1.0

この方程式には、考えられる解がいくつかあります。 オーディオでは、平方根解 (平方根パンロウと呼ばれる) または正弦/余弦方程式 (余弦パンロウと呼ばれる) を使用できます。

X が 0.0 ~ 1.0 のパニング パラメータ数値の場合 (0.0 は完全に左、1.0 は完全に右)、次のゲイン計算方程式を使用して一定のパワーを保ちます。

平方根パンロウでは、左右のチャンネルのゲインは次のように計算します。

GainLeft = √X

GainRight = √(1 - X)

ここで、合計パワーは常に一定に保たれることがわかります。

PowerTotal = (√X)2 + (√(1-X))2

PowerTotal = X + (1-X)

PowerTotal = 1

余弦パンロウでは、左右のチャンネルのゲインは次のように計算します。

GainLeft = Sin2 (X)

GainRight = Cos2 (X)

これも一定パワーを保つという要件を満たしていることを確認するために、単位円 (半径が 1 の円) を定義する三角関数の公式を思い出してください。

Sin2(θ) + Cos2(θ) = 1

このパンロウの出力をグラフにすると、実際のゲイン値が線形ではないことがわかります。

3 つ目の次元 (ハイト スピーカーなど) が関係するパニングの計算では、一定パワー コンストレイントは次の方程式を使用して計算します。

PowerTotal = GainA2 + GainB2 + GainC2 = 1.0

ほとんどのゲーム オーディオ エンジンでは、ハイト チャンネルにパニングする際にこの計算を行わず、代わりに、Dolby Atmos や DTS:X など、オーディオ エンジン外部でレンダリングするオブジェクト ベースのレンダリング方法を使用します。 ゲーム エンジンのオーディオ レンダリングは、使用するチャンネルが増えるほど、複雑で、計算負荷の高いものになります。

ベクター フリッピングの問題

パニング アルゴリズムの問題の 1 つは、移動する音源がリスナーを横切り、リスナーから音源の位置を指すベクターがすぐ方向を変える場合に発生します。

このベクターの主な用途は、スピーカー アレイのゲイン値の決定です。そのため、サウンドがリスナーの一方の側から逆の側に移動すると、あるタイミングで急にゲインが変化します。 上記の図で、ケース 2 と 3 の間で、青の音源がリスナーの原点を横切り、ゲイン値の計算に使用されるベクターが前方から後方にジャンプします。 この「ベクター フリップ」は、オーディオ信号の不連続を引き起こし、カチッやポンというような音が聞こえます。この不連続は、3D パニングを利用している多くのエンジンが考慮できない典型的なエッジ ケースです。

この不連続を回避する主な方法は、すべてまたは一部のスピーカーに無指向性ブレンドを使用して、このベクター フリップによって発生する不連続を「ならす」ことです。 通常、無指向性パンにブレンドする音源の上にユーザー定義の半径があります。 これにより、この遷移の間、サウンドを定位できなくします。

スピーカー構成の仮想半径内にある音源をパンする際には、ケース 1 と 2 の間およびケース 3 と 4 の間の音源を (スピーカー チャンネルのゲイン値を通じて) 空間的に区別する方法はありません。そのため、「ニアフィールド」パニングは従来から問題を抱えています。

音場空間化

スピーカー ベースの空間化に最適なもう 1 つの空間化手法は、音場の球面調和関数表現を使う方法です。 ここでは方法の説明に「音場」という語を使用しますが、「アンビソニック」という言葉でも広く知られています。

球面調和関数は、場の振動を 3 次元的 (球状) に表す波ベースの方法です。 これは、任意の高解像度の空間情報が必要な多くの分野で使用されています。

球面調和関数は、概念的には、フーリエの定理 (あらゆる周期関数は、さまざまな周期と振幅の一連の正弦曲線として表現できる) と空間的に同一です。 このようにして、球面調和関数は 3 次元の場を正確に定義できる一連の関数と考えることができます。

実際のところ、球面調和関数 (または音場/アンビソニック) 表現の次数は、空間表現の解像度の程度を表します。 調和関数の次数が高いほど、球面調和関数の展開に含まれる項数が多くなり、空間表現の解像度が高く (鮮明に) なります。 しかし、次数を増やすほど、計算コストが高くなり、表現のために多くのメモリが必要になります。

パニングに音場を使用する利点は、スピーカー位置間に音源を定位した結果が著しく向上する傾向があることです。 使用するスピーカー数に比例してパニング方法の品質が高まる状況では、音場を使用すると、非常に少数のスピーカーで非常に高い品質を実現できます。

音場のもう 1 つの大きな利点は、スピーカーやチャンネルの構成に関係なく空間情報をエンコードして保存できることです。 音場は、回転変換、ミックスなどを使い、チャンネルに依存しない方法で、空間情報を保持します。

3D 音源は音場表現にエンコードし、他の音場形式とミックスした後、最後にレンダリング パイプラインで、正確な出力チャンネル形式に合わせてデコードできます。 つまり、オーディオ コンテンツは、音場形式に事前ベイクして、受聴環境に最適な特定のローカル プレイヤーのハードウェア構成に合わせてローカルでデコードすることができます。 この機能がなければ、ローカルのハードウェア構成に合うようにマルチチャンネル音源をダウンミックス (7.1 コンテンツをステレオにダウンミックスするなど) しなければなりません。 このダウンミックス プロセスの過程で、重要な空間情報がどうしても失われてしまいます。 一方、音場を使用すると、どのようなチャンネル構成だとしても、デコードするだけです。

ただし、音場単独を直接受聴しても空間として識別できるわけではないことに注意してください。 音場は、従来のスピーカー/チャンネル形式に合わせてデコードする必要があります。それにより、音場が、パニングと同じようにチャンネルに適用される一連のチャンネル ゲインに解決されるのです。 面白いことに、音場は、特定の方向に空間化されているように聞こえる場合でも、通常はゼロ以外のゲイン値になって、サラウンド サウンド チャンネル構成に広がります。

音場空間化の最後のポイントは、特定のマイク構成を使用して現実の音場をキャプチャすると、音場形式に直接エンコードする方法でオーディオをキャプチャできることです。 音場マイク アレイは、ハードウェアとマイクにコストがかかるため、通常、低次の音場を記録します。しかし、高価ですが、高次の音場マイク アレイも存在します。 この手法を使用すると、複雑な空間音源素材を収集できるため、環境オーディオの音場レコーディングを特に強化できます。

バイノーラル オーディオ空間化

ヘッドフォン向けにオーディオを設計する場合、さまざまな心理音響現象を利用して空間化の質を向上できます。 オーディオ技術では、この種の空間化を (ヘッドフォン空間化の対語として)「バイノーラル空間化」と呼ぶのが一般的です。 「バイノーラル (binaural)」という語は、人間 (およびほとんどの動物) には 2 つの耳がある事実に由来しており、 両耳のことを指します。なお、これに対応する視覚用語は「ビノキュラー (binocular。両目)」と言います。

耳が物理的にバイノーラルにサウンドを定位する方法には、3 つの主な要素があります。 両耳間レベル差両耳間時間差スペクトル シャドウイング です。

両耳間レベル差

両耳間レベル差 (ILD) は、空間において両耳が物理的に離れており、音のボリューム (パワー) は距離の関数として低下するという事実から導かれる空間化認識の要素です。 つまり、音源が頭の左側にある場合、左耳に聞こえる音の方が右耳に聞こえる音よりも少し大きくなります。

ILD は、オーディオのパニングが効果を発揮する最大の認知的理由であり、バイノーラル空間化の重要な要素です。 ILD の効果に影響を与える主な因子は、人の頭の大きさ (より具体的には、左右の耳の間の距離) です。

両耳間時間差

両耳間時間差 (ITD) は、空間において両耳が物理的に離れており、音が空気中を伝わるのには時間がかかるという事実から導かれる空間化認識の要素です。 つまり、音源が頭の左側にある場合、右耳よりも左耳の方に音が少し早く到達します。

この効果は非常に小さいものですが、脳はその時間差を検知できるため、音の定位における重要な要素となっています。 ILT の効果に影響を与える主な因子は、ILD と同様に、人の頭の大きさです。

スペクトル シャドウイング

音は波であり、媒質や障害物に遮られると回折します。 この回折は非常に複雑で、音に小さな変化や変動を引き起こします。 この変動は、ラウドネスや周波数フィルタリングの点で発生します。

サウンドのスペクトル シャドウイングが一定で、耳への角度の関数として予測可能な場合、脳はその情報を解釈して、重要な位置情報を導き出すことができます。 これは、耳が奇妙な形状をしていて、小さなひだがいくつもある理由の 1 つです。 耳の複雑な形状は一人ひとり固有のものですが、このスペクトル シャドウィングによって、脳が空間情報のあいまいさを解消し、微調整するのに役立つように進化してきました。

この効果は個人個人でまったく異なるもののため、オーディオ エンジンでシミュレートするのは非常に困難です。

頭部伝達関数 (HRTF)

頭部伝達関数 (HRTF) は、バイノーラル空間化に関連する心理音響要素すべてを組み合わせるために使用されます。

HRTF は、典型的なリスナーのジオメトリを基準に角度の関数としてインパルスを記録することで作成される、データを基にしたフィルターです。

平均的な (人間の) 頭部のサイズと平均的な耳の形状を正確に表したダミーの頭部を使用します。 ダミーの頭部の耳にマイクを挿入し、インパルス (小さなノイズ バースト) を角度の関数として記録します。 以下に、ダミーの頭と、外耳道にマイクを埋め込んでモデル化した耳の例を示します。

導き出されたフィルターはインパルス応答 (IR) と呼ばれます。 システムが時不変 (時間が経っても変化しない) で線形 (入出力の非線形マッピングを持たない) である限り、IR は、内部の詳細が実際にわからなくても、システムの複雑な詳細すべてを表現できるフィルターです。

耳の形状とパーツの配置は人によって異なるため、標準的なダミーの一般的な IR セットでは、多くの人にとって最も正確な体験を生むことはありません。 この理由から、それを補うように、さまざまな多くの IR データセットが作られています。

HRTF の使用

あるシステムで 1 つのオーディオ サンプルがどのように変化するかを記録することで、記録したデータ セットで以降のサンプルを処理できます (畳み込みと呼ばれる処理)。これで、それらのサンプルが元のシステムで処理されたかのようになります。

HRTF データ セットは IR を、頭部を基準とした角度の関数として保存します。 これが、ゲーム オーディオ エンジンでリスナーを基準としたサウンドの角度を使用して、その角度に最も近似したデータ セットを検索する理由です。 HRTF レンダリング手法の中には最も近い IR にスナップするものもあれば、より連続的な IR を得るために IR セット間を補完するものもあります。

選択された IR データ セットは入力オーディオで畳み込みされ、出力が ILD、ITD、耳と頭部の実際の形状のスペクトル特徴を考慮します。 その結果、一般的に、どのような手法を単独で実装した場合よりも、大幅に音の定位性が高くなります。

HRTF レンダリング (とバイノーラル手法全般) の短所は、ヘッドフォン以外ではうまく機能しないことです。 フィルターと遅延は、ステレオ スピーカーで聞くと破綻し、空間化の実感は、従来のパニングを使用する場合よりもかなり悪くなります。

ハイブリッド アプローチ

これまでに説明してきた複数の空間化方法のさまざまな要素を組み合わせる空間化手法もあります。

一般的なハイブリッド アプローチでは、次のような操作を行います。

  • 個々の音源の空間情報をチャンネルに依存しない音場にエンコードします。

  • それらの音場音源をミックスします。

  • 音場を任意の仮想スピーカー/チャンネル構成にデコードします。

デコードしたオーディオを実際のサラウンド サウンド ハードウェアに出力するのではなく、仮想スピーカー オーディオをバイノーラル レンダリング プロセスに出力します。 これが、ゲームからサラウンド サウンド出力を取得してそのサウンドをヘッドフォン向けにさらに 3 次元的にするという、「3D オーディオ」ヘッドフォンで広く使われている方法です。 この方法は、全体的な CPU コストを下げ、HRTF 空間化の利点を享受できるため、一部のソフトウェア手法でも使われています。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル