Open5

Mini-XR: OpenALの拡張で何とかできないか問題

okuokuokuoku

XRオーディオはマジで大量の選択肢がある。これを何とか単一のAPIにwrapし、切り替えて運用したい。

OpenGLというかWebGLに比べるとAPI自体は多いものの実装自体は現実的な手間でできる気はする。が、エフェクト類が伝統的な単純なオーディオエンジン(OpenAL)、オーディオデザイン環境(WWise、CRI)とXRオーディオ環境(Apple PHASE、Oculus Audio)で激烈に互換性が無い。

okuokuokuoku

数値型 vs. テンプレート型

OpenALというかCreativeのEAX Reverbが最もアイデアとしては古くから有る気がする。これは部屋の広さや材質に合わせて数値でパラメタを設定する。これはDirectXというかXAudio2の伝統的なリバーブであるI3DL2リバーブでも同様となる。

I3DL2リバーブとEAX Reverbを相互変換できるか。。?残響時間とかを揃えれば行ける気はする。。

Apple PHASEはテンプレート型で、非常に限られた材質リストからどれかを選び、そのメッシュをエンジンにアップロードする必要がある。Oculus Audio SDKはより幅広い材質を提供しているが、これは部屋の材質表現にしか使えない(遮蔽を表現しない)。

MSのProject Acoustics https://learn.microsoft.com/ja-jp/gaming/acoustics/what-is-acoustics はボクセルベースの事前シミュレーションで、選択的なマテリアル https://learn.microsoft.com/ja-jp/gaming/acoustics/unity-baking-materials と "Outdoorness" を使って空間を表現できる。事前シミュレーションの結果は数値型フィルタとリバーブに変換される。

GoogleのResonance Audioもオプショナルな事前ベイクがあり https://resonance-audio.github.io/resonance-audio/develop/unity/developer-guide 、マテリアルのテンプレートとメッシュを元に数値型フィルタを生成できる。

FIXME: Steam Audio https://github.com/ValveSoftware/steam-audio

okuokuokuoku

距離モデリング、パススルー

例えばUIオーディオはHRTF自体もパススルーしたい(高音が減るとUIオーディオ的な意味が無くなるので)。しかし、エンジンがHRTFをパススルーする簡単な方法を提供しているとは限らない。

距離モデリングはエンジンによって有ったり無かったりする。例えばWindows Sonicのような単純なオブジェクトオーディオインターフェースは自前でgainを調整する必要がある。OpenALを始め、大抵のインタラクティブオーディオエンジンは減衰やフィルタをサポートしていることがある。

BGM、配信許可フラグ

... オーディオシステム自体を分けさせる実装が一般的なようだ。まぁXRオーディオではその辺の配慮があまり必要ないのかもしれない。