[CEDEC]バイノーラル室内インパルス応答による,どこでもリアルなサウンド空間
CEDEC 2019会場のインタラクティブセッションで同志社大学により,自由に視聴点を変えられるVR用立体音響技術に関する展示が行われていた。
「自由に視聴点を変えられる」というのはゲームでは普通にやってるだろうと思う人もいるかもしれないが,音に関して言えば,3Dポジショナルオーディオを使っても音源位置の定位は変えられるが,音場環境までリアルタイムで変えられるものは少ない。とくに任意の環境でのものについてはまだ実装例がないのだという。
かなり余談となるが,昔の話をしたい。だいたい20年前か。
当時の私の職場であった会社は,多少余裕のあった時期でもあり,ときどき先端技術の勉強会というのをやっていて,1回だけそれに呼ばれたことがあった。
そのときに教わったのが,3Dオーディオの話だ。当時はまだ大阪大学だっただろうか,LINKS-1やメタボールなどのレイトレで知られていた大村皓一先生に,当時行っていたという研究の話を聞いた。それが3D音声の話だった。
音というのはどう伝わるかといった話と,残響などのデータを加えることで,両耳で聞いた音と同等のものを再現できるといった話だったと思う。
音声といっても16bitとかハイレゾデータなどは使わない。扱う音声も残響データもすべてビットストリームだ。もちろんサンプリングはそれなりに高周波数なのではあろうが,データ自体は1bitに落として記述されていた。形式はともかく,結局のところ3次元化するには音声と残響を掛け算すればよいのだという。
数字の掛け算なら簡単だが,終わりなく連続しているようなビットストリームへの掛け算となると想像も付かない。先生は「簡単なんだよ」と端からbit処理をしていけば掛け算が実行されることを丁寧に説明してくれた。これでなにができるかというと,いわゆるコンボリューション(畳み込み演算)である。
掛け算といってもやることはビット処理だけであり,非常に簡単にハードウェア化できる。いまだにクソ重い処理として知られるコンボリューションを無茶苦茶シンプルなハードウェアで実装していた。たぶんDSPですらない。せいぜいkHzオーダーのデータだから,MHzの処理系ならば余裕でリアルタイム処理ができるというのは分かりやすい話だ。
どうやってデータを作るのかというと,劇場(など)に行って拳銃を撃ちまくる(空砲)のだそうだ。とても楽しそうだった。そのときの反響をいわゆるダミーヘッドの両耳のマイクで拾って,ビットストリームのインパルスデータとして記録する。これを劇場の上下左右あらゆるところで行い,3次元座標に対応させる。
近いところのデータを補間して使えば,実質,室内すべての空間での音の鳴り方を再現できるという。なんとなれば,音源が身体の中をせり上がってくるといった体験もできるとのことだった。
最大の特徴は全部がビットストリームなのでデータ量が小さく,3次元で残響データを取っても間単にROM化でき,さらに演算や合成が軽いということだ。厳密に言えば頭の大きさや髪型,耳の形などで変わるらしいが,だいたいのところは大人用と子供用くらいのデータでなんとかなるという話だったと思う。
両耳の位置で収録したインパルスデータで音を畳み込み演算すれば,そのデータの位置で聞く音そのものになり,複数のインパルスデータを補間することで空間すべてに対応できる。どちらかというと音源を動かすことを重視した説明だったが,音の立体定位を完全に実現する方法として,原理を聞けば非常に分かりやすい話だった。
基本的に,3D音響の基礎はその話で学んだと思う。位相をいじる手法も知ってはいたが,後年,デキの悪いバーチャルサラウンドの機器を見て,なんでこんな無様なものを作っているんだろうと不思議に思っていたものだ。
で,ここ数年でHRTF(頭部伝達関数)という単語を聞く機会が増えてきた。音源から耳への音の伝わり方を示す関数だという。頭部伝達関数ということで,あの話の一歩先,データを取り直すか補間する以外に個人差の調整が難しかった部分,主に耳の反射とか頭部内の伝達をパラメトリックに実装する手法かと思い込んでいたのだが,よくよく調べると,頭部を伝達する音の関数ではなくて,頭部まで到達する音の関数であり,実体は単にインパルスデータのコンボリューションの話だった。なんでいまさら? 聞くと,ここ数年でようやく両耳用にレンダリングできるようになった製品が出てきたのだという。
じゃあこれまでの製品はなんだったのかという話だが,実際の製品は途中段階を経て現在の形になったのだという。単に補間した残響データをコンボリューションして再生する話のどこに途中段階が存在しうるのか理解できなくて聞いてみたら,わりと大騒ぎになってしまった。
イスラエルにまで問い合わせてもらった答えは,HRTFといっても,インパルスデータを使わず,モノラルの周波数応答だったり,単にイコライザで済ませてるものがあったということらしい。3次元定位がうまくいくとは思えないのだが。
20年ほど前に聞いた話はようやく時代が追いついてきた段階なのだと思い知ったわけだ。3D音響の基礎はそのとき学んだと思っていたのだが,全然基礎じゃなかったらしかったらしい。
とにかく,最近のバイノーラルレンダリングによる3Dポジショナルオーディオは,左右の耳に対応したインパルスデータをサウンドデータに畳み込んで,その位置での残響をなどを再現する技術であり,これが現在の最先端だということのようだ。
長い長い前置きにお付き合いいただいたわけだが,同志社大学がインタラクティブセッションで展示していたのは,大村先生のシステムに似ていた。空間の反響特性をあらかじめ求めておき,近い位置のデータを補間して全空間内での音場を再現するのだ。
ただ,反響データを取る際に,空砲を撃ちまくる代わりに,演算でインパルスデータを作るというのが大きな違いである。これにより,コンサートホールのような特定の場所の音場を再現するのではなく,ゲームのまさにそのシーンでの音場を得られるわけである。実に合理的だ。
いまさらだがゲームで言うと,ライトプローブによるグローバルイルミネーション(GI)処理を思い起こしてもらえると理解しやすい人もいるかもしれない。さらに言えば,シーン内に高原を配置して両目の位置でそれぞれレンダリングして両目に表示することで,その場での実際のものの見え方を再現することができる。両耳の位置での音の聞こえ方をそれぞれ再現すれば,その場での音を聞くことができるわけだ。
実際に話を聞いても,シーン作成時にある程度の密度で空間内のインパルスデータを計算して回り,それを使って立体音場を再現するのだという。レイトレーシングと似た考え方で音の反射や散乱など(バイノーラル室内インパルス応答:BRIR)を計算していく。レイトレと違うのは,音は波の特性を色濃く持っていることだ。波動としての伝播をGPUクラスタで事前計算しているのだという。1か所につき,方向も(さすがにY軸回りだけのようだが)変えて計算し,必要に応じてデータを捕間して使っていくのだ。さすがにビットストリームではなく普通の16ビットデータみたいなものを使っているそうだが,そこまで大きなデータにはならないとのことだった。
デモ自体は,コの字型の部屋(通路?)での音の聞こえ方をVRヘッドセットを付けた状態で確認するというものだった。
たとえば,コの字の上左端の位置にある音源をコの字の下左端の位置で聞くと,反響音が回り込んで聞こえるといった具合だ。単なる音源の位置だけでなく,シミュレートされた音の反響データを記録/再生しているので,まさにそのシーンのその位置での音の聞こえ方になるわけだ。
会場ではUnityでのデモが行われていた。聞いてみるとUnity用のプラグインなどの形式での販売も検討はされているらしい。
GI処理と同じで,事前計算では動的なシーンには対応できないわけだが,そちらもいずれ手を付けたいとのことだった。
GIでは,動的な変化があった部分を更新していくような処理系も存在するので,絵よりはデータの軽い音声でのリアルタイム処理が不可能な理由はない(それなりに重そうだが)。もしかしたらリアルタイムレイトレーシング用のハードウェアは,そういった分野でも福音になるのかもしれない。
GPUメーカーが進めているリアルタイムなレイトレーシング的オーディオ処理と並んで,これで意外と最近までかなりいい加減だったらしいゲームでの音場再生も,ほぼ完成の域に達するのではないだろうか。今後の研究に期待したい。
「自由に視聴点を変えられる」というのはゲームでは普通にやってるだろうと思う人もいるかもしれないが,音に関して言えば,3Dポジショナルオーディオを使っても音源位置の定位は変えられるが,音場環境までリアルタイムで変えられるものは少ない。とくに任意の環境でのものについてはまだ実装例がないのだという。
かなり余談となるが,昔の話をしたい。だいたい20年前か。
当時の私の職場であった会社は,多少余裕のあった時期でもあり,ときどき先端技術の勉強会というのをやっていて,1回だけそれに呼ばれたことがあった。
そのときに教わったのが,3Dオーディオの話だ。当時はまだ大阪大学だっただろうか,LINKS-1やメタボールなどのレイトレで知られていた大村皓一先生に,当時行っていたという研究の話を聞いた。それが3D音声の話だった。
音というのはどう伝わるかといった話と,残響などのデータを加えることで,両耳で聞いた音と同等のものを再現できるといった話だったと思う。
音声といっても16bitとかハイレゾデータなどは使わない。扱う音声も残響データもすべてビットストリームだ。もちろんサンプリングはそれなりに高周波数なのではあろうが,データ自体は1bitに落として記述されていた。形式はともかく,結局のところ3次元化するには音声と残響を掛け算すればよいのだという。
数字の掛け算なら簡単だが,終わりなく連続しているようなビットストリームへの掛け算となると想像も付かない。先生は「簡単なんだよ」と端からbit処理をしていけば掛け算が実行されることを丁寧に説明してくれた。これでなにができるかというと,いわゆるコンボリューション(畳み込み演算)である。
掛け算といってもやることはビット処理だけであり,非常に簡単にハードウェア化できる。いまだにクソ重い処理として知られるコンボリューションを無茶苦茶シンプルなハードウェアで実装していた。たぶんDSPですらない。せいぜいkHzオーダーのデータだから,MHzの処理系ならば余裕でリアルタイム処理ができるというのは分かりやすい話だ。
どうやってデータを作るのかというと,劇場(など)に行って拳銃を撃ちまくる(空砲)のだそうだ。とても楽しそうだった。そのときの反響をいわゆるダミーヘッドの両耳のマイクで拾って,ビットストリームのインパルスデータとして記録する。これを劇場の上下左右あらゆるところで行い,3次元座標に対応させる。
近いところのデータを補間して使えば,実質,室内すべての空間での音の鳴り方を再現できるという。なんとなれば,音源が身体の中をせり上がってくるといった体験もできるとのことだった。
最大の特徴は全部がビットストリームなのでデータ量が小さく,3次元で残響データを取っても間単にROM化でき,さらに演算や合成が軽いということだ。厳密に言えば頭の大きさや髪型,耳の形などで変わるらしいが,だいたいのところは大人用と子供用くらいのデータでなんとかなるという話だったと思う。
両耳の位置で収録したインパルスデータで音を畳み込み演算すれば,そのデータの位置で聞く音そのものになり,複数のインパルスデータを補間することで空間すべてに対応できる。どちらかというと音源を動かすことを重視した説明だったが,音の立体定位を完全に実現する方法として,原理を聞けば非常に分かりやすい話だった。
で,ここ数年でHRTF(頭部伝達関数)という単語を聞く機会が増えてきた。音源から耳への音の伝わり方を示す関数だという。頭部伝達関数ということで,あの話の一歩先,データを取り直すか補間する以外に個人差の調整が難しかった部分,主に耳の反射とか頭部内の伝達をパラメトリックに実装する手法かと思い込んでいたのだが,よくよく調べると,頭部を伝達する音の関数ではなくて,頭部まで到達する音の関数であり,実体は単にインパルスデータのコンボリューションの話だった。なんでいまさら? 聞くと,ここ数年でようやく両耳用にレンダリングできるようになった製品が出てきたのだという。
じゃあこれまでの製品はなんだったのかという話だが,実際の製品は途中段階を経て現在の形になったのだという。単に補間した残響データをコンボリューションして再生する話のどこに途中段階が存在しうるのか理解できなくて聞いてみたら,わりと大騒ぎになってしまった。
イスラエルにまで問い合わせてもらった答えは,HRTFといっても,インパルスデータを使わず,モノラルの周波数応答だったり,単にイコライザで済ませてるものがあったということらしい。3次元定位がうまくいくとは思えないのだが。
20年ほど前に聞いた話はようやく時代が追いついてきた段階なのだと思い知ったわけだ。3D音響の基礎はそのとき学んだと思っていたのだが,全然基礎じゃなかったらしかったらしい。
とにかく,最近のバイノーラルレンダリングによる3Dポジショナルオーディオは,左右の耳に対応したインパルスデータをサウンドデータに畳み込んで,その位置での残響をなどを再現する技術であり,これが現在の最先端だということのようだ。
長い長い前置きにお付き合いいただいたわけだが,同志社大学がインタラクティブセッションで展示していたのは,大村先生のシステムに似ていた。空間の反響特性をあらかじめ求めておき,近い位置のデータを補間して全空間内での音場を再現するのだ。
ただ,反響データを取る際に,空砲を撃ちまくる代わりに,演算でインパルスデータを作るというのが大きな違いである。これにより,コンサートホールのような特定の場所の音場を再現するのではなく,ゲームのまさにそのシーンでの音場を得られるわけである。実に合理的だ。
いまさらだがゲームで言うと,ライトプローブによるグローバルイルミネーション(GI)処理を思い起こしてもらえると理解しやすい人もいるかもしれない。さらに言えば,シーン内に高原を配置して両目の位置でそれぞれレンダリングして両目に表示することで,その場での実際のものの見え方を再現することができる。両耳の位置での音の聞こえ方をそれぞれ再現すれば,その場での音を聞くことができるわけだ。
実際に話を聞いても,シーン作成時にある程度の密度で空間内のインパルスデータを計算して回り,それを使って立体音場を再現するのだという。レイトレーシングと似た考え方で音の反射や散乱など(バイノーラル室内インパルス応答:BRIR)を計算していく。レイトレと違うのは,音は波の特性を色濃く持っていることだ。波動としての伝播をGPUクラスタで事前計算しているのだという。1か所につき,方向も(さすがにY軸回りだけのようだが)変えて計算し,必要に応じてデータを捕間して使っていくのだ。さすがにビットストリームではなく普通の16ビットデータみたいなものを使っているそうだが,そこまで大きなデータにはならないとのことだった。
デモ自体は,コの字型の部屋(通路?)での音の聞こえ方をVRヘッドセットを付けた状態で確認するというものだった。
たとえば,コの字の上左端の位置にある音源をコの字の下左端の位置で聞くと,反響音が回り込んで聞こえるといった具合だ。単なる音源の位置だけでなく,シミュレートされた音の反響データを記録/再生しているので,まさにそのシーンのその位置での音の聞こえ方になるわけだ。
会場ではUnityでのデモが行われていた。聞いてみるとUnity用のプラグインなどの形式での販売も検討はされているらしい。
GI処理と同じで,事前計算では動的なシーンには対応できないわけだが,そちらもいずれ手を付けたいとのことだった。
GIでは,動的な変化があった部分を更新していくような処理系も存在するので,絵よりはデータの軽い音声でのリアルタイム処理が不可能な理由はない(それなりに重そうだが)。もしかしたらリアルタイムレイトレーシング用のハードウェアは,そういった分野でも福音になるのかもしれない。
GPUメーカーが進めているリアルタイムなレイトレーシング的オーディオ処理と並んで,これで意外と最近までかなりいい加減だったらしいゲームでの音場再生も,ほぼ完成の域に達するのではないだろうか。今後の研究に期待したい。