Apple Engine

Apple, iPhone, iOS, その周辺のことについて

ARKit 2.0 の更新内容 (iOS 12 Bata 2)

NDA の問題でスクリーンショットなどセッション資料のものを使用している。
また、Beta 版から記事を起こしているため今後変更される可能性あり。

遅くなってしまったが iOS 12 Bata の ARKit 2.0 更新内容を見てゆく。

Bata 2 の内容だが 1.0 の Beta の際は Configuration 関連の名称が変更したぐらいなので、 今回も機能的には GM までほぼ変更はないと思われる。

 

増えた機能

  • 環境マップテクスチャの作成
  • 物体認識と物体のトラッキング
  • 物体認識用の物体のスキャニング
  • 画像認識と画像のトラッキング
  • 現実世界から得た特徴点からのワールドマップの作成と復元(他の端末との空間共有などに使用)
  • 顔認識での舌の動きの取得

 

f:id:x67x6fx74x6f:20180622194719p:plain

f:id:x67x6fx74x6f:20180622194733p:plain

 

ワールドマップによるワールドトラッキングについて

WWWDC のセッションやドキュメントでは以下の2つを想定している。

  • Multiuser AR experiences
  • Persistent AR experiences

Multiuser は空間と仮想オブジェクトであるアンカーを他の端末に渡し仮想空間を共有、 Persistent は空間と仮想オブジェクトであるアンカーを保存し、再開した際に復元する。

 

物体認識用の物体のスキャニング

ARKit 自体には簡単にスキャンする UI 等がないため、地道に実装することになる。

特徴点のスキャンが完了したら .arobject のファイルとして保存し、
物体認識時に参照用のオブジェクトとして使う。

Apple のサンプルファイルでスキャンできるため、こちらを使用して振る舞いを確かめるとよいかと。

Scanning and Detecting 3D Objects | Apple Developer Documentation

 

ちなみに、スキャンはマシンパワーを使いまくるので基本的には物体のスキャニングは開発者側が事前に行なっておいた方がよいと思われる。
また、ある程度正確な特徴点のスキャンが行わないと物体認識時に上手く行かない場合があるので注意。

画像認識同様に真っ白で物体のコントラスト差がなく特徴点が認識しづらいものや、透明なもの、鏡面の物質などは物体のスキャンに向いていない。

 

既存機能の変更点

機能的な変更は特にないが、移動や回転などで使用している vector_float3 や matrix_float4x4 などが Accelerate Framework の simd で設定するものに変更されている。

 

増えたクラス

  • AREnvironmentProbeAnchor
  • ARWorldMap
  • ARReferenceObject
  • ARObjectAnchor
  • ARObjectScanningConfiguration
  • ARImageTrackingConfiguration

 

以下、変更を見てゆく。
今回あまりコードに触れていないので、翻訳が間違っていたらごめんなさい。

 

ARSession

ARSession

追加

func getCurrentWorldMap(completionHandler: @escaping (ARWorldMap?, Error?) -> Void)

ARWorldMap でワールドトラッキングの際、セッションの空間のマッピング状態とアンカーのセットをカプセル化したオブジェクトとして返す。

このメソッドを使用してセッションのワールドマップを保存した後、 initialWorldMap プロパティに割り当て、run(_: options:) を使用すると同じ空間認識とアンカーを別のセッションで開始する。

ARWorldTrackingConfiguration で Configuration を設定しないと即 completionHandler が返るので注意。

 

createReferenceObject(transform:center:extent:completionHandler:)

セッションでワールド空間の指定した領域から参照オブジェクト (3D オブジェクトの物体認識検出用オブジェクト) を作成する。

抽出する領域のローカル座標の原点と方向を設定する transform、
抽出する領域のバウンディングボックスの中心を定義する center、
抽出する領域の幅、高さ、深さを中心点としたローカル座標の範囲 extent を設定する。

completionHandler では、参照オブジェクトとなるワールドマップの指定された領域を表す ARReferenceObject を渡す referenceObject、エラー時の説明する ARError を渡す error がある。

 

注意点

このメソッドは参照オブジェクトのスキャンを可能にする ARObjectScanningConfiguration が設定されているセッション内で動作し、設定されていない場合は即 completionHandler が返る。

