見出し画像

最新のAR環境「ARKit3.5」と「AR Foundation4.0」で出来ること

デザイニウム佐久間です。

今回は2020年3月にAppleが発表したAR(Augmented Reality:拡張現実)プラットフォームである「ARKit3.5」およびUnity TechnologiesによるAR開発環境「AR Foundation 4.0」でどのようなことができるようになったのかをまとめてみました。

1. ARKitとは?

ARKitは2017年発表のiOS11以降に搭載されたARアプリ開発用フレームワークです。カメラに写された現実世界上にキャラクターやオブジェクトを投影し、拡張現実を表現するために必要になる機能をAPIとして提供しています。具体的には画像(マーカー)認識、平面認識、距離認識などの機能がARKitを導入することで実現可能になります。
その後iOSのアップデートとともにARKitもバージョンアップが続き、2020年3月発表のiOS13.4でARKitのバージョンは3.5となりました

ARKitはバージョンアップに伴い機能が追加・改良されていますが、最新の機能を動かすためにはiOSだけでなくハードウェアも最新である必要があることが多く、それはARKitの処理がiOSデバイスのハードウェアに依存する部分が大きいことが理由となります。
ARKitを動かすためにはAI処理や座標計算など膨大な計算量が必要となるため、最新モデルのiPhone / iPadにはチップ上に計算の高速化のためだけの回路(SoC:System-on-a-Chip)が搭載されています。ARKitにはこのSoCの利用が前提となる機能があるために、ARKitのフル機能が動作する機種はどうしても限られてしまいます。

ARKitの新機能の利用には、2019年発表のARKit 3でSoC(A12 Bionic)が搭載された2019年以降のモデルが必要になり、さらに今回のARKit 3.5では2020年3月に発表されたLiDARスキャナを搭載したiPad Proが必要になりました。

2. ARKit 3.5の新機能

バージョン3.5の特徴はLiDARスキャナへの対応です。LiDAR(Light Detection and Ranging)とは、センサーから不可視光を周辺へ照射し、その反射光をスキャナで計測することで、センサーから周辺の物体までの距離を物理的に得ることができるという技術です。MicrosoftのKinectやHoloLens、IntelのRealSenseなどに搭載されている深度センサーもこの方式です。
今までのARKitは画像認識とジャイロ・加速度センサーによる位置推定でARを実現していましたが、それだけでもかなりの精度と速度が出ていましたので、ここにLiDARスキャナによる深度データが加わることでより高精度・高速度が期待できるようになったというわけです。

画像3

カメラユニット右側中央のデバイスがLiDARスキャナです。

そして肝心のARKit3.5で追加された新機能ですが、もちろん様々な細かい改良もあるものの(公式サイト参照)、大きな目玉となる追加機能としては二つあります。

一つ目はオクルージョン(奥行き表現)の強化です。

ポケモンGOのARモードなどを利用された方ならイメージしやすいかと思いますが、今までのARではあくまでカメラ映像の上に3Dオブジェクトをレイヤーするという形でしか拡張現実を表現できなかったため、本来ならばカメラ上の手前の障害物で隠されなくてはならない3Dオブジェクトが、映像上どうしても手前に描写されてしまい、ARの現実感を大きく損なっていました。

ここにLiDARスキャナで得られる3Dマップを組み合わせることで、2次元画像であるカメラ映像に3次元的な情報を紐づけることができるようになったため、より現実に近いオクルージョンの表現が可能になりました。

そして二つ目がモーションキャプチャです。

こちらについては既にKinectやOptiTrack、VisionPoseなど類似の技術は存在しますが、カメラに写した人物の映像から3Dボーンデータを取得することができるという機能です。こちらはオクルージョン機能とは違い、LiDARスキャナが搭載されていない機種でも動作する機能になっています。前バージョンのARKit3から使えた機能ですが、今回のバージョンアップでより実用的な精度になったようです。
前述の類似技術のように特別な機材やソフトウェアが必要なく(精度や速度の違いなどはともかくとして)、広く普及しているiPhone / iPadだけあればボディトラッキングが利用できるのは大きな利点であり、今後かなり適用範囲が広がりそうです。

