0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[ARKit]ARSessionを理解をざっくり理解してみる!

0
Posted at

ARSessionとは

ARのシーンがどのように描写されるプロセス(要はライフサイクル)を管理している。
AppleのARSessionはVisual Inertial Odometry(VIO)を技術が使用されていて、モーションセンサーで周囲の変化を検知して得たデータとカメラ(ARCamera)から取得した動画、画像をコンピュータビジョン解析した結果を組み合わせて実現している。(らしい)

ARSessionを開始した場合はデータを取るのに時間がかかるのでARCoachingOverlayViewを表示したりする。(前回の記事を参照)
また、Delegateメソッドでセッション状態遷移を検知できる

ARセッションの主な役割

  • デバイスのモーションセンサーから情報を読み込む
  • デバイスに内蔵されたカメラを制御する
  • ARシーンを生成するためにカメラから得たリアルタイムの映像を分析、処理する
  • 実世界にARオブジェクトを実際に配置して描画する

ライフサイクルの種類

NotAvaiable
カメラーやセンサーから情報を収集する前

Limted(初期化)
デバイスの位置は認識できているがARKitの機能は使えない状態
Normalに状態が遷移する間に通る

Limited(機能不十分)
カメラが塞がれたり、何も映っていない状態になった時にもこうなる。

Limited(リローカライズ)
一度セッションが中断された状態から再度Normalの状態に戻る時、中断前のセンサー情報を元に正確にARオブジェクトを表示しようとする処理が走る

Normal
ARKitの機能が使える状態

スクリーンショット 2022-04-23 21.40.09.png

状態を検知するためのDelegateメソッド

ARSessionDelegate(ARSessionObserverを継承している)
サブスレッドで呼ばれる

func session(ARSession, didAdd: [ARAnchor])
// 1つ以上のアンカーがセッションに追加されたことをデリゲートに通知します。
func session(ARSession, didUpdate: [ARAnchor])
// セッションが1つ以上のアンカーのプロパティを調整したことをデリゲートに通知します。
func session(ARSession, didRemove: [ARAnchor])
// 1つ以上のアンカーがセッションから削除されたことをデリゲート

ARSessionObserver
ARSessionObserverはARSessionDelegateが継承しているだけではなく他のProtocolでも継承されている。
全て自動でメインスレッドで呼ばれる。

トラッキングのクオリティの状態変化周りのDelegateメソッド

func session(ARSession, cameraDidChangeTrackingState: ARCamera)
// カメラでのトラッキングのクオリティの変更を通知
func session(ARSession, didChange: ARGeoTrackingStatus)
// ジオトラッキングの状態変化の通知

セッションの中断周りのメソッド

func sessionWasInterrupted(ARSession)
// セッション中断時
func sessionInterruptionEnded(ARSession)
// セッション再開時
func sessionShouldAttemptRelocalization(ARSession) -> Bool
// セッションが中断されてしまった時に自動でリローカライズするかどうかを判断する

エラー処理
func session(ARSession, didFailWithError: Error)
// ARKit側でセッションエラーが起きた時に呼ばれるメソッド。AlertControllerを呼び出しとけばOK

基本的にARKit側でセッションをよしなに管理してくれているが、もし自分でARSessionを管理したい場合は下記のプロパティをfalseにする必要がある
(デフォルトはtrue)

 var automaticallyConfigureSession: Bool { get set }

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?