参照オブジェクトはスキャンした状態を元に原点が設定される。参照オブジェクトの原点を抽出した後で調整するには、applyingTransform メソッドを使用する。
例えば、スキャンした現実のフィギュアの頭の上に吹き出しを出したい時など、原点を頭の上に設定しておくと吹き出しを出す高さを考慮ても済む。

 

変更

setWorldOrigin(relativeTransform:)

引数が matrix_float4x4 から simd_float4x4 に変更。

 

ARSessionObserver

ARError.Code

追加

エラー用 enunm

名前 コード
fileIOFailed 500
insufficientFeatures 400
invalidConfiguration 303
invalidReferenceObject 301
invalidWorldMap 302
microphoneUnauthorized 104

 

ARError

追加

エラードメインと上記のエラーコード取得用

  • errorDomain: String
  • fileIOFailed: ARError.Code
  • insufficientFeatures: ARError.Code
  • invalidConfiguration: ARError.Code
  • invalidReferenceObject: ARError.Code
  • invalidWorldMap: ARError.Code
  • microphoneUnauthorized: ARError.Code

 

ARSCNView

追加

func unprojectPoint(_ point: CGPoint, ontoPlane planeTransform: simd_float4x4) -> simd_float3?

ARKit によって指定した 2D ビューの点から投影されたレイが、
指定した平面と交差するワールド空間の 3D ポイントを返し、レイが平面と交差しない場合 nil を返す。

point は平面上に投影する 2D ビュー空間の点。 planeTransform は3D ワールド空間での平面の位置と方向を指定する変換行列で、 この変換が定義するローカル座標空間の XZ 平面となる。

 

ARWorldTrackingConfiguration

追加

var initialWorldMap: ARWorldMap?

getCurrentWorldMap を使用してセッションのワールドマップを保存した後、その構成のワールドマップを復元する際に使用する。

ARKit が記録されたワールドマップを現在の環境と合わない場合、
セッションは初期状態の ARCamera.TrackingState.Reason.relocalizing 状態になる。
たとえば、ワールドマップが記録された場所とはまったく異なる場所にいる場合などで合わなくなる。

 

var maximumNumberOfTrackedImages: Int

同時にトラッキングできる検出画像の最大数。
0 より大きい値に設定すると、画像トラッキングが可能になる。
以前のものとは異なり、空間を移動しても連続してトラッキングされる。

画像検出は、ARKit が最初にカメラビューで検出したときの画像の位置と向きを報告し、その後はまれな更新しか行われない。

ARWorldTrackingConfiguration では少数の画像しか同時にトラッキングできない。
さらに多くの画像をトラッキングしたい場合は ARImageTrackingConfiguration の方を使用する。

 

class var isObjectDetectionSupported: Bool { get }

3D オブジェクトの検出をサポートしているか示すフラグを取得する。
オブジェクト検出を有効にするには、detectObjects プロパティに ARReferenceObject インスタンスを指定する。

 

var detectionObjects: Set { get set }

現実環境で物体認識から検出する 3D オブジェクトのセット。
このプロパティを使用して、設定している 3D オブジェクトを選択、 ユーザーの現実環境で指定したオブジェクト検索し、ARObjectAnchor として AR で使用できるようにする。

画像認識と同じように Xcode のアセットカタログで参照オブジェクトの .arobject ファイルを設定してこの命令で設定する。

 

var environmentTexturing: ARWorldTrackingConfiguration.EnvironmentTexturing { get set }

環境マップテクスチャを生成するために使用する。

シーン内の特定のポイントからのすべての方向のビューを示すキューブマップテクスチャを生成し、Physically Based Rendering を使用したリアルっぽいマテリアルの反射や照明を実現する。

ARWorldTrackingConfiguration.EnvironmentTexturing のプロパティを none から変更すると使用でき、
manual を設定すると AREnvironmentProbeAnchor を作成してセッションに追加することで任意の場所から環境マップテクスチャを作成、
automatic では ARKitはAREnvironmentProbeAnchor オブジェクトを自動的に作成し配置する。

いずれの場合も、セッションがカメラの画像を収集すると自動的に環境マップテクスチャを生成する。

