AR Foundation Android 앱에서 Raw Depth 사용

Raw Depth API는 Full Depth API 데이터보다 정확도가 높은 카메라 이미지에 깊이 데이터를 제공하지만, 모든 픽셀을 항상 다루는 것은 아닙니다. RAW 깊이 이미지와 일치하는 신뢰도 이미지도 추가로 처리할 수 있으므로 앱은 개별 사용 사례에 충분한 정확성을 갖춘 깊이 데이터만 사용할 수 있습니다.

기기 호환성

Raw Depth는 Depth API를 지원하는 모든 기기에서 사용할 수 있습니다. Full Depth API와 마찬가지로 Raw Depth API에는 비행 시간 (ToF) 센서와 같은 지원되는 하드웨어 깊이 센서가 필요하지 않습니다. 그러나 Raw Depth API와 Full Depth API 모두 기기에 있을 수 있는 지원되는 하드웨어 센서를 활용합니다.

Raw Depth API와 Full Depth API 비교

Raw Depth API는 정확도가 더 높은 심도 추정치를 제공하지만, RAW 심도 이미지에는 카메라 이미지의 모든 픽셀에 대한 심도 추정치가 포함되지 않을 수 있습니다. 반면, Full Depth API는 모든 픽셀에 대해 추정 심도를 제공하지만, 픽셀당 심도 데이터는 심도 추정치의 평활화 및 보간으로 인해 정확도가 떨어질 수 있습니다. 두 API에서 깊이 이미지의 형식과 크기는 동일합니다. 콘텐츠만 다릅니다.

다음 표는 주방에 있는 의자와 탁자의 이미지를 사용하여 Raw Depth API와 전체 Depth API의 차이점을 보여줍니다.

API 반환 값 카메라 이미지 심도 이미지 신뢰도 이미지
Raw Depth API
  • 카메라 이미지의 전체가 아닌 일부 픽셀에 대한 매우 정확한 깊이 추정치가 포함된 원시 깊이 이미지입니다.
  • 모든 원시 심도 이미지 픽셀에 대한 신뢰도를 제공하는 신뢰도 이미지입니다. 심도 추정치가 없는 카메라 이미지 픽셀은 신뢰도가 0입니다.
Full Depth API
  • 단일 '평활화된' 모든 픽셀에 대한 깊이 추정치가 포함된 깊이 이미지입니다.
  • 이 API에는 신뢰 이미지가 제공되지 않습니다.
해당 사항 없음

신뢰도 이미지

Raw Depth API에서 반환된 신뢰도 이미지에서 밝은 픽셀은 신뢰도 값이 더 높으며, 흰색 픽셀은 완전 신뢰도를, 검은색 픽셀은 신뢰도를 나타냅니다. 일반적으로 나무와 같이 질감이 더 큰 카메라 이미지의 영역은 비어 있는 벽과 같이 그렇지 않은 영역보다 원시 심도 신뢰도가 높습니다. 텍스처가 없는 표면은 일반적으로 신뢰도가 0입니다.

대상 기기에 지원되는 하드웨어 깊이 센서가 있는 경우 질감이 없는 표면에서도 카메라에 충분히 가까운 이미지 영역의 신뢰도가 높아질 수 있습니다.

컴퓨팅 비용

Raw Depth API의 컴퓨팅 비용은 전체 Depth API 컴퓨팅 비용의 약 절반입니다.

사용 사례

Raw Depth API를 사용하면 장면에 있는 객체의 도형을 더 자세히 표현하는 깊이 이미지를 얻을 수 있습니다. 원시 깊이 데이터는 기하학적 이해 작업에 심도 정확성과 세부정보가 필요한 AR 환경을 만들 때 유용할 수 있습니다. 사용 사례의 예는 다음과 같습니다.

  • 3D 재구성
  • 측정
  • 셰이프 감지

기본 요건

기본 AR 개념을 이해합니다. ARCore 세션을 구성하는 방법을 알아보세요.

깊이 사용 설정

새 ARCore 세션에서 사용자 기기가 깊이를 지원하는지 확인합니다. 일부 ARCore 호환 기기는 처리 전력 제약으로 인해 Depth API를 지원하지 않습니다. 리소스를 저장하기 위해 ARCore에서는 깊이가 기본적으로 사용 중지됩니다. 앱이 Depth API를 사용하도록 하려면 깊이 모드를 사용 설정하세요.

var occlusionManager = // Typically acquired from the Camera game object.

// Check whether the user's device supports the Depth API.
if (occlusionManager.descriptor?.supportsEnvironmentDepthImage)
{
    // If depth mode is available on the user's device, perform
    // the steps you want here.
}

최신 RAW 심도 이미지 가져오기

AROcclusionManager.TryAcquireEnvironmentDepthCpuImage()를 호출하고 AROcclusionManager.environmentDepthTemporalSmoothingRequested를 사용하여 CPU에서 최신 원시 심도 이미지를 가져옵니다.

최신 원시 심도 신뢰도 이미지 가져오기

AROcclusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage()를 호출하고 AROcclusionManager.environmentDepthTemporalSmoothingRequested를 사용하여 CPU의 신뢰도 이미지를 가져옵니다.

// Attempt to get the latest environment depth image.
if (occlusionManager && occlusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage(out XRCpuImage image))
{
    using (image)
    {
        UpdateRawImage(m_RawEnvironmentDepthConfidenceImage, image);
    }
}
else
{
    m_RawEnvironmentDepthConfidenceImage.enabled = false;
}