平台專屬指南
Android (Kotlin/Java)
Android NDK (C)
Unity (AR 基礎)
Unreal Engine
想讓 AR 應用程式開發人員順利將虛擬應用程式融入使用者的需求之中,使用者在場景中放置虛擬物體時,希望這些物體看起來像是真實世界中的物品。如果您正在建構一個讓使用者購買家具的應用程式,就應讓他們確信自己要購買的扶手椅能放入家中空間。
Depth API 可協助裝置的相機瞭解場景中真實物體的大小和形狀。它會建立深度圖片或深度地圖,為應用程式增添一層真實感。您可以使用深度圖像提供的資訊,為使用者提供身臨其境的逼真體驗。
使用 Depth API 開發的用途
Depth API 可以協助物件遮蔽、改善沉浸式體驗和新互動互動,改善 AR 體驗的真實性。以下列舉一些在您自己的專案中。如要瞭解 Depth 的實際運作情形,請探索 ARCore Depth Lab 中的範例場景,瞭解存取深度資料的不同方式。這個 Unity 應用程式是 GitHub 上的開放原始碼。
啟用遮蔽功能
遮蔽,也就是在現實世界物體後方準確算繪虛擬物體,是打造身歷其境 AR 體驗的關鍵。舉例來說,假設使用者想將虛擬 Andy 放入場景,而場景中有一扇門旁邊有行李箱。在沒有遮蔽的情況下算繪,Andy 會與樹幹邊緣重疊,不符合實際情況。如果您使用場景的深度,並瞭解虛擬 Andy 相對於木箱樹幹等周遭物體的距離,就能準確算出 Andy 的遮蔽率,讓 Andy 在周遭環境中看起來更逼真。
轉換場景
顯示虛擬雪花來填補沙發的手臂和枕頭,或將客廳投射在霧霧中,進而沉浸在充滿臨場感的全新世界中。您可以使用 Depth 建立場景,讓虛擬燈光與實體物件互動、隱藏在後方,並重新點亮實體物件。
距離和景深
需要顯示某物體很遠嗎?您可以使用距離測量功能,並透過 Depth API 加入景深效果,例如模糊處理場景的背景或前景。
允許使用者與 AR 物件互動
讓使用者透過碰撞和物理學與現實世界互動,讓使用者透過您的應用程式「接觸」世界。比如說,虛擬物體可以跨越真實世界的障礙,或讓虛擬漆彈射擊到真實世界的樹上。將深度為基礎的碰撞與遊戲物理效果結合,就能打造栩栩如生的體驗。
改善命中測試
深度可用於改善命中測試結果。平面觸發測試只適用於具有紋理的平面,而深度觸發測試則更為精細,甚至可用於非平面和低紋理區域。這是因為深度命中測試會使用場景的深度資訊,判斷點的正確深度和方向。
在以下範例中,綠色 Andy 代表標準平面觸發測試,紅色 Andy 代表深度觸發測試。
裝置相容性
Depth API 僅支援具備深度支援處理能力的裝置,且必須在 ARCore 中手動啟用,如「啟用深度」一文所述。
某些裝置也可能會提供硬體深度感應器,例如飛行時間 (ToF) 感應器。如需支援 Depth API 的最新裝置清單,以及具備支援硬體深度感應器 (例如 ToF 感應器) 的裝置清單,請參閱「ARCore 支援裝置」頁面。
深度圖像
Depth API 會使用動態深度演算法建立深度圖,以便呈現 3D 世界。深度圖中的每個像素都與場景與相機之間的距離測量值相關聯。這個演算法會從不同角度拍攝多部裝置圖片並進行比較,藉此估算使用者移動手機時與每個像素之間的距離。這項功能會選擇性地運用機器學習技術,即使使用者幾乎沒有任何動作,也能提升深度處理效能。也會利用使用者裝置可能提供的任何其他硬體。如果裝置有專屬的深度感應器 (例如 ToF),演算法會自動合併所有可用來源的資料。這項做法可強化現有的深度影像,並在相機未移動時提供深度資訊。在沒有或幾乎沒有特徵的表面 (例如白色牆壁) 或動態場景 (有移動中的人物或物體) 中,這項功能也能提供更佳的深度。
下圖顯示走廊的鏡頭圖像,牆上有輛腳踏車,以及由相機圖像產生的深度圖像視覺化資訊。紅色區域表示距離相機較近,藍色區域表示距離相機較遠。
從動作擷取深度
使用者移動裝置時,系統就會提供深度資料。這個演算法可在 0 到 65 公尺的距離內,提供可靠且準確的深度估計值。裝置與實際環境之間的距離約為一半到五公尺左右時,可取得最準確的結果。鼓勵使用者多移動裝置的體驗,將可帶來更出色的成效。
取得深度圖片
您可以使用 Depth API 擷取與每個相機影格相符的深度圖像。擷取的深度圖片與相機具有相同的時間戳記和視野內在值。有效的深度資料只有在使用者開始移動裝置後才會產生,因為深度是透過動作取得。表面上沒有或幾乎沒有特徵的物體 (例如白色牆壁) 會與不精確的深度相關聯。
後續步驟
- 請參閱 ARCore Depth Lab,瞭解存取深度資料的不同方式。