AppleのARKitについて調べてみた
はじめに
AppleのARKitに最近興味がわいたので、今回調べてみました。
Appleの公式ドキュメントを読んでまとめつつ、補足をつけたりしています。
アプリの制作方法は次の記事でまとめたいと思います。
ARKit とは
OSデバイスのカメラとモーション機能を統合することで、iアプリやゲーム内で拡張現実体験を提供するフレームワークです。
具体的には、デバイスのモーション機能、カメラによるシーンのキャプチャ、高度なシーン処理、便利さの表示を組み合わせて、AR体験の構築を単純化しています。
ARKitを使ったデモ例
こちらはARKitとUnityを使ってロボットが部屋の中で踊るデモです。
床の上を綺麗に動き回っているのが特徴的です。他にも様々なサンプルアプリが世に出回っているみたいです。
ARKitを利用するには(デバイス側)
A9以降のプロセッサを搭載した、iOS11以降のOSがインストールされたデバイスが必要です。
ARKitを利用するためには(アプリ側)
ARKitをサポートしたデバイスのみでアプリを動作させるには、アプリのInfo.plist
のUIReauiredDeviceCapabilitiesセクションの中でarkitキーを使用してください。
もし、AR機能がアプリにとって二次的な機能ならisSupported
プロパティを使用してください。
ワールドトラッキングの仕組み
現実世界と仮想空間の間の対応関係を構築するために、visual-inertial odometryという技術を使用しています。
visual-inertial odometryとは
iOS デバイスのモーションセンサーとカメラから見えた映像の分析結果を結合するプロセス。
ARKitはシーン画像内の特徴点を認識し、その特徴点からのずれを追跡し、モーションセンサーからのデータと比較することで、高い精度でデバイスの位置と動きを得ることができます。
ARKitができること
- 平面検知
- ARHitTestResultクラスを使えば、カメラ画像内にある平面(現実世界における)を検知
- planeDetectionをenableにすることで、ARKitはカメラ内の平面を検知し、その位置とサイズを知らせてくれる
- それ以外はできないのかな?(まだよく分かっていませんが)
- Tangoは平面だけでなく壁や特徴点の3次元座標を取得可能だったがARKitは平面検知しか行えないっぽい
- Tangoは学習した現実空間の座標情報をADFファイルとして保存し、アプリ起動時に読み込むことで以前に学習した空間とのマッチングを行うことができたが、ARKitにその機能はついていないみたいです
ARKitを使用するコツ
- 明るい環境での使用を促す
- ワールドトラッキングはカメラ画像をもとに行われるため、暗い場所や細部が見えない環境では精度が落ちてしまいます。
- トラッキングがうまくいっているかユーザにその都度知らせる
- 時間をかけて平面検知を行い、必要とする平面が検知されたらそれ以降は平面検知をしないようにする
- 平面検知の結果は時間とともに変化する。なぜなら、ARKitはシーン内の情報を常に更新し、その情報をもとに平面の情報を上書きし続けるからです。(これはつまり、一番最初に検知した平面は不正確な場合があるということです)
様々なクラス
ARKitのAR機能を使うためにいくつかのクラスが用意されています。
ARSessionクラス
- 拡張現実体験に必要なデバイスカメラとモーション処理を管理する共有オブジェクト
- ARKitが拡張現実感を作成するために実行する主要なプロセスを調整
- AR機能を使うためには、このARSessionオブジェクトが必要
- ARSCNViewやARSKViewオブジェクトを使用する場合はARSessionオブジェクトが生成されているが、自分でARコンテンツを自作する場合は、ARSessionオブジェクトを生成し、扱う必要がある
ARWorldTrackingConfigurationクラス
- デバイスの動きを6軸自由度(6DOF)を使ってトラッキングする設定
- 3つの回転軸(roll, pitch, yaw)
- 3つの平行移動軸(x, y, zの移動)
- これらの情報とカメラ画像を組み合わせることで、仮想の物体を現実空間に配置することができる
AROrientationTrackingConfigurationクラス
ARConfigurationクラス
- 抽象クラス
- 具象クラスとしてARWorldTrackingConfigurationクラスとAROrientationTrackingConfigurationクラスが存在
まとめ
- ARKitは現実空間にARオブジェクトを配置する技術
- カメラ画像とモーションセンサーのデータを使ってそれを実現
- 現在、カメラ画像内の平面検知が行えるため、平面の上に物を置いたりすることができるみたい
- iPhone6s以降に発売された端末で利用できる