音のAR   - 視覚拡張だけがARじゃない！-

音をAR表現してみました。
昨年末に作ったコンテンツですが、せっかくなので共有します。


# 音のAR
最近AirPodsProを使い始めたのですが、**ヘッドトラッキング機能**に驚きました。
右側を向くと正面から聞こえていた音が左側から聞こえます。映画を観ている時、どんなに頭を動かしてもディスプレイから音が聞こえてきます。

**音の定位がずっと固定されているので、"その場にいる感"があり臨場感が高まります。**
（加速度センサーから頭の動きをトラッキングしているのですが、あの小ささの中に加速度センサーが載っているなんて驚きです...)
 
頭の回転運動を検出して音の定位を固定できますが、**歩き回った時にも音の定位を固定できたら面白そう**だと思い、音のARを作りました。

ちょうどショッピングモールで、クリスマスツリーのイルミネーションやライトアップがされていたのでここに仮想音源を配置し、音のARを作りました。

![5.1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006690/9f487d4e-ce2f-a0b6-c105-9e8b2b700274.jpeg)

![5.2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006690/83c922fd-cae2-0b54-b551-ed56fabed09f.jpeg)

<br>

# 開発の流れ
## 使用した技術
- **Immersal**
 - 空間データの作成
 - スマホの自己位置推定
Immersalの概要についてはこちら<br>
[ヘルシンキの「Immersal」が都市規模のARマッピングソリューションに照準！](https://ar-marketing.jp/ar-mapping-solution-by-immersal/)

- **Unity**

- **AirPodsPro & iPhone**
AirPodsProだけでは[3DoF](https://xr-hub.com/archives/9526)しか出来ないので、今回はiPhoneと接続して使用することで[6DoF](https://xr-hub.com/archives/9526)を実現しました。

<br>

## 1. 空間マップ作成
今回スキャンしたいエリアの幅は約100mと広かったので3箇所に分けてスキャンし、後でそれぞれのマップを結合します。

**1マップにつき約30枚程度撮影しました。**
1歩進むごとに1枚撮影していたので周りから凄く見られましたが、もくもくと撮影し続けます。


こちらがスキャンした空間データ(点群データ)です。

- **クリスマスツリー**
![2.3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006690/58b1083a-d60e-9988-da05-d1b15d5a7409.png)


<br>

- **並木**
![2.2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006690/587d24f8-bec1-cf64-ebd0-969c5853488c.png)

<br>

- **並木道**
![2.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006690/c2afcf19-d4ab-1116-5d9f-20c4a5fc3e3e.png)





<br>

## 2. マップ合成
ImmersalのDeveloperPortalで空間データを選択し、結合ボタンを押すだけで複数のマップを1つに結合されています。

![2.4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006690/e2acc2b0-f7e7-08a6-bb70-d5836cacec86.png)


各マップの境界もきれいに結合されています。

<br>

## 3. 音の配置
作成した空間マップをUnityに取り込み、音をそれぞれの場所に配置していきます。

空間マップをUnityで読み込み、マップ内に**クリスマスソング**と**鈴の音**の音源を配置しました。

![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006690/a0d1bf02-b763-3994-d91e-8d91e882f19b.png)

**MinDistance**(上画像の内枠球)と**MaxDistance**(上画像の外枠球)を設定して、音源に近づくにつれ音量が大きくなり、範囲外に出ると音が聞こえなくなるようにします。

AudioSourceを以下のように設定しました。
- **Spatial Blend**
音源の位置によって左右から聞こえる音が変わる
- **3D Sound Settings**
音源からの音が減衰する距離を設定

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006690/c35db093-c1cf-1e23-f0f9-37372123e6cd.png">

<br>
# 開発Tips
## 夜のスキャンについて
Immersalのスキャンでは、複数画像にある共通の特徴点を元に3Dデータを作成しています。

今回スキャンした場所はイルミネーションされていて色が頻繁に変わるので、特徴点が取れず3Dデータが崩れやすかったです。

**対策として、近くの建物を利用しました。**

![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1006690/f51dea65-db7a-fc7c-30c5-19acbd5b8fb2.png)

今回の空間マップを見てみると、イルミネーションがされてる場所だけでなく、少し離れた場所の建物や看板もきれいにスキャン出来ています。「モールのライト＋イルミネーションの光」があるので、周りの建物もある程度明るかったので認識できたようです。


**3Dマップは結構粗いですが、Immersalを使う目的はスマホの自己位置推定することなので、
クリスマスツリー等の背景にある建物を認識して自己位置推定してくれれば十分目的を果たせます。**


## iPhone LiDARを使って補正マッピング
**Immersalは広い空間マップを作るには向いていますが、細かい箇所の精度はあまり高くない**ので、正確にオブジェクトを配置するのは難しいです。

そこでiPhone LiDARを使うこと有効だと思いました。

iPhoneのLiDARでは、数mm単位で綺麗にスキャンできます。Unity上でiPhoneでスキャンした3DモデルとImmersalの3Dモデルの位置を合わせることで、ARオブジェクトの位置を思った通りの配置できます。

<br>

# デモ
今回は音のARなので、動画で伝えられないのが残念です。**（体験を共有できないのが音のARの弱点かも...）**

ですが、やってみると結構面白いです。**曲を聞きながら並木に近づくと、だんだん音がフェードアウトし別の曲や鈴の音が聞こえてきます。**

スマホは、カメラが景色が写していればどんなに動かしても空間マップとの位置ずれはありませんでした。

# まとめ
- 音のARは想像以上に面白く、今までに体験したことのないものだった
 
- **ほとんどコードを書かず、簡単で高クオリティに作れるのが特徴的**
 
- 視覚的なARコンテンツより没入感がありました。3Dモデルよりも音の方が現実感があって、脳が仮想世界を補ってくれる。位置づれの影響が少ないのも理由としてある。
 
- **AirPodsProのようにヘッドトラッキングすることで没入感が段違いに高まる。**
 
- [SoundAR](https://www.sony.com/ja/SonyInfo/technology/stories/SoundAR/)というのが既にあったが、スマホの向き(姿勢)を元に音が出ているので横を向いたり、振り向いたりしても音は変化しないのでリアル感が減りそう。

- **観光地や美術館での音声案内など色んな場所に使えそう**

- 建物内の別階でも、それぞれ自己位置を正しく認識できるのか試してみたい

- **複数の端末間で音源の再生タイミングを同期させれば、数人でも一緒に楽しめそう**

- LiDAR搭載のiPhone欲しい


<br>