session(_:didUpdate :) などのデリゲートメソッドを使用して、テクスチャがいつ利用可能かを調べ、アンカーのenvironmentTexture プロパティからアクセスをする。

ARSCNView と automaticUpdatesLighting オプションを使用してARコンテンツを表示すると、SceneKit はAREnvironmentProbeAnchor テクスチャマップを自動的に取得しシーンを照らす。

 

ARWorldTrackingConfiguration.EnvironmentTexturing

ワールドトラッキングARセッションで環境テクスチャを生成するオプション。

 

追加

オプション名 説明
none 環境マップテクスチャを生成しない
manual セッションで追加するプローブアンカーに対してのみ環境マップテクスチャを生成する
automatic 環境マップテクスチャをいつ、どこで生成するか自動的に決定する

 

AREnvironmentProbeAnchor

ワールドトラッキングで環境照明情報である環境プローブアンカーのオブジェクト。 これを元に環境マップテクスチャが生成される。

セッションでこのテクスチャマップ生成を有効にするには、上記の environmentTexturing プロパティを設定する必要がある。

  

追加

init(transform: simd_float4x4, extent: simd_float3)
init(name: String, transform: simd_float4x4, extent: simd_float3)

新しい環境プローブアンカーを作成する

name はアンカーの識別用、
transform はこのアンカーを空間に配置するためのワールド座標、
extent は視差補正が考慮されたリフレクションのテクスチャ(Parallax-Corrected Cubemap)を投影するときに使用するアンカーの位置周辺の領域。

 

var environmentTexture: MTLTexture?

プローブアンカーの位置からすべての方向のビューを表すキューブマップテクスチャ。

 

var extent: simd_float3

init で設定しているものと同じもので、
視差補正が考慮されたリフレクションのテクスチャ(Parallax-Corrected Cubemap)を投影するときに使用するアンカーの位置周辺の領域.

マテリアルが反射するオブジェクトをレンダリングするには、アンカーの位置を中心とするプロキシジオメトリに環境マップテクスチャを投影し、投影テクスチャからサンプリングする必要がある。 テクスチャがグローバルライティングとして使用されることを示す無限の範囲、またはテクスチャがシーンの特定の領域におけるローカルライティングの条件を示す有限の範囲を設定する。

 

ARWorldMap

空間マッピングをしたワールドマップのセッション状態は、ユーザがデバイスを移動する物理的な空間と、 セッションに追加された ARAnchor オブジェクトのアンカーの集まりを持つ。

ワールドマップを保存し、それらを使って新しいセッションを開始することで、複数ユーザーで空間を共有する Multiuser AR experiences と保存した空間を復元する Persistent AR experiences を使用することができる。

 

追加

var anchors: [ARAnchor]

ワールドマップに記録されたアンカーの集まり。

この配列は、ワールドマップキャプチャ時のセッション内のサブクラスを含む ARAnchor オブジェクトのスナップショット。
ワールドマップを作成すると、その環境で静的であると見なされるすべてのアンカーが自動的に格納される。 そのため、ARTrackable に適合しているものは省かれてしまうので注意。

ワールドマップを作成後、マップを保存または共有する前にこの配列からアンカーを追加・削除したりすることが可能。 ワールドマップの共有や復元時に不必要なアンカーの削除などができる。

 

var center: simd_float3

ワールドマップがセッションで記録された際のワールド座標の原点に対するマッピングデータの中心点。
extent のプロパティとともにワールドマップに記録されたデータの bounding box を定義する。

 

var extent: simd_float3

ワールドマップがセッションで記録された際のワールド座標原点に対する空間マッピングデータの大きさ(広さ)。
center のプロパティとともにワールドマップに記録されたデータの bounding box を定義する。

 

var rawFeaturePoints: ARPointCloud

ARFrame の rawFeaturePoints と同様に、ワールドマップに記録された空間マッピングデータの特徴点を表す。

セッション中にカメラの視野にあった実世界のオブジェクトの大まかな輪郭をポイントクラウドで視覚化し表示するため、 ワールドマップの記録をデバッグや、サイズを調べて空間取得の品質を調べることができる。

ソフトウェアリリース間で未処理の特徴点の数や配置などの安定は保証されないらしいので注意。 多分、OS やアプリが同じバーションで使用することが望まれるということだと思われる。

 

ARReferenceObject