3. AR Foundationとは?

AR FoundationはUnityの追加ライブラリの一つでARアプリを開発するためのマルチプラットフォーム対応の開発環境です。

前述のARKitはあくまでiOS固有のARフレームワークであり、AndroidにはARCoreという別のARフレームワークが用意されています。つまり、iOS / Androidの両方に対応したARアプリを開発しようとなった際には、厳密にはARKit用とARCore用の実装を別々に用意する必要があるのですが、本当に一つ一つを別々に実装するとなると、アプリの対応プラットフォームを増やすたびに開発コストが倍々になっていってしまいます。
これを解決するために、プラットフォームごとの実装差異を吸収して、一つのプロジェクトでiOS / Android / MagicLeap etc...といったクロスプラットフォームに対応するアプリを開発することを可能にしたUnityのサブシステム群がAR Foundationです。

またAR Foundationが登場する以前から、UnityにはVuforiaというクロスプラットフォームのAR開発フレームワークが標準で搭載されています。こちらも多く利用されてきており参考文献も多いのですが、Unity Technologiesとしては今後のAR開発はAR Foundationに主軸を移していきたい考えのようです。
登場としては後発のAR Foundationですが、バージョンアップを経て機能的にはVuforiaとほぼ同様のことが実現できるようになってきており(精度・速度など細かいパフォーマンスの違いはさておき)、またARKit・ARCoreの最新機能への対応はAR Foundaitonの方が迅速に行われています。ARKit 3.5の発表に伴いAR Foundationもそれに対応したバージョンアップが行われ、現在4.0というバージョンになっています。

ということで、今後はARアプリの開発にはUnity + AR Foundationという環境が用いられるのが主流になっていくだろうと思います。

実際にUnityでAR Foundationを使用する際は、UnityのWindowメニューからPackage Managerを開き、検索枠に「AR」と入力します。

画像3

絞られた中から「AR Foundation」「AR Subsystems」「ARCore XR Plugin」「ARKit XR Plugin」そして顔認識の機能を使用するときは加えて「ARKit Face Tracking」のそれぞれ最新バージョンをインポートしてください。これで使用準備は完了です。

またAR Foundationのドキュメントも公式から公開されていますので是非目を通してみてください(リンクはこちら)。
こちらのドキュメントを見ると分かりますが、各プラットフォームでコアフレームワークがサポートする機能が異なっているため、全てのプラットフォームで全てのAR機能を使うことは現状できません。現段階ではARKitが機能面でかなり先行しているため、iOS(+特定機種)のみで利用できる機能が多くなっています。

4. AR FoundationのSampleプロジェクト

Unity公式からAR Foundationのサンプルプロジェクトが公開されています(リンクはこちら)。このサンプルプロジェクトにAR Foundationで利用できる機能はすべて網羅されています。Githubページから「arfoundation-samples」のリポジトリをチェックアウトもしくはダウンロードしてUnity(2020.2以上)からプロジェクトを読み込むことで利用できます。

プロジェクトを開いたのち、サンプルを書き出す際は以下のようにBuild SettingsのScene In Buildの中から書き出したいサンプルのシーン1つだけをチェックしてBuildを行います。

画像1

iOSに書き出す場合、XCodeのプロジェクトが書き出されますので、これをXCodeから開いてデバイスにパブリッシュします。

今回はARKit 3.5の新機能であるHumanBodyTrackingとMeshes関連のサンプルを実際に書き出して試してみたいと思います。

4-1. HumanBodyTracking

モーションキャプチャ関連のサンプルにはHumanBodyTracking2DHumanBodyTracking3Dがあり、それぞれ生成されるボーンの関節情報が2D座標系か3D座標系かの違いになります。今回は3Dの方を動かして動画を撮影してみました。

