第2章 ARKit 堤 修一/@shu223
2.2.3 基本クラスの解説
最小実装での挙動を確認できたところで、上で書いたコードが何をしていたのかを把握するため、出てきたクラスについて簡単に見ていきましょう。
■ARSession
ARKitでは、そのAR機能全体をARSessionクラスを用いてセッション単位で管理します。
ARSessionのrun(_:)メソッドを呼ぶと、セッションが動作開始します。セッションが開始すると、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プロパティ)」といったことが設定できます。
上の実装で出てきたARWorldTrackingConfigurationはARConfigurationのサブクラスで、デバイスの向きや位置をトラッキングし、かつデバイスのカメラから見える現実世界の「面」注5)を検出する、というコンフィギュレーションを表します注6)。
■ARSCNView
ARKitはコアな処理のみを行い、実際の描画はSceneKitやSpriteKit、Metalが担当します(図2.3)。
図2.3 ARKitと他のフレームワークの関係