現実世界で認識させる 3D のオブジェクト

物体検出により、セッションが設定されている 3D オブジェクトを認識したときに、トリガーとして任意の AR コンテンツのインタラクションを起こすことができる。 たとえば、美術館の彫刻を検出して仮想キュレーターを提供したり、ボードゲームの人物を検出したり、ゲームの視覚効果をつくり出すことができる。

 

追加

init(archiveURL url: URL) throws

指定されたファイルの URL から参照オブジェクトをロードする。

url はロードする参照オブジェクトを含むローカルファイルの URL。
throws から NSError オブジェクトへのポインタである error が返され、nil の場合エラーをチェックする。

参照オブジェクトを返し、ワールドトラッキングでの検出で使用するには、detectObjects に追加する。

 

class func referenceObjects(inGroupNamed: String, bundle: Bundle?) -> Set?

Xcodeプロジェクトのアセットカタログにあるすべての参照オブジェクトを指定した AR リソースグループへ読み込む。

name は Xcode プロジェクトのアセットカタログにある AR リソースグループ名、
bundle アセットカタログのリソースを読み込むバンドル。アプリのメインバンドルを使用する場合は nil。

init と同様にワールドトラッキングで使用するには detectObjects に追加する。

 

var name: String?

参照オブジェクト用の名前。

Xcodeアセットカタログから参照オブジェクトをロードする際に必要な名前です。 extractReferenceObject を使用してセッションで記録したオブジェクトに名前を割り当てることもできる。

 

var center: simd_float3
var extent: simd_float3

参照オブジェクトの空間マッピングデータの中心点と大きさ

extent と center プロパティは、ローカル座標で参照オブジェクトに記録されたデータのバウンディングボックスを定義する。 extractReferenceObject(transform:center:extent :)を呼び出すときに、transform パラメータを使用してその座標系を定義し、 applyTransform(_ :)を使用して別の参照オブジェクトを作成して座標を変更することもできる。

 

var scale: simd_float3

参照オブジェクトが定義するローカル座標空間での倍率。

extent にこの scale を掛ければ、オブジェクトの物理サイズがメートル単位になる。(らしい? 翻訳あっているか不安)

 

func export(to: URL, previewImage: UIImage?)

指定されたファイル URL でオブジェクトをバイナリファイルとして書き出す。

url は参照オブジェクトデータを書き込む URL、
previewImage は参照オブジェクトのファイル(.arobject)に埋め込まれるサムネイルイメージ。

ARKit 自体はファイルのサムネールを使用することはないが、Xcode、Finder、QuickLook などで視覚的にわかりやすいようにするため設定する。

通常のファイル操作と同様に、成功した場合は true。false の場合は、error パラメータがくる。

 

class let archiveExtension: String

書き出す ARReferenceObject インスタンスのファイルの拡張子。
export(to:previewImage :)メソッドで書き出す際、この拡張子を使用する。

 

func applyingTransform(simd_float4x4) -> ARReferenceObject

参照オブジェクトにここで指定した座標変換を適用すると新しい参照オブジェクトを返す。
transform は参照オブジェクトのローカル座標空間の変換行列で変換された参照オブジェクトが返る。

 

var rawFeaturePoints: ARPointCloud

ARFrame や ARWorldMap と同様なため割愛。

 

ARObjectAnchor

追加

var referenceObject: ARReferenceObject

オブジェクトアンカーによって参照され検出されたオブジェクト。
セッションの構成時に detectObjects 配列で指定した ARReferenceObject オブジェクト。

 

ARObjectScanningConfiguration

背面カメラから現実空間の物体を 3D オブジェクトとしてスキャンするための構成の設定。

こちらを使用してセッションを実行すると、オブジェクトスキャンに必要なデータの収集が可能になる。
この構成のセッションでオブジェクトをスキャンした後、createReferenceObject を呼び出し、セッションの内部空間マッピングデータの領域をスキャン。それを参照オブジェクトを使用することができる。

 

Apple 先生からのありがたき警告文

ARObjectScanningConfiguration は開発のシナリオでのみ使用される。
再現性の高い空間マッピングはパフォーマンスとエネルギーコストが高く、参照オブジェクトのスキャンに必要のない ARKit 機能を無効する必要があるため。
エンドユーザー側での AR は、ARWorldTrackingConfiguration を使用すべし。

 

