球面調和関数を使用して複雑なサウンドスケープを構築する


16

私は今日、部屋の音響モデリングを改善する方法について職場で議論していました。このテーマに関してはほとんど作業が行われていないように見えますが、グラフィックスでは大量の作業が行われていることが示唆されました。さらに、音と光は単なる波形であるため、レイトレーシングやラジオなどを使用して適切な近似値を取得できる可能性があることが示唆されました。

この時点で、この挙動をシミュレートするために球面調和関数について考え始めました。鏡面反射のような反射と、拡散反射としてモデル化されたオーディオ散乱を同時に行うことができます。おまけとして、音の伝達を妨げる障害物もあります。唯一の問題は、複数の周波数の減衰を処理する方法でした。確かに、これは何らかの形の変換をオーディオスペクトル(FFT)に適用することでモデル化できます。

とにかく、このテーマに関する論文、特にリアルタイムでの実行方法に関する論文を誰もが知っています。誰かがアドバイスや有用な一般情報を得られなかったのですか?


1
これは、インディーズゲーム悪魔の音叉を思い出させる:indiegames.com/blog/2009/11/freeware_game_pick_devils_tuni.html(!それのために良い感触を得るためにビデオを見て)
Ricket

回答:


5

ええ、それは良い考えです。 Malhamはこれについてすでに論文を書いています。これは、Menziesによるいくつかのコメントに基づいています(1999年に遡ります!)。

また、音響にラジオシティを使用することについて議論しているノーサルのMASc論文にも注意してください。

照明については(Rに1つ、Gに1つ、Bに1つの関数セットを3つ実行します)、表現したいおおよその周波数帯域ごとにSH関数の異なる「セット」を実行する必要があります。低周波数、60Hz〜1kHz、1kHz〜2kHzの中間周波数、10kHz〜20kHzの高周波数など)。60Hz未満のすべてがすべてを通過するようにします(これは実際の生活でサウンドが行うこととほぼ同じです)

ただし、照明されたマテリアルがそれぞれRGBに異なる応答をするのと同様に、各マテリアルの音響反射能力をモデリングする必要があります。


3

それは興味深い問題のように聞こえますが、人々がすぐに見分けることができない前にどれだけの精度が必要なのだろうかと思っています。とにかく、この答えは「リアルタイム」の部分に焦点を合わせていますが、私が調査したものではないので、私は論文を知りません。

明らかに、モバイル音源を使用してこれをリアルタイムで正確に計算したい場合、反射の計算はグラフィックスカードを使用して最速になります。たとえば、ワールドの簡易バージョンを同時に実行している場合、それを使用して「反射パターン」をテクスチャまたはキューブマップにレンダリングし、そのテクスチャからサウンドの出力方法を推測できます。そのモデルのサウンド(またはサウンドの個別の周波数帯域)は点光源になります。基本的な(1バウンス)反射だけでは、とにかくこれ以上の精度は必要ないことがわかるかもしれませんが、これは特に単純化されたジオメトリと低減された解像度では非常に高速です。ただし、1つのグラフィックカードの複数のシーンでパフォーマンスの問題があるかどうかは完全にはわかりません。

私があまり知らない分野にさらに進むと、BSPツリーは、ボリュームと他のボリュームへの接続を定義するので、角を曲がる波に役立つように思えます。

状況に応じて、さらに最適化するには、上記のテストの結果をキャッシュします。たとえば、プレーヤーの向きに基づいて回転できるが完全には再計算されないサウンドのキューブマップ、またはプレーヤーの位置に基づいて補間できるいくつかのキューブマップを保存します。


あなたには、いくつかの方法で、球面調和関数を使用して、かなり多く、自由な鏡面&拡散反射だけでなく、すべてのための「曲げラウンドコーナー」や閉塞を得ることができるというけれどもそれは...私を打つ
ゴズ

さて、実際に球面調和関数とその適用方法を理解し始めた後、グラフィックカードセクション(段落2)はかなり無関係です。一般的にレベルの単純化されたジオメトリであるため、かなり3人/ 1人のゲームを想定している場合、BSPツリーに関するビットはまだ有用かもしれません。(リンクされているAShelly論文の「セル隣接グラフ」に似ています)。すべてのフレームを再計算しなくても、処理を節約できます。
Toeofdoom


2

私は実際にこれを試したことはありませんが、光伝搬ボリュームなどのアプローチをオーディオに使用できるかどうか、常に疑問に思っていました。光伝播ボリュームでは、小さな3dテクスチャ(私は信じている32x32x32)が使用され、3dテクスチャを塗りつぶすことによって光の跳ね返りと閉塞がシミュレートされます。球面調和関数を使用しているため、オーディオでも同様のことができる場合があります。しかし、私はオーディオの専門家ではありません


2

コーネルのコンピューターグラフィックスプログラムのダグジェームスは、環境内の音の正確なモデリングに多くの仕事をしてきました。ただし、彼の論文のほとんどは、サウンドジェネレーター(シンシェルオブジェクト、炎など)の特定のケースを扱っています。また、ゲームが実行する他のタスクと一緒にリアルタイムで実行するには、おそらく十分に効率的ではありません。

ただし、それらのいくつかを読み通すのに役立つ場合があります。それはあなたのアプローチをどのように進め、そして/または修正するかについてのアイデアを与えて、より粗いがリアルタイムのパフォーマンスのために十分に効率的であるかもしれません。

彼のサイトはこちらです:

http://www.cs.cornell.edu/~djames/

特に興味深いのは、彼の「調和流体」および「調和シェル」論文です。


1

私もこれにいくつかの考えを与えました。(リアリズム/パフォーマンスのトレードオフに関して)一番の懸念は、空間的には耳が目よりも劣っていることであり、目が必要とするほど現実的ではないものを非常に簡単に受け入れることだと感じました。ローカル環境でサウンドを完全にモデリングしようとするのはやり過ぎである可能性が非常に高い-EAXはおそらく「十分」です。

閉じた環境(例:地震)では、まず各部屋について2つのプロパティを計算します:「移動」と没入:

Transferranceは、この部屋を移動することで音がどのように影響を受けるかを示し、パラメトリックEQにカウントされる可能性が最も高い(理想的には各部屋からエコー/リバーブを追加しますが、EAXチップはこの帯域幅を持たない可能性があります)。また、パラメトリックEQは最終的に音の減衰をシミュレートします。

没入は、部屋を9つのキューブに分割し(1つでも十分かもしれません)、その観点からローカルサウンドプロパティを計算することで計算されます。これらのパラメーターは、EAX環境で使用されます。

最後に、各部屋はグラフで接続されます。グラフの各ポイントは、各部屋を接続するポータルです。

音が鳴ると、塗りつぶし(A *検索なし)を行い、移動量と移動距離を追跡します。サウンドがプレーヤーに届くと、将来のある時点で再生するためにキューに入れられます。走行距離に基づきます。渡されたグラフポイントの数を追跡し、最終的にサウンドを「カリング」する(つまり、連続的な塗りつぶし)ことができます。CPUがバインドされる可能性があるため、CUDAを使用してこれを行う必要がある場合があります。

サウンドが再生されるとき、3DサウンドAPI(OpenAL)を使用して、それが入ったポータルに配置し、プレーヤーが現在9つのキューブのどれにいるかを調べ、そのEAX環境を適用します。

ここでのすてきなことは、環境が十分に複雑な場合、無料の「グローバル」エコーが得られ、プレイヤーは正しい方向から来る音を知覚することです。EAX環境を正しく取得できれば、脳がそれを受け入れるほどの効果が得られることを願っています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.