Jetpack XR용 ARCore로 앱에서 깊이 정보 가져오기

앱은 Jetpack XR용 ARCore를 통해 깊이 정보를 검색하여 실제 객체가 기기에 얼마나 가까운지 확인할 수 있습니다.

Jetpack XR용 ARCore 세션 만들기

Jetpack XR 세션용 ARCore를 통해 머리 포즈 정보를 획득합니다. 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

기기마다 기능이 다릅니다. 스테레오 카메라 구성이 있는 기기는 leftright 카메라에 null이 아닌 깊이 지도를 반환합니다. 마찬가지로 카메라가 하나인 기기는 mono를 사용하여 null이 아닌 깊이 맵을 반환합니다.

깊이 값 계산

결과 깊이 지도에서 깊이와 신뢰도 값을 가져올 수 있습니다.

val depthMap = DepthMap.left(session) ?: return

사용된 구성 설정에 따라 smoothDepthMap 또는 rawDepthMap를 사용하여 해당 깊이 맵에 액세스합니다. 이러한 지도에 포함된 측정값은 미터로 표시됩니다. smoothConfidenceMaprawConfidenceMap를 사용하여 신뢰도 값에 액세스할 수도 있습니다. 이 값의 범위는 0~255이며, 255는 가장 높은 신뢰도를 나타냅니다.

디버그 또는 시각화 목적으로 깊이 맵을 렌더링하려면 ARCore 테스트 앱의 깊이 부분을 참고하세요.