ARについての技術やこれからの展望などをまとめました



アヴァント株式会社でARを担当している@y_takaです。
ARについて自分なりに調べたことやこれからの展望などをメモとしてまとめてみました。
これからARについて学ぶ方や興味のある方などのご参考になればと思います。

#ARとは
最初にARについての簡単な説明から入ります。
Wikipediaで検索してみると、ARについては以下のように解説されています。

>拡張現実（かくちょうげんじつ、英: Augmented Reality、オーグメンテッド・リアリティ、AR）とは、人が知覚する現実環境をコンピュータにより拡張する技術、およびコンピュータにより拡張された現実環境そのものを指す言葉。

出典：https://ja.wikipedia.org/wiki/%E6%8B%A1%E5%BC%B5%E7%8F%BE%E5%AE%9F

人が知覚する現実環境、つまり僕たちが普段接している現実に何かを足したり引いたりして拡張していこうというものですね。
パッと思いつくのは現実にバーチャルの3Dモデルを置いてみることだと思います。
![IMG_0099.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670074/faaadd3e-6b83-4808-b38f-e61cdf94a6d2.png)
画像の右にあるカップは現実のもの、左にあるキャラクターはバーチャルの3Dモデル、我が社のさくらちゃんです。
現実に3Dモデルはいません。しかし、スマホやタブレットなどのデバイスを通してみると、テーブルの上には拡張された現実が広がっています。

AR自体は視覚に限った話ではなく、聴覚や嗅覚など人の全ての感覚を拡張するものであると言えます。
視覚以外ですと聴覚が分かりやすいですね。視覚と合わせてその場にバーチャルで楽器を演奏させたり、人の話し声が聞こえてきたりと、どんどん活用が進んでいます。
Niantic Rhizomatiks Demo：https://youtu.be/TWss6XPfSSk

###VRとの違い
ARと一緒に話題になることが多いVRですが、2つの違いは

- **AR：今ある現実を拡張するもの　現実 + α**
- **VR：現実をバーチャルに置き換えるもの　現実α → 現実β**

という解釈を僕自身はしています。
VRは現実を一から作るという点で、現実に何かを足したり引いたりするARとは違ったテイストを楽しむことができます。

今回はARの中でも視覚について話をさせていただきます。そのため、今後ARという表記については視覚のARと同義となります。

