こんにちは、ナレコム前川です!
今回は、Microsoft公式にあるチュートリアル Holograms 220 Spatial Sound 3章 を進めていきたいと思います。
前回からの続きになるので、Holograms 220 Spatial Sound 1章から始めてください。
第3章 空間音響と空間マッピング
第3章では、音を使用して以下のことを行っていきます。
- 現実世界との相互作用
- 音を遮る
- 室内モデル
それでは、第3章を進めて行きたいと思います。
Unityに戻って、[Build Settings] が開いている場合は閉じてください。
1. 現実世界との相互作用
ここでは、現実世界で物を置いたりぶつかったりした際に生じる音を再現できるような設定を行っていきます。
まず、[Hierarchy] パネルで [HologramCollection] -> [EnergyHub]
の順に展開し、[Base] を選択してください。
※前回同様、[Base] と検索するほうが選択しやすいです。
次に、[Inspector] パネルで [Add Component] をクリックして [Tap To Place] を検索し、追加します。
そして、以下の操作を行ってください。
- [Tap To Place] で [Placement Material] の横にある円をクリックし、
[Wireframe] を選択してください。 - [Placement Sound] に [Place] を設定します。
- [Pickup Sound] に [Pickup] を設定します。
2. 音を遮る
少しわかりにくいので、例を上げて説明します。
例えば、私達が音楽が流れている部屋に入ろうとするときに、
ドアが閉まっていれば音ははっきり聞こえず音量も通常実際の音より小さくなります。
しかし、ドアを開けて中に入ると様々な音が実際の音量で聞こえてくるはずです。
つまり、この例では、ドアや壁が音を遮っているということになります。
そのような物体が音を遮る状況を、ここでは再現できるように設定していきます。
それではまず、[Hierarchy] パネルで [HologramCollection] を展開し、 [POLY] を選択します。
[Inspector] パネルで [Add Component] をクリックして [Audio Emitter] を検索し、追加してください。
[Audio Emitter] では、
- AudioSource の音量に加えたすべての変更を元に戻す
- ユーザーの位置から AudioEmitter を適用する GameObject の方向に、Physics.RaycastNonAlloc を実行
※Physics.RaycastNonAllocは、衝突情報を保存するスクリプトリファレンスです。
の2つを行います。
AudioEmitter は、フレーム単位に毎回更新されるのではなく、人間が感じる時間で更新されます。
続いて、[Hierarchy] パネルで [BlobOutside] と検索し選択します。
[Inspector] パネルで [Add Component] をクリックして [Audio Occluder] を検索し追加してください。
そして、[Audio Occluder] 内にある [Cutoff Frequency] を ”1500” に設定します。
また、[Volume Pass Through] を ”0.9” に設定します。
[Audio Occluder] は IAudioInfluencer を実装して以下のことを行います。
- AudioLowPassFilter を使って遮る効果を適用します。
- AudioSource に音量を小さくするような効果を適用します。
- 効果を無効にします。
– このフィルターは、AudioEmitter によって管理される AudioSource にアタッチされます。
– これは、ニュートラルな遮断周波数を設定しフィルターを無効にすることで行います。
[Hierarchy] パネルで [SpatialMapping] を選択してください。
[Inspector] パネルで [Add Component] をクリックして [Audio Occluder] を追加します。
[Audio Occluder] で [Cutoff Frequency] に ”750” を設定します。
[Volume Pass Through] に ”0.75” を設定します。
[Cutoff Frequency]の設定では、ユーザーと AudioEmitter の間に複数の遮断物がある場合に、
フィルターにこの”750”という最低周波数が適用されます。
[Volume Pass Through] では、ユーザーと AudioEmitter の間に複数の遮断物がある場合、
この音量パススルーが追加適用されます。
次に、[Hierarchy] パネルで [Managers] を選択してください。
[Inspector] パネルで [Keyword Manager] を展開します。
[Keyword Manager] で [Keywords and Responses] -> [Go Charge] の順に展開します。
[Response()] の [No Function] を [PolyActions.GoCharge] に変更します。
また、[Come Here] を展開します。
[Response()] の [No Function] を [PolyActions.ComeBack] に変更します。
[PolyActions.GoCharge]の設定により、POLY が EnegyHub の中に移動して充電を行います。
[PolyActions.ComeBack]の設定により、POLY が ユーザーの目の前に移動してきます。
3. 室内モデル
室内モデルについて以下の概念があります。
- 空間のサイズは音源の位置決めに寄与する潜在意識的なキューを提供する
- AudioSource (音源) ごとに室内モデルを設定する
- HoloToolkit for Unity では、室内モデルを設定するコードを提供している
- 複合現実体験では、現実の空間に最適な室内モデルを選択する
仮想現実のシナリオを作成している場合は、仮想環境に最適な室内モデルを選ぶ必要があります。
配置とビルド
それでは、いつも通り配置とビルドを行います。
配置とビルドに関しては、HOLOLENS 5つのビルド方法を参照してください。
実行後、POLY に視線を向けて「Go Charge」と発話してください。
発話後、POLY が「EnergyHub」に入っていきます。
入った後の音の変化を注意して聴いてください。こもっているような音が聞こえると思います。
次に、「Come Here」と発話します。すると、POLY が目の前に移動してきます。
こもっていた音が変化するのを確認してください。
実行動画は以下です。
第三章はこれで以上です。お疲れ様でした。