Raw Depth API 為相機圖片提供深度資料,該圖片的準確度高於完整深度 API,但不一定能涵蓋每個像素。系統也可以進一步處理原始景深圖片和相應的可信度圖片,讓應用程式只使用足以滿足自身用途的深度資料。
裝置相容性
支援 Depth API 的裝置都可以使用原始深度。如同完整深度 API 一樣,Raw Depth API 不需要支援的硬體深度感應器,例如飛行時間 (ToF) 感應器。不過,Raw Depth API 和完整的 Depth API 都會使用裝置可能具備的任何受支援硬體感應器。
與完整深度 API 比較
Raw Depth API 可提供精準度較高的深度預估值,但原始深度圖片不一定會包含相機影像中所有像素的深度估計。相較之下,完整的 Depth API 可提供每個像素的預估深度,但由於深度估計數據的平滑和內插,各像素深度資料可能較不準確。這兩種 API 的深度圖片格式和大小都相同。只有內容不同。
下表說明 Raw Depth API 與完整深度 API 之間的差異,其中使用椅子的圖片和廚房中的桌子。
API | 傳回 | 相機圖片 | 深度圖片 | 「可信度」圖片 |
---|---|---|---|---|
原始深度 API |
|
|||
完整深度 API |
|
不適用 |
可信度圖片
Raw Depth API 傳回的可信度圖片中,較亮的像素可信度較高,其中白色的像素代表完全信賴水準,黑色像素則代表沒有信心。一般來說,相較於其他區域 (例如一塊空白牆壁),相機圖像中相機圖像較有紋理較高的區域 (例如樹木) 會有較高的原始深度。沒有紋理的表面通常產生的信賴水準為零。
如果目標裝置有支援的硬體深度感應器,即使圖像位置與相機相距甚遠,即使在無紋理的表面上,信賴水準可能還是會較高。
運算費用
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.
}
取得最新的原始景深圖片
呼叫 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;
}