本日は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を導入します。
今回はリリースページからUnityPackageで入手しましたが、公式のドキュメントではNuGet for Unityを用いて導入することが推奨されています。
MicrosoftSpatializerのUnityPackageをプロジェクトにインポートします。
これによってMicrosoftSpatializerが使用できるようになりました。
PlayerSettingsから[Audio]を開きSpatializerを[Microsoft Spatializer]に切り替えます。
これでMicrosoftSpatializerが導入できました。
〇Audioを付ける
Spatializerが導入されても音がなければ何も起こらないため、オブジェクトにAudioSourceをアタッチします。
AudioSourceのSpatializerにチェックを入れ、2Dから3Dに切り替えます。
これで空間音響が使用できますが、デフォルトだと音の減衰が大きすぎて変化がわかりづらいです。
[Min Distance]と[Max Distance]の値を下げます。
この値はMinDistanceは音の減衰が始まる距離、Max Distanceの値が音の減衰が終わる距離を指します。
この値を下げることでより現実らしい音となります。
以上で空間音響の設定が終わりました。
ビデオではわかりづらかったためぜひ実機で見てみてください。