ARKit4 Location Anchorsまとめ
はじめまして、dramaです。
AR系の投稿していきます。以後宜しくお願いします。
WWDC2020で、ARKit4が発表されました!
https://developer.apple.com/augmented-reality/arkit/
https://developer.apple.com/videos/play/wwdc2020/10611
ARKit4にはいくつかの新機能やアップデートが含まれていますが、
今回は主要機能の一つである「Location Anchors」について調査した結果をざっくりまとめます。
現在公開されているAPIはSwiftですが、処理フローや制約はUnityでも同じなので念頭に置いておくと良さそうです。
何が出来るか
これまでPokemonGOやドラクエウォークなど位置情報ベースのARアプリはよくありましたが、これに画像解析の結果を加えることで、より詳細に現実空間を認識します。
これにより誤差数メートルはあった位置情報ベースの表現を、誤差数センチ以内の細かい精度で可能です。
例:渋谷駅あたりにオブジェクトを表示させるのではなく、ハチ公の上に乗るように表示する。など
現実空間と仮想空間を合わせた表現が より高精度になるでしょう。
また、マップから仮想空間へもアクション可能なので、
地図上の地点に仮想の建物を配置する→その地点にいる人にはARで実際に見れる。というような表現も出来そうです。
どうやって使えるか

ARGeo
モードを設定して起動するだけで使えます。従来のモード設定と同様です。
arView.session.run(ARGeoTrackingConfiguration())
ただし、利用するにはいくつかの制約があります。
制約
- A12 Bionic以上を搭載したデバイスであること
APIで確認
class var isSupported: Bool { get }
if !ARGeoTrackingConfiguration.isSupported {
//使えないデバイス用のエラー処理
}
※必然的にiPhone XS以降の端末となるので、その他のデバイス条件は達成されます。 - 位置情報とネットワークが利用可能な環境であること
APIで確認
var state: ARGeo
Tracking Status.State { get }
if geoTrackingStatus.state == .localized {
// 使えます
} else {
// 使えません。使えない理由を確認出来ます。
print(geoTrackingStatus.stateReason)
} - 特定の地域であること
APIで確認
class func checkAvailability(completionHandler: @escaping (Bool, Error?) -> Void)
ARGeoTrackingConfiguration.checkAvailability { (available, error) in
if !available {
//使えない地域用のエラー処理
}
}
※2020年7月現在、対象は以下の地域のみです。気長に待ちましょう。・San Francisco Bay Area
・New York
・Los Angeles
・Chicago
・Miami - 同時に出来るのは、平面・画像・物体検知のみっぽいです。
https://developer.apple.com/documentation/arkit/argeotrackingconfiguration
モードとして設定するので、画像追跡や人物追跡(motionTracking)等の他モードと併用出来ません。
光源反映やピープルオクルージョンとの併用は可能な気がします。
アプリへの導入時には、Anchorの設置やExport/Importが必要になるのですが、長いので今回は割愛します。
尚、Appleからサンプルが公開されてるので、
Developer Programに入っていればロケーションエラーが出るところまでは検証可能です。
https://developer.apple.com/documentation/arkit/tracking_geographic_locations_in_ar
※Xcodeで位置設定を変えればLocalize Errorまでは日本でも確認出来ます。
面白い機能なので、早く日本でも試したい!