アプリは ARCore for Jetpack XR を通じて深度情報を取得し、物理オブジェクトがデバイスにどれだけ近いかを判断できます。
ARCore for Jetpack XR セッションを作成する
ARCore for Jetpack XR セッションを通じて頭のポーズ情報を取得します。Session
を取得するには、セッションのライフサイクルを理解するをご覧ください。
セッションを構成する
XR セッションでは、深度マップの取得はデフォルトで有効になっていません。デプスマップの取得を有効にするには、セッションを構成して DepthEstimationMode
を設定します。
val newConfig = session.config.copy( depthEstimation = Config.DepthEstimationMode.SMOOTH_ONLY, ) when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
DepthEstimationMode
には次の値を使用できます。
DISABLED
: シーンの奥行きに関する情報は提供されません。RAW_ONLY
: 生の奥行き値と信頼値で奥行き推定が有効になっています。SMOOTH_ONLY
: 奥行き推定が有効になり、奥行きと信頼度の値がスムーズになります。SMOOTH_AND_RAW
: 生の深度値と平滑化された深度値、信頼値の両方で深度推定が有効になっています。
生深度マップは、より高い精度で深度推定を提供しますが、生深度画像には、カメラ画像のすべてのピクセルに対する深度推定が含まれていない場合があります。一方、滑らかな深度マップはすべてのピクセルの推定深度を提供しますが、深度推定の平滑化と補間により、ピクセル単位の深度データの精度が低下する可能性があります。
深度データを取得する
特定のカメラの深度データを取得するには、DepthMap
を使用します。
val depthMap = DepthMap.left(session) ?: return
デバイスによって機能が異なります。ステレオ カメラ構成のデバイスは、left
カメラと right
カメラの null 以外の深度マップを返します。同様に、単一のカメラを搭載したデバイスは、mono
を使用して null 以外のデプスマップを返します。
深度値を計算する
生成された深度マップから、深度値と信頼値を取得できます。
val depthMap = DepthMap.left(session) ?: return
使用する構成設定に応じて、smoothDepthMap
または rawDepthMap
を使用して対応する深度マップにアクセスします。これらのマップに含まれる測定値はメートル単位で表されます。smoothConfidenceMap
と rawConfidenceMap
を使用して信頼値にアクセスすることもできます。これらの値の範囲は 0 ~ 255 で、255 は信頼度が最も高いことを表します。
デバッグまたは可視化のために深度マップをレンダリングするには、ARCore テストアプリの深度部分をご覧ください。