立ちポーズの再現に関してはかなり正確で、後ろを向いた時も取得できるのが素晴らしいですが、体の向きの取得がちょっと甘いかな?という感想です。ちょっと斜めを向いたりブルブル震えたりすることがあります。あと屈んだ時の動作はちょっとまだ怪しい部分が多いです。加えて、現状では取得できるボーンは画面内に一つだけという制限があったりなど、普段KinectやVisionPoseなどを使用している身からすると、正直もうちょっと頑張って欲しい部分はまだ多いですw

と少しケチをつけてしまいましたが、これが特別な機材が必要なくiPhoneやiPadだけがあれば動くと考えると十分に多様な用途が考えられます。たとえばVTuberのアバター用などの用途なら、体の向きについては体軸を固定することが多いので向きの取得が甘いのはカバーできそうですし、上半身のトレースについては十分な精度が出ていましたので実用的ではないでしょうか。

4-2. Meshes

Meshesはオクルージョンの実現に必要な3Dメッシュ情報を取得するサンプルで、LiDARスキャナ搭載機種でのみ動作します。PlaneDetectionと似ていますが、今まで平面検出は水平・垂直くらいの精度でしか取得できなかったものが、より詳細な立体情報として取得できるようになりました。

サンプルのClassificationMeshesを動かすと、生成されたメッシュ情報をグラフィカルに閲覧することができます。

動画を見てもらうと、床・壁・机などの平面は相当に高い精度で検出されているのはもちろん、いす・机の上の物体などについてもそれぞれジオメトリ化されているのが分かると思います。タップするとボールが発射され、それぞれのメッシュがちゃんと3Dのジオメトリとして動作していることが分かります(サンプルそのままだとボールの勢いが強すぎるので、少し弱めるのがおすすめですw)。メッシュの生成範囲は、カメラから大体5m以内になるようです。
現状ではカメラを動かしながらだと、メッシュの生成までに若干のタイムラグがあります。視点固定ならば問題なさそうですが、カメラをグリグリ動かすような使い方だと注意が必要かもしれません。

そしてOcclusionMeshesのサンプルで、実際にオブジェクトオクルージョンを試すことができます(サンプルそのままではあまりオクルージョンの効果がよく分からなかったので、少々変更を加えています)。

ボールを生成してからカメラを動かすと、手前の障害物でマスクされてちゃんと隠れたように表示されます。また机の上から転がり落ちるボールの動きにも注目してみてください、かなり現実に溶け込んだ動きをしています。

箱などの四角いものや、机・いすなどのサイズが大きいものが対象なら、かなりいい感じにオクルージョンが動きます。ただ小さい物体や複雑な形をした物体になると、まだちょっとメッシュの精度が荒いため、マスクが上手くいかなかったり、深度が取得できなかったりするようです。

5. まとめ

今回はARKitの新機能を試してみましたが、これをすぐに案件に使用できるかと言うと、まだちょっと細部の詰め・精度が足りないと思わされる部分が多く、かなり限定的な使い方になってしまうかなと思います。
ただし、今後の発展の可能性はとても大きいと感じます。例えばオクルージョンメッシュの生成サイズが今の倍の粒度になってくれると、もうそれだけで全然世界が変わりますね。ボディトラッキングも学習データがこなれてくれば間違いなく精度は上がっていくはずです。

3から3.5へのマイナーチェンジということもあり、今度もARKitはブラッシュアップされていく事は間違いないでしょうし、iOSに限らず今後のAR技術の進化に期待していきたいです。

編集後記

こんにちは、広報のマリコです。3月に登場してから話題のARkit3.5 とARFoundation4.0ですが、テスト動画なども交えてわかりやすくまとめてくれました!特別なセンサーがなくてもiPhoneやiPadでこのようなことが出来るようになっているなんてほんとに凄いですよね!普段からキネクトやVisionPoseをつかっているという佐久間ならではの視点も参考にしていただければ幸いです。今後のアップデートも楽しみですね😊

The Desinium.inc
Interactive Website
The Designium YouTube Channel
Facebook
Twitter

この記事が気に入ったらサポートをしてみませんか?