3dオブジェクトをスキャンする
.arobjectファイルを生成するには下記のurlからApple公式のアプリでスキャンする必要がある
スキャンするときは下記の事柄を注意すると良いスキャンができるそう。
・照度は250〜400ルクス。全方向を照らす。
・光温度は日光と同様の約6500ケルビン。
・暖かい光源や色の付いた光源は避ける。
・背景は灰色で光は反射しない素材であること。
このアプリを実機で立ち上げ指示通りに動かせば.arobjectファイルを生成できる。(Airdropなどでicloudに保存とかになる)
Apple公式では、開発時点でどの物体を検知するかを定義した方が良いとしており、アプリを新規に作ってスキャンする必要はないとしている。
そのため、ユーザーアクションとしてスキャンすることもなければ、個人(もしくは会社)独自でスキャン用のアプリを作って.arobjectファイルも作ることはないと思う。
つくったarobjectを組み込む
前回の画像トラッキングと同様にAssets.xcassetsのARResourceGroupにドラックアンドドロップで
.arobjectファイルを組み込む。
ARKitで物体を検出する流れ
1 ARWorldTrackingConfigurationに検知したいオブジェクトを設定する
let objects = ARReferenceObject.referenceObjects(inGroupNamed: "AR Resources",
bundle: nil)!
let configuration = ARWorldTrackingConfiguration()
configuration.detectionObjects = objects
2 ARSessionを開始する
arView.session.run(configuration)
3 カメラから取得した映像からARオブジェクトを認識
func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
for anchor in anchors {
// 「ARObjectAnchor」かどうかを確認する
guard let objAnchor = anchor as? ARObjectAnchor else {
continue
}
.....
}
}
4 ARObjectAnchorを追加する
5 どのARオブジェクトが認識されたかどうかを調べる
6 ARオブジェクトによって処理を変われる。
// 認識されたオブジェクトを調べる
guard let name = objAnchor.name else { continue }
switch name {
case 〇〇:
処理
break
}
ARReferenceObject詳細
var rawFeaturePoints: ARPointCloud { get }
// 特徴点をゲットできる
var center: simd_float3
// 対象の中心座標
var extent: simd_float3
// 対象のサイズ
var scale: simd_float3
// 対象のローカル座標空間における倍率。
ARObjectAnchorとは
ARKit取り扱う3dオブジェクト。
ARAnchorを継承しているのでARsessionのDelegateメソッドでAnchorの追加や削除を監視できる。
ARAnchorはARシーンにオブジェクトを配置するための物理空間の位置と方向を持ったオブジェクトなので、その3dオブジェクト版。