怠慢プログラマーの備忘録

怠慢でナマケモノなプログラマーの備忘録です。

【Swift】詳解 iOS ARKit(随時更新)

WWDC2017(Worldwide Developers Conference 2017)が2017年6月5日〜9日に開催されました。

その際の目玉となったのが"ARKit"です。

iOS11からARKitというフレームワークが使用可能となります。

そのARKitについて公式ドキュメントを参考に解説していきます。

Apple DeveloperApple Developer Documentation      

ARKitとは

ARKitは、iOS11以降かつiPhone 6s以降(A9チップ以降)で利用できるようになるARフレームワークです。 追加のハードウェアが不要なので、iOS 11が公開されると同時に全世界で数千万台の実行環境が生まれる事になります。 カメラ画像に加えて端末のセンサーを駆使している点、OSレベルで処理される点から、従来のARライブラリよりも低負荷、高精度であるとされています。またiOSに標準で含まれるため無料で利用できます。

現にWWDCAppleスタッフが、

Appleの純正フレームワークは公開APIよりもっと下のレイヤーを利用した実装ができるので、
サードパーティ製の実装よりもハードウェアに最適化されている。
よってバッテリー消費量や処理速度の面で優れていると考えられる。

と明言しているようです。

2017/08/30現在では、iOS11とXcode9 betaが必要となります。 Apple Developer Program に登録する必要があります。 なお、実行環境には「A9以降のプロセッサーを搭載したiOS機器すべてで利用できる」 とありますので、、iPhone 6s以降のiPhoneiPad Proおよび第五世代iPadが対 象です。     そこで、ARKitではSceneKit、SpriteKit、Metalが使用できます。

SceneKit(シーンキット)
SpriteKit(スプライトキット)
Metal(メタル)
  • 上記2つより下位レベルのフレームワーク
  • MetalにするとRendererクラスが実装されたかなり重めのテンプレートができる
  • 上記2つとの違いは自分でARSessionを管理しなければいけないというところ
  • 逆に言えばそれだけSceneKitやSpriteKitに左右されずに実装できる    
ARKitでできること
  • 現実空間での自分(iOS端末)の位置と向きを取得 この位置と向きは、カメラとセンサ情報を元に構成した3D空間内での相対位置です。
  • 机や床などの平面を3D空間上の平面として取得 ARKit起動後にカメラの位置などを移動したりして3~4秒ほどかかる。
  • 現実空間内に存在する物体について、点単位で3D空間上の座標を取得
  • 周囲の明るさを単一の数値として取得
  • 3D空間と現実空間のスケールが一致しているので、床との距離や机の長さを測るといった事もできそう
ARKitでできないこと
  • 現実空間の何かしらの物体との位置づけ
  • 予め登録した画像や物体を検知/追跡するマーカートラッキング的なこと
  • よくあるB612とかsnowとかで使われる顔認識はVisoinというフレームワークができるらしい...

詳解 Swift 第4版

詳解 Swift 第4版