ARKit 4のLiDAR Depth API #WWDC20 #ARKit4 #iOS14
ARKit 3.5ではLiDARを利用してreconstractionした3Dメッシュは得られたが、その計算に用いられているはずのデプスデータにはアクセスできなかった。
そして今回、ARKit 4 / iOS 14(/ iPadOS 14)では、そのLiDARで計測したデプス(深度)を取得できるようになった。従来のデプスと区別するため、「シーンデプス(Scene Depth)」とも呼ばれているようだ。
LiDARデプスの取得方法
LiDAR由来のデプスデータは、ARWorldTrackingConfiguration利用時、frameSemanticsプロパティに.sceneDepthオプションを指定することで取得可能になる。
let session = ARSession()
let configuration = ARWorldTrackingConfiguration()
// sceneDepthオプションが利用可能かをチェック
if type(of: configuration).supportsFrameSemantics(.sceneDepth) {
// Activate sceneDepth
configuration.frameSemantics = .sceneDepth
}
session.run(configuration)
ARFrameに新たに追加されたsceneDepthプロパティより、LiDARで計測したデプスデータを取得できる。
func session(_ session: ARSession, didUpdate frame: ARFrame) {
guard let depthData = frame.sceneDepth else { return }
// Use depth data
}
利用可能なコンフィギュレーション
ARConfigurationプロトコルに定義されているframeSemanticsプロパティにsceneDepthを設定するので、API的には利用可能ではあるが、APIリファレンスのsceneDepthの項にある記述を読む限り、ワールドトラッキング以外のコンフィギュレーションでは利用できないっぽい。
https://developer.apple.com/documentation/arkit/arconfiguration/framesemantics/3516902-scenedepth
If you enable this option on a world-tracking configuration's frameSemantics, ARKit includes depth information for regions of the current frame's capturedImage. The world-tracking configuration exposes depth information in the sceneDepth property that it updates every frame.
ハードウェア的な制約
同じくsceneDepthのリファレンスページより。
ARKit supports scene depth only on LiDAR-capable devices
チップがA12以上とかの条件はないようだ。(LiDARが載る→必然的に高性能チップとなるからだろうか)
従来のデプスデータとの違い
ここから先は
#WWDC2020 の勉強メモ
堤がWWDC 2020およびiOS 14についてセッションやサンプルを見つつ勉強したことを記事にしていくマガジンです。NDAの都合上、Ap…
最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/