追加

init()

新しいオブジェクトスキャン構成(コンフィグレーション)の初期化。
AR セッションでこの構成を使用するには、ARSession の run(_: options:) メソッドに渡す。

 

var planeDetection: ARWorldTrackingConfiguration.PlaneDetection { get set }

カメラでキャプチャされたイメージの平面をセッションが自動的に検出するかどうかとその方法を指定する。

デフォルトでは平面検出はオフ。 水平または垂直の平面検出を有効にすると、セッションでは ARPlaneAnchor オブジェクトが追加され、キャプチャされたビデオ画像の解析によって平面に見える領域が検出されると、ARSessionDelegate、ARSCNViewDelegate、または ARSKViewDelegateオブジェクトに通知される。
オブジェクトスキャンセッションでは、検出された平面を使用して、スキャンされたオブジェクトの原点(アンカーポイント)がその範囲に比例する場所を特定するのに役立つ。

 

var isAutoFocusEnabled: Bool { get set }

デバイスカメラのオートフォーカス有効にするか決める。
オートフォーカスはデフォルトで有効。

 

ARHitTestResult

変更

var worldTransform: simd_float4x4 { get }
var localTransform: simd_float4x4 { get }

共に、返り値を matrix_float4x4 から simd_float4x4 に変更

 

ARAnchor

変更

  • init(transform: simd_float4x4)
  • var transform: simd_float4x4 { get }

引数を matrix_float4x4 から simd_float4x4 に変更

 

追加

init(name: String, transform: simd_float4x4)

新規のアンカーオブジェクトで名前をつけて初期化できるようになったもの

 

var name: String? { get }

アンカー識別用の名前。

 

ARFrame

追加

var worldMappingStatus: ARFrame.WorldMappingStatus

このフレームのワールドマップを生成状態、または再生成などのステータスを提示する。

すべてのワールドトラッキングセッションは、ユーザー環境でデバイスの位置を決定するために使用する内部のワールドマップを構築する。   その内部状態のスナップショットを ARWorldMap オブジェクトとして保存し、後で保存したセッションを再開したり、デバイス間で共有してすることができる。

セッション中にいつでも getCurrentWorldMap (completionHandler:) を呼び出すことができるが、
このプロパティを使用して、セッションが現在有用な ARWorldMap を生成するのに十分なデータを持っているかどうかを判断したり、
ユーザーへ空間のマッピングの作業を促す。

 

ARFrame.WorldMappingStatus

指定したフレームで表示されている領域のマッピング状態を表す値。

名称 状態
notAvailable ワールドマップがない状態
limited 周辺の領域はまだ完全にマッピングされていない
extending 訪れた区域をマップしたが、周囲でマッピングさせていない場所がある
mapped 可視領域を適切にマッピングしている

 

追加

ARFrame.WorldMappingStatus.notAvailable

セッションの currentFrame の worldMappingStatus が notAvailable である場合、 デバイス周囲の現実世界の空間の内部マップにもカメラにも見えるシーンがない。 この時点で getCurrentWorldMap(completionHandler :)を呼び出すとエラーが発生する。

このステータスは新しいセッションの開始直後に発生する。 ワールドマップを保存または共有するにはユーザーが周囲の探索し、 アプリ側でセッションの状態を調べて mapped や extending に変更されるまで待つ。

 

ARFrame.WorldMappingStatus.limited

セッションの currentFrame の worldMappingStatus が limited である場合、 デバイス周囲の現実空間もカメラから見えるシーンもまだ完全にマッピングされていない。

現時点で、getCurrentWorldMap(completionHandler :)を呼び出してワールドマップを保存することは可能だが、 得られる ARWorldMap は、デバイスの位置付近の現実空間での再現にはあまり役に立たない。

より高品質の世ワールドマップを作成するには、ユーザーが周囲の探索し、セッションのステータスが mapped や ARFrame.WorldMappingStatus.extendingに変更するまで待つ。

 

ARFrame.WorldMappingStatus.extending

セッションの currentFrame の worldMappingStatus が extending である場合、 デバイスが最近通過した現実空間の高精度な内部マップを生成したが、 デバイスの周囲の領域をマップするためのデータを収集している。

