夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

HoloLens 2で空間音響を使用する Microsoft Spatializer

本日はHoloLensの技術記事です。

HoloLens ではほかの一般的なPCとは異なるSpatialComputerとしての機能をいくつか持っています。 今回はその中の一つのSpatialSoundsを実装します。

〇SpatialSoundsとは?

 SpatialSounds(空間音響)はHoloLensに搭載されている6基のスピーカーを使用してMixedRelity世界に配置したオブジェクトから音が出ているように聞こえる機能です。

 これによってユーザーは音でオブジェクトの位置を確認することができます。

 空間音響自体はHoloLens特有の機能というわけではなく、一般的な3Dゲームでも多くの場合使用されています。 例えば、FPS(一人称視点シューティングゲーム)などでは空間音響によって敵の発砲音から位置を推測するゲームがあります。(具体例:フォートナイト)

 HoloLensの場合ゲームでは[RoboRide]のように敵の攻撃をSpatialSoundsによって避けたり、[Fragments]ではホログラムのキャラクターとの会話やゲーム進行に大きな影響を与えています。(残念ながらFragmentsは現在HoloLens 2対応はしていないようです。)

〇MS HRDF SpatializerとMicrosoft Spatializer

 Spatialization は、ステレオヘッドホンまたはスピーカーを使用して、mixed reality の世界にサウンドを置きます。

〇MS HRDF Spatializer

 MS HRDF Spatializerは頭部伝達関数(Head Related Transfer Function)と呼ばれる人の耳周囲で発生した音源の変化を関数にしたもので、UnityではWindows Mixed Realityのオプションパッケージの一部として提供されています。

 しかしこれは高コストのアーキテクチャの CPU 上で実行されていたためより最適化されたMicrosoft Spatializerが提供されてました。

(MS HRDF SpatializerのMSはMicrosoftを指すのでネーミングとしてアレですが…)

Microsoft Spatializer

低コストのマルチソースアーキテクチャで実行されます。

 HoloLens 2ではハードウェアアクセラレーター(ソフト側ではなくハード側に実行のための仕組みがある)にオフロードされることによって最適化されています。    今回はこのMicrosoft Spatializerを実装します。

〇MicrosoftSpatializerの実装

 次のGitHubリポジトリからMicrosoftSpatializerを導入します。

github.com

 今回はリリースページからUnityPackageで入手しましたが、公式のドキュメントではNuGet for Unityを用いて導入することが推奨されています。

f:id:Holomoto-Sumire:20200724211016j:plain

 MicrosoftSpatializerのUnityPackageをプロジェクトにインポートします。

 これによってMicrosoftSpatializerが使用できるようになりました。

 PlayerSettingsから[Audio]を開きSpatializerを[Microsoft Spatializer]に切り替えます。

f:id:Holomoto-Sumire:20200724211131j:plain

 これでMicrosoftSpatializerが導入できました。

〇Audioを付ける

Spatializerが導入されても音がなければ何も起こらないため、オブジェクトにAudioSourceをアタッチします。

 AudioSourceのSpatializerにチェックを入れ、2Dから3Dに切り替えます。

f:id:Holomoto-Sumire:20200724220616j:plain

 これで空間音響が使用できますが、デフォルトだと音の減衰が大きすぎて変化がわかりづらいです。

[Min Distance]と[Max Distance]の値を下げます。

 f:id:Holomoto-Sumire:20200724221034j:plain

この値はMinDistanceは音の減衰が始まる距離、Max Distanceの値が音の減衰が終わる距離を指します。

 この値を下げることでより現実らしい音となります。

 以上で空間音響の設定が終わりました。

 ビデオではわかりづらかったためぜひ実機で見てみてください。