【Unity】AR Foundationを使いこなそう! – ARCoreとARKit3を同時開発!
これまでUnityでモバイル向けAR開発を行う方法としては、Vuforia Engine、Unity ARCore SDK、Unity ARKit Pluginなどが代表的でした。
しかし、あるプラットフォーム向けに作ったものを、さらに別のプラットフォーム向けに変換する作業はかなり手間が掛かります。
また、先日発表されたARKit3の機能は、Unity ARKit Pluginには実装されませんでした。
今回は、今後UnityでARを開発する際の基礎となる、AR Foundationのご紹介です。
AR Foundationとは
AR Foundationとは、Unityが作っているARアプリケーション開発用のパッケージです。
ARに関する共通な基本機能をひとまとめにし、各プラットフォーム向けARアプリ開発を最小限の変更で行う ことを目的としています。現在はまだプレビュー版で(※2019.2より正式版となりました)、サポートするプラットフォームはARCoreとARKitのみですが、順次を増やされる模様です。
Googleの提供するARCore SDK for Unity、Unity Technologiesが提供していたUnity ARKit Pluginとの関係性は、下の図・表のようになっています。
ARCoreの方は、ARCore SDK for UnityにあってAR Foundationにない機能がまだ一部あります。
ARKitの方は、 Unity ARKit Pluginが2019年6月で非推奨にされた ので、最新の機能(ARKit3以降)をUnityで開発するには、AR Foundationを用いるしかありません。
かなりハイペースで機能拡充が行われる様子なので、表は随時更新していく予定です。
※注意: Fig 1とFig 2はUnity公式ブログの投稿から引用しました。一部最新の情報ではない部分を、執筆時に修正しています。
※補足: 公式資料は、各パッケージごとに Package Manager内のリンク から見ることができます。全体的な動向を知りたい場合は、Unityのフォーラムを見ましょう。
開発環境を準備する
AR Foundationを通して、ARCore・ARKitを開発するには、次のものが必要です。
- Unity AR Foundationパッケージ
- Unity Ver. 2018.4 → Ver. 1.5
- Unity Ver. 2019.1+ → Ver. 2.2
- Unity ARCore XR Pluginパッケージ
- Android Studio
- Android SDK(Ver. 7.0、APIレベル24以上)
- Android NDK
- Unity ARKit XR Pluginパッケージ
- ARKit2 → Ver. 2.1
- ARKit3 → Ver. 2.2
- Unity ARKit Face Trackingパッケージ
- ARKit2 → Ver. 1.0
- ARKit3 → Ver. 1.1
- Xcode
- ARKit2 → Ver. 10
- ARKit3 → Ver. 11 Beta
言わずもがな、2〜5番目はARCore用、6〜8番目はARKit用です。
先ずは、AR Foundation (1)、ARCore XR Plugin (2)、ARKit XR Plugin (6)、ARKit Face Tracking (7)をインストールしていきましょう。
Unityエディタで、Window – Package Managerを開いてください。
左上のドロップダウンメニューで「Show preview package」を選択し、 プレビュー版のパッケージも見える状態に します(※2019.2以降をご使用の方は不要です)。
最後に、所望のバージョンの各パッケージを選択すれば完了です。
サンプルも含めて欲しい場合は、このGithubレポジトリからダウンロードします。
先ほど同様、所望のバージョンのものを選択しましょう。
本記事の後半では、 AR Foundation Ver. 1.5のサンプル を用いて解説していきます。
Android Studio (3)、Android SDK (4)、Android NDK (5)のインストール方法に関しては、次の記事をご覧ください。
(関連記事:【Unity】ARCoreでARアプリ開発 – 環境構築から実装まで徹底解説!)
Xcode (8)は、App Storeからインストールすることができます。
※注意: AR Foundation Ver. 1.5以上は、Ver. 1.0への後方互換性が無いようです。公式移行ガイドが用意されているので、詳しくはそちらをご覧ください。
サンプルアプリ「SimpleAR」を動かす
先ほどのサンプルをUnityで開くと、各機能ごとにシーンを割いてくれているのが分かると思います。
ここでは、最小構成なサンプル「SimpleAR」を例に、ビルド方法と、AR Foundationにおける基本的なアセット構成について見ていきます。
ビルドする
ARCore・ARKitともに、基本的なビルド方法は各SDKの場合と同様なので、詳細は関連記事をご覧ください。
ARCoreでの注意点は、Player Settings – XR Settingsで、 ARCore Supportedにチェックを入れない ことです。
ARKitの方は、 各パッケージやツールのバージョンに注意 しましょう。ARKit3関連のものは、古いXcodeでビルドエラーとなってしまいます。
(関連記事:【Unity】ARCoreでARアプリ開発 – 環境構築から実装まで徹底解説!)
(関連記事:【Unity】ARKitでARアプリ開発! 開発環境構築からサンプルアプリの実装まで)
各アセットの解説
以下のARSession、ARSessionOriginとその配下のARCameraが、AR Foundationで基本となる陣形です。
ここでは、そうしたアセットに加え、付随する重要なコンポーネントに関しても見ていきます。
ARSession
ARのプロセス全体を管理しています。
ARCore・ARKitでも、ARの一連のプロセスのことを「Session」と呼ぶので、馴染み深いかと思います。
新しいシーンには、GameObject – XRから追加することが出来ますが、 プロジェクトにただ一つしか置けない ことに注意しましょう。
付随するARInputManagerは、 端末のセンサ情報を後述するTrackedPoseDriverに渡す という役割を担うので、これも必須なコンポーネントです。
ARSessionOrigin
現実空間とUnity空間の座標系を橋渡ししています。
全ARオブジェクトの座標はSession Spaceという座標系で管理されますが、 その現実空間での原点がSession開始時の端末の位置で、Unity空間での原点がARSessionOrigin というわけです。
よって、ARオブジェクトをこの子オブジェクトにすることで、それらの位置関係を保つだけではなく、スケールの問題を回避することも出来ます。
ARSessionと同様、GameObject – XRから追加することができ、デフォルトで配下にARCameraが付いています。
ARCameraを複数設置する場合、このARSessionOriginも同じ数だけ用意しましょう。
TrackedPoseDriver
端末のカメラ映像とセンサー情報から、その位置と姿勢を取得します。
ARSessionOrigin配下のARCameraにデフォルトで付いています。
オプションに関して、詳しくは次の記事(方法2-2)をご覧ください。
(関連記事:【Unity】ヘッドトラッキングを簡単にスマホで実装する方法 -Vuforia、ARCore、ARkitまで)
ARCameraBackground
端末のカメラ映像を、ARカメラの背景としてレンダリングしています。
これもARSessionOrigin配下のARCameraに付いています。
レンダリング方法も細かく設定できるようになったのに合わせて、LWRP(LightWeight Rendering Pass)も選択できるようになりました。
LWRPは、 モバイル端末でリアルタイム・レンダリングする際のパフォーマンス向上を図る もので、Unity Lightweight RPパッケージを追加でインストールすると使用できます。
他のサンプルアプリを動かす
SimpleAR以外にも、ARCore・ARKitの各機能ごとに様々なサンプルが用意されています。
先ほどの基本陣形にスクリプトを追加する形で、各機能が実装されています。
各スクリプトの役割・使い方を学ぶには、 公式ドキュメントとともに、丁寧に書かれたコード中のコメントも読むと良い と思います。
- ARCore・ARKit共通
- LightEstimation :環境光推定
- ImageTracking :画像認識(マーカーAR)
- FeatheredPlanes :平面認識
- FaceMesh、FacePose :顔認識(メッシュ・姿勢)
- Scale :ARSessionOriginのスケール調整
- SampleUXScene :UXの例
- SampleLWRPScene :LWRPの使用
- CameraImage :CPU上のカメラ映像を取得(画像編集)
- ARCore
- ARCoreFaceRegions :顔認識(各部の位置)
- ARKit
- ObjectTracking :3Dオブジェクト認識
- ARKitFaceBlendShapes :顔認識(表情、複数)
- EnvironmentProbes :環境光+色推定
- ARWorldMap :AR空間の情報を保存
- HumanBodyTracking2D/3D :人間の身体の骨格を認識(ARKit3)
- HumanSegmentationImages :人間の身体の輪郭を認識(ARKit3)
- ARCollaborationDataExample :AR空間の共有(ARKit3)
- RearCameraWithFrontCameraFaceMesh :前後カメラ同時使用(ARKit3)
まとめ
以上、UnityでARを開発する際の基礎となる、AR Foundationのご紹介でした。
最初はベータ版をリリースしやすいARCore向けで組み、細部まで詰めてから国内ユーザ数の多いARKit向けに焼き直すなど、開発を効率よく進められて大変便利です。
プレビュー版で安定しない部分もありますが、かなりハイペースで開発が行われている模様なので、自分もそれに貢献する気概で使っていきましょう。
それでは、楽しいXR開発を!
この記事はいかがでしたか?
もし「参考になった」「面白かった」という場合は、応援シェアお願いします!