この状態は保存されたワールドマップの再生成の質は中から高。

  • currentFrameのステータスがARFrame.WorldMappingStatus.extendingである間にgetCurrentWorldMap(completionHandler :)を呼び出してワールドマップを保存します。
  • ARWorldMapから新しいセッション(後でまたは別のデバイス)を実行すると、新しいセッションを実行するデバイスは、セッションを保存したデバイスが訪問した位置と向きを通過します。

現時点でワールドマップの保存または共有は適切な結果が得られる可能性があるが、 ユーザーがより多くの環境を探索して mapped のセッションにステータスが変わるまで待つと、 より高品質なワールドマップが再現できる可能性がある。

 

ARFrame.WorldMappingStatus.mapped

セッションの currentFrame の worldMappingStatus が mapped の場合、 デバイスの現在の位置やカメラから見えるシーンの現実空間で高精度な内部マップを生成されたことを表す。 この状態は、保存されたワールドマップで再生成する際に最高の信頼性を表す。

  • currentFrame のステータスが mapped である間に getCurrentWorldMap を呼び出してワールドマップを保存する。
  • その ARWorldMap から新しいセッションや別のデバイスで実行すると、新しいセッションを実行するデバイスは、ワールドマップが保存されたときと同じような現実の位置や向きを復元する。

 

ARCamera

追加

func unprojectPoint(_ point: CGPoint, ontoPlane planeTransform: simd_float4x4, orientation: UIInterfaceOrientation, viewportSize: CGSize) -> simd_float3?

ドキュメント上での説明なし。

ARSCNView の func unprojectPoint(_ point: CGPoint, ontoPlane planeTransform: simd_float4x4) -> simd_float3? に端末の傾きと画面の大きさをつけたものだと思われる。

 

変更

  • var eulerAngles: simd_float3 { get }

返り値を vector_float3 から simd_float3 に変更

 

  • var intrinsics: simd_float3x3 { get }

返り値を matrix_float3x3 から simd_float3x3 に変更

 

  • var transform: simd_float4x4 { get }
  • var projectionMatrix: simd_float4x4 { get }
  • func projectionMatrix(for orientation: UIInterfaceOrientation, viewportSize: CGSize, zNear: CGFloat, zFar: CGFloat) -> simd_float4x4
  • func viewMatrix(for: UIInterfaceOrientation) -> simd_float4x4

返り値を matrix_float4x4 から simd_float4x4 に変更

 

  • func projectPoint(_ point: simd_float3, orientation: UIInterfaceOrientation, viewportSize: CGSize) -> CGPoint

引数を vector_float3 から simd_float3 に変更

 

ARFaceAnchor

TrueDepth カメラを使用した顔認識

 

追加

leftEyeTransform: simd_float4x4

顔の左目の位置と向きを示す変換行列。

顔のアンカーに対しての眼球の中心の位置を示す。 +Z 軸は、眼球の中心から瞳孔の方向に向いている。 回転は眼球の向きを示し、X 軸の回転は瞳孔の上下で、Z軸は回転しない。

 

var rightEyeTransform: simd_float4x4

顔の右目の位置と向きを示す変換行列。
左目と同じなので割愛。

 

var lookAtPoint: simd_float3

視線の方向を推定する。

このベクトルは leftEyeTransform と rightEyeTransform 行列から抽象化して、 ユーザの目がどこに集中しているかを推定する。

  • ユーザーが左を見ている場合、ベクトルは正の X 軸成分を持ちます。
  • ユーザーが近くのオブジェクトに集中している場合はベクトルの長さは短くなる。
  • ユーザーが離れたオブジェクトに集中している場合はベクトルの長さは長くなる。

 

BlendShapeLocation

追加

static let tongueOut: ARFaceAnchor.BlendShapeLocation

舌の伸展を表す係数

0.0 の値は舌が完全に口の中にあることを示し、
1.0 の値は舌が口から遠くにあることを示す。

ちなみに、今回は使用できないが iOS 11 の復元ファイルのアニ文字に、上下左右など舌の動きのブレンドシェイプが用意されている。

 

ARDirectionalLightEstimate

変更

var primaryLightDirection: simd_float3 { get }

返り値を vector_float3 から simd_float3 に変更

 

ARImageTrackingConfiguration

追加

init()

イメージトラッキング設定の初期化をする。
セッションでこの設定を使用するには、ARSession の run(_:options :) メソッドに渡す。

 

var trackingImages: Set { get set }

現実世界で検出やトラッキングするイメージのセット

Xcode のアセットカタログや ARReferenceImageクラスを使用して設定した 2D 画像を現実世界で検索し、ARImageAnchor として AR で使用する。

 

var maximumNumberOfTrackedImages: Int { get set }

ARWorldTrackingConfiguration のものと同様にトラッキングできる画像の最大数。

 

var isAutoFocusEnabled: Bool { get set }

他の isAutoFocusEnabled 同様、オートフォーカスの使用するかの設定。

 

 

まとめ

ワールドマップの保存、共有や画像やオブジェクトのトラッキングができるようになり、AR として必要な機能はある程度揃った。
もうそろそろ AR グラスなどのハードを出してくれる頃合いだと思っている。

 

 

変更不明なやつ。

  • ARSession > init(rawValue:)
  • ARSession > ARSession > ARSessionObserver > ARError.Code > unsupportedConfiguration
  • ARSession > ARSession > ARSessionObserver > ARError.Code > sensorUnavailable
  • ARSession > ARSession > ARSessionObserver > ARError.Code > sensorFailed
  • ARSession > ARSession > ARSessionObserver > ARError.Code > worldTrackingFailed
  • ARSession > ARSession > ARSessionObserver > ARError.Code > cameraUnauthorized
  • ARSession > ARSession > ARSessionObserver > ARError.Code > invalidReferenceImage
  • ARSession > ARSession > ARSessionObserver > ARError > var errorCode: Int
  • ARSession > ARSession > ARSessionObserver > ARError > var errorUserInfo: [String : Any]
  • ARSession > ARSession > ARSessionObserver > ARError > var localizedDescription: String
  • ARSession > ARSession > ARSessionObserver > ARError > static var cameraUnauthorized: ARError.Code
  • ARSession > ARSession > ARSessionObserver > ARError > static var errorDomain: String
  • ARSession > ARSession > ARSessionObserver > ARError > static var invalidReferenceImage: ARError.Code
  • ARSession > ARSession > ARSessionObserver > ARError > static var sensorFailed: ARError.Code
  • ARSession > ARSession > ARSessionObserver > ARError > static var sensorUnavailable: ARError.Code
  • ARSession > ARSession > ARSessionObserver > ARError > static var unsupportedConfiguration: ARError.Code
  • ARSession > ARSession > ARSessionObserver > ARError > static var worldTrackingFailed: ARError.Code
  • ARSession > ARSession > ARSessionObserver > ARError > static func != (lhs: ARError, rhs: ARError) -> Bool
  • ARConfiguration.WorldAlignment.gravity
  • ARConfiguration.WorldAlignment.gravityAndHeading
  • ARConfiguration.WorldAlignment.camera
  • ARSCNView > ARSCNDebugOptions > init()
  • ARPlaneGeometry > var vertices: [vector_float3]
  • ARPlaneGeometry > var textureCoordinates: [vector_float2]
  • ARPlaneGeometry > var triangleCount: Int
  • ARPlaneGeometry > var triangleIndices: [Int16]
  • ARPlaneGeometry > var boundaryVertices: [vector_float3]
  • ARHitTestResult > ARHitTestResult.ResultType > init(rawValue: UInt)
  • ARPointCloud > var points: [vector_float3] { get }
  • ARPointCloud > var identifiers: [UInt64] { get }
  • ARCamera > TrackingState > notAvailable
  • ARCamera > TrackingState > limited(ARCamera.TrackingState.Reason)
  • ARCamera > TrackingState > ARCamera.TrackingState.Reason
  • ARCamera > TrackingState > normal
  • ARFaceAnchor > ARFaceGeometry > var vertices: [vector_float3]
  • ARFaceAnchor > ARFaceGeometry > var textureCoordinates: [vector_float2]
  • ARFaceAnchor > ARFaceGeometry > var triangleIndices: [Int16]
  • ARFaceAnchor > ARFaceGeometry > BlendShapeLocation > init(rawValue: String)