第2章 ARKit 堤 修一/@shu223


2.2.3 基本クラスの解説

 最小実装での挙動を確認できたところで、上で書いたコードが何をしていたのかを把握するため、出てきたクラスについて簡単に見ていきましょう。

ARSession

 ARKitでは、そのAR機能全体をARSessionクラスを用いてセッション単位で管理します。

 ARSessionrun(_:)メソッドを呼ぶと、セッションが動作開始します。セッションが開始すると、ARKit内部でカメラからの入力の画像解析や、デバイスのモーション情報の取得・解析が開始され、現実空間の認識とデバイスのトラッキング(現実空間におけるデバイス=自分の位置や向きを追跡)が始まります。

session.run(configuration)

 ARKitのない時代にARを実現しようとした場合、AVFoundationでカメラ入力画像データの取得、Core Motionでモーション情報の取得、かつそれらを「リアルタイムに」解析・統合するという、非常に複雑で難易度の高い実装が必要でした。それが、run(_:)メソッドを呼ぶだけで実現できるようになったのです。

 run()メソッドの定義は次のようになっており、第1引数には次項で解説するARConfigurationを指定します。

func run(_ configuration: ARConfiguration, options: ARSession.RunOptions = [])

 第2引数のoptionsはデフォルト値(オプションなし)が与えられているため省略可能です。本節でもできるだけコードをシンプルにするために省略しています。注4)

 ARKitのセッションを中断したい場合は、pause()メソッドを呼びます。

session.pause()

 なお、セッションにはもう1つ「リセット」という概念が存在します。これについては、後の「2.5.3 トラッキング状態をリセットする / 検出済みアンカーを削除する」で解説します。

ARConfiguration, ARWorldTrackingConfiguration

 ARConfigurationクラスは、ARKitのセッションの様々なコンフィギュレーションを管理するためのクラスです。ARSessionをrunするときの引数に渡します。

 このクラスを用いて、たとえば「オーディオデータも取得するか(providesAudioDataプロパティ)」「カメラ入力からシーンのライティングを推定するか(isLightEstimationEnabledプロパティ)」といったことが設定できます。

 上の実装で出てきたARWorldTrackingConfigurationARConfigurationのサブクラスで、デバイスの向きや位置をトラッキングし、かつデバイスのカメラから見える現実世界の「面」注5)を検出する、というコンフィギュレーションを表します注6)

ARSCNView

 ARKitはコアな処理のみを行い、実際の描画はSceneKitやSpriteKit、Metalが担当します(図2.3)。

図2.3 ARKitと他のフレームワークの関係

iOS 11 Programming

  • 著者:堤 修一,吉田 悠一,池田 翔,坂田 晃一,加藤 尋樹,川邉 雄介,岸川 克己,所 友太,永野 哲久,
  • 製本版,電子版
  • 続きを読む