#ライブラリの種類
ARについてはいくつものアプリがすでに出回っていますが、そのアプリを支える技術とそれをまとめたライブラリにはいくつか種類があります。
詳細についてはxr-hub様がまとめられています。
[AR用SDK全17個を徹底比較！ – 開発ターゲット・機能・料金を一覧表付きで解説](https://xr-hub.com/archives/19053)

今回はその中でも3つほど紹介させていただきます。

###ARKit
Appleが提供しているライブラリです。平面検出やフェイストラッキング、モーションキャプチャまで一通りの機能が備わっています。
最近ではiPadProやiPhone12Proなどに搭載された**LiDAR**という技術を使ってさらにARが使いやすくなりました。
また、2021年から2022年にかけて**ARグラス**を出すのでは、という噂があります。
※ARグラス：メガネ型のARデバイス

###ARCore
Googleが提供しているライブラリです。iOSのAppleにAndroidのGoogleと、スマホのOSを持つ２社がAR技術の開発を進めている感じですね。
ARCoreもARKitと同様にARに関する一通りの機能が備わっています。
開発者側のメリットというわけではありませんが、Googleはその**検索エンジンを使ってARをより身近に体験できる**という強みがあります。
[検索で3Dと拡張現実を体験する](https://support.google.com/websearch/answer/9817187?co=GENIE.Platform%3DAndroid&hl=ja)

###Vuforia
ARKitやARCoreはスマホで使うものですが、VuforiaというライブラリはPCやHoloLensというヘッドマウントディスプレイにも対応しています。
こちらは@kot10n5tnさんがとても分かりやすい記事を投稿されていますので紹介いたします。
[今一番ホットなARライブラリ「Vuforia」とは](https://qiita.com/kot10n5tn/items/b0cc615206e806dd2904)


###番外編：マルチプラットフォームのライブラリ
ここまで紹介した3つのライブラリですが、ARKitやARCoreなど別々に開発するとなると、それぞれの言語（Swift/Java,Kotlin）の習得が必要になり大変です。
この課題を解決するために、最近では以下のようなマルチプラットフォームのライブラリが登場しています。

- **AR Foundation / Unity**
- **UnrealEngine AR Framework / UnrealEngine**

これらのライブラリの魅力は、1つのプロジェクトを作成すればビルド時にデバイスによってARKit/ARCore/Vuforiaを使い分けてくれることです。
モバイルアプリ開発のFlutterやReactNativeと感覚的には近いですね。

さらに最近ではIngressやポケモンGOなどを展開する[Niantic](https://nianticlabs.com/en/)が新しいARのライブラリを出すそうで、こちらも注目したいところです。

#3Dモデルの表示方法
さて、AR体験のメインとも言える現実へのバーチャルの3Dモデルの表示ですが、こちらもいくつか方法があります。

###マーカー
最初の方法は専用のマーカーを使うものです。
ARで検索すると、以下のような画像を見たことがある方も多いのではないでしょうか。
![スクリーンショット 2021-01-12 14.18.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670074/aff36156-688a-e82a-afbe-25470a5b13a5.png)
これはマーカーと呼ばれるものです。
このようなマーカーを印刷して現実世界の壁やテーブルなどに貼り付け、スマホやタブレットをかざすことで、このマーカーに紐付けた3Dモデルを表示することができます。
マーカー自体は非常にシンプルで使いやすいですが、レイアウトがある程度固まっていることと、3Dモデルの位置を変えるには現実世界のマーカーの位置を変えなければならないという点がデメリットです。

ただ、レイアウトについては上記のような四角形だけでなく、普通の画像をマーカーにすることもできます。


###平面検出
マーカーや画像を使った3Dモデルの表示については、根っこに画像解析の技術が使われていました。
この技術を応用したものが平面検出です。
カメラから取得した画像に含まれる平面を検出し、その上にAnchor（アンカー）と呼ばれる情報を敷きます。
アンカーにはAR空間を映し出すデバイスからの位置と向きが記録されており、それを3Dモデルに紐づけることで、アンカーの存在するところであればどこでも、好きな大きさ/向きで3Dモデルを表示できるようになりました。
![noi.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670074/a6c9b386-024a-5e08-bc10-0cfa8e7cc511.gif)
この映像ではテーブルと壁を平面として認識し、その上をキャビネットの3Dモデルが移動しています。
しかしテーブルに置かれたカップはすり抜けています。これはカップ自体が平面として認識されておらず、テーブルの平面として吸収されてしまっているためです。

###フェイストラッキング/モーションキャプチャ
画像解析は平面に限らず、顔や人間の動きにも対応することができます。この技術を使ったものがフェイストラッキングやモーションキャプチャと呼ばれるものです。
こちらも平面検出と同様、カメラから取得した画像をもとに、人間の関節や目・鼻・口などの特徴を検出し、そこにアンカーを敷きます。
そのアンカーに人間の顔のような3Dモデルや、人の間接の情報を持った3Dモデルを当てはめることで、顔の表示や体の動きを3Dモデルに反映させることができるようになりました。
![スクリーンショット 2021-01-12 16.49.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670074/f34ef434-078a-f051-1596-da9f375fe603.png)
昨今人気のVtuberになるアプリなどはこの技術を使っています。
なので頑張れば自分でVtuberアプリを作成することもできるのではないでしょうか。バ美肉アプリの自作は夢があります。

###LiDAR
平面検出は3Dモデルを移動できますが、その範囲は平面として認識したところのみでした。
ですので凹凸や丸みを帯びたものなどは平面として認識されないか、周りの平面部分に吸収されるような形でした。
実際にキャビネットの3Dモデルがカップをすり抜けていたものがそうです。
この課題を解決したのがLiDARという技術です。

>LIDAR（英語：Light Detection and Ranging、Laser Imaging Detection and Ranging、「光検出と測距」ないし「レーザー画像検出と測距」）は、光を用いたリモートセンシング技術の一つで、パルス状に発光するレーザー照射に対する散乱光を測定し、遠距離にある対象までの距離やその対象の性質を分析するものである。

出典：https://ja.wikipedia.org/wiki/LIDAR

LiDARは今までは自動運転で使用されていた技術でしたが、Appleが2020年に出したiPadProやiPhone12Proに搭載したことで注目を浴びました。
LiDARを使うことで、これまで平面検出では捉えきれなかった細部まで正確に、素早く認識できるようになりました。
![out.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670074/216c845d-6388-7dd3-b11c-c0c2b1df9be4.gif)
上の平面検出の映像を比べてみてください。
カップを認識できているかどうか、3Dモデルの動きでわかるかと思います。

今後AppleはこのLiDARをiPhoneに標準搭載するように開発を進めているという話ですし、ARグラスにも搭載されるのではないかと考えられています。

###位置情報
これまで紹介してきた表示方法は、あくまでもAR空間を映し出すデバイスの位置が基準になっていました。
これはそのデバイスだけでARを使う分には差し支えないのですが、あくまで相対的なものです。

なので普段現実世界の座標に使われているデータ、つまり位置情報（緯度・経度・標高）を利用する技術があります。
この位置情報を使ったARですと、AR.jsというWebブラウザで動くライブラリがありました。
実際に@te26さんが詳しい記事を投稿されています。
[GeoAR.jsでAR地図アプリを作ってみた](https://qiita.com/te26/items/7b4315635668f127204b)

最近ではARKitも地理座標に対応しました。ただこちらは2021年1月現在でアメリカのみ利用可能です。
[Tracking Geographic Locations in AR](https://developer.apple.com/documentation/arkit/tracking_geographic_locations_in_ar)

位置情報はデバイスによって異なるということはありません。なのでAさんが北緯〇〇度/東経〇〇度に置いた3Dモデルは、BさんでもCさんでも同じように見ることができます。

3Dモデルの表示されるAR空間の共有という点について補足ですが、ARKitにも`MultiPeerConectivity`という複数人でAR空間を共有する仕組みはあります。
こちらはデバイスでデータを送り合う形になるので、リアルタイムでAR空間を共有したい場合はこちらが良いのではと思います。
[Creating a Multiuser AR Experience](https://developer.apple.com/documentation/arkit/creating_a_multiuser_ar_experience)


#ARのこれからの展望について
ARに関して僕が調べてまとめたことは以上となります。
最後に今後のARについて僕なりの展望を書きます。

まず、ARについて中心というかメインに動いているのは現時点ではAppleだと思います。
その**Appleが2021年か2022年にARグラスを出す**ということは何度も話題になっていますし、これまでのARKitの進展を見ても確かにそうです。
逆にGoogleはGoogleGlassを出すのが早すぎたとも言われています。

ARグラスがどれほどの価値があるのかについて少し触れておきますと、VRがヘッドマウントディスプレイ（HMD）によって現実を完全にバーチャルに置き換えらえる一方で、ARはどうしても今ある現実を映し出す必要があります。

そのため現状ではカメラの搭載されている**スマホやタブレットをかざさなければいけません。**
（一応HMDとカメラを繋いでARを体験することはできますが、ARの面白さは家の中やゲームスペースだけでなく、普段の街中を歩いて拡張した現実を体験することだと思うので、HMDを着けた状態で街中を歩くというのはどうなの？というところです。）
![vr_train_people.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/670074/38735487-7c12-86b1-b9d9-a433fa7aa16c.png)

この**「かざす」という行為がどうしても没入感を損なってしまう**ため、これをどう取り払うかがARの課題でもありました。
**ARグラスはこの課題を解決し、それによって左右の手も自由に使えるようになります。**
モーションキャプチャの技術があれば、**自由になった左右の手で拡張された現実を操作できるようになります。**
Appleとしてはその可能性に投資してるんじゃないかなと思いました。

AppleのARグラスの話は他の企業にも聞こえているでしょうし、最近ではFacebookやLenovoなどがグラス型デバイスを出すみたいです。

なので**2021年から2022年にかけて、ARはそろそろ本格的な普及が進みそうだ**というのが僕の展望です。
皆さんもこの機会にARの技術に触れてみてはいかがでしょうか。