【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との関係性は、下ののようになっています。

Fig 1. UnityでARCore、ARKitを使う方法。Unity ARKit Pluginは非推奨にされました。

ARCoreの方は、ARCore SDK for UnityにあってAR Foundationにない機能がまだ一部あります。

ARKitの方は、 Unity ARKit Pluginが2019年6月で非推奨にされた ので、最新の機能(ARKit3以降)をUnityで開発するには、AR Foundationを用いるしかありません。

かなりハイペースで機能拡充が行われる様子なので、表は随時更新していく予定です。

Fig 2. それぞれで利用できる機能の一覧

※注意: Fig 1とFig 2はUnity公式ブログの投稿から引用しました。一部最新の情報ではない部分を、執筆時に修正しています。

※補足: 公式資料は、各パッケージごとに Package Manager内のリンク から見ることができます。全体的な動向を知りたい場合は、Unityのフォーラムを見ましょう。

開発環境を準備する

AR Foundationを通して、ARCore・ARKitを開発するには、次のものが必要です。

  1. Unity AR Foundationパッケージ
    • Unity Ver. 2018.4 → Ver. 1.5
    • Unity Ver. 2019.1+ → Ver. 2.2
  2. Unity ARCore XR Pluginパッケージ
  3. Android Studio
  4. Android SDK(Ver. 7.0、APIレベル24以上)
  5. Android NDK
  6. Unity ARKit XR Pluginパッケージ
    • ARKit2 → Ver. 2.1
    • ARKit3 → Ver. 2.2
  7. Unity ARKit Face Trackingパッケージ
    • ARKit2 → Ver. 1.0
    • ARKit3 → Ver. 1.1
  8. 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以降をご使用の方は不要です)。

最後に、所望のバージョンの各パッケージを選択すれば完了です。

Fig 3. Package Managerから4つのパッケージをインストールする。リンクから公式ドキュメントを見ることができます。

サンプルも含めて欲しい場合は、このGithubレポジトリからダウンロードします。

先ほど同様、所望のバージョンのものを選択しましょう。

本記事の後半では、 AR Foundation Ver. 1.5のサンプル を用いて解説していきます。

Fig 4. 手持ちのUnityに合った最新のブランチを選択する。

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の各機能ごとに様々なサンプルが用意されています。

先ほどの基本陣形にスクリプトを追加する形で、各機能が実装されています。

各スクリプトの役割・使い方を学ぶには、 公式ドキュメントとともに、丁寧に書かれたコード中のコメントも読むと良い と思います。

  1. ARCore・ARKit共通
    • LightEstimation :環境光推定
    • ImageTracking :画像認識(マーカーAR)
    • FeatheredPlanes :平面認識
    • FaceMesh、FacePose :顔認識(メッシュ・姿勢)
    • Scale :ARSessionOriginのスケール調整
    • SampleUXScene :UXの例
    • SampleLWRPScene :LWRPの使用
    • CameraImage :CPU上のカメラ映像を取得(画像編集)
  2. ARCore
    • ARCoreFaceRegions :顔認識(各部の位置)
  3. ARKit
    • ObjectTracking :3Dオブジェクト認識
    • ARKitFaceBlendShapes :顔認識(表情、複数)
    • EnvironmentProbes :環境光+色推定
    • ARWorldMap :AR空間の情報を保存
    • HumanBodyTracking2D/3D :人間の身体の骨格を認識(ARKit3)
    • HumanSegmentationImages :人間の身体の輪郭を認識(ARKit3)
    • ARCollaborationDataExample :AR空間の共有(ARKit3)
    • RearCameraWithFrontCameraFaceMesh :前後カメラ同時使用(ARKit3)

まとめ

以上、UnityでARを開発する際の基礎となる、AR Foundationのご紹介でした。

最初はベータ版をリリースしやすいARCore向けで組み、細部まで詰めてから国内ユーザ数の多いARKit向けに焼き直すなど、開発を効率よく進められて大変便利です。

プレビュー版で安定しない部分もありますが、かなりハイペースで開発が行われている模様なので、自分もそれに貢献する気概で使っていきましょう。

それでは、楽しいXR開発を!


この記事はいかがでしたか?よければシェアをお願いします。

緑熊