Table of Contents

在 Unity 中使用 EasyAR Mega 實現遮擋

遮擋 (Occlusion) 是提升 AR 虛實融合沉浸感的關鍵技術。本文將介紹如何在 Unity 中透過 EasyAR Mega 實現遮擋效果。

開始之前

遮擋的實現方式

  • 離線建模:在 Block 座標系下,針對現實世界中的實體(如牆體、立柱、大型設備)建立 1:1 匹配的幾何體;或透過對 Block 稠密模型進行裁剪與減面處理得到最佳化後的模型。

  • 執行時對齊:在執行時,透過雲端定位將 Block 座標系與現實空間對齊,並載入對應的幾何體。

  • 材質替換:為這些幾何體賦予特殊的遮擋材質。

  • 視覺效果:當 GPU 渲染其他虛擬物體時,會因深度測試未通過而自動剔除被遮擋部分的畫素,從而使虛擬物體遵循現實物理空間的遮擋邏輯。

如何使用幾何體作為遮擋

根據以下步驟可以在場景中新增作為遮擋使用的幾何體並驗證效果。

擺放遮擋幾何體

根據 Mega Block 的稠密模型使用內建幾何體或自建幾何體作為遮擋擺放在 Block 座標系下的正確位置。 擺放遮擋幾何體

[可選]根據全景圖微調幾何體的位置

根據全景圖微調遮擋

為幾何體賦予遮擋材質

將幾何體材質修改為遮擋材質,可以使用 Unity 自帶的 SpatialMappingOcculusion根據全景圖微調遮擋

使用 EIF 資料模擬執行或實機執行

可以根據執行效果微調遮擋模型的擺放。

如何使用裁剪並減面的稠密模型作為遮擋

根據以下步驟將匯出後的 Mega Block 稠密模型裁剪並減面得到用於遮擋的白模,並匯入場景作為遮擋。

Mega Blocks 中匯出

Inspector 面板中的 Mega Blocks 工具選擇匯出

選擇匯出

修改匯出選項

在匯出時注意修改匯出選項。

匯出選項

圖中 1 為 LOD 層級,層級越低模型越簡單,面數越少,若需要最高的精度選擇2,若能接受降低精度以減少面數選擇 1 或者 0。

圖中 2 為匯出貼圖選項,由於我們只需要白模作為遮擋,不需要貼圖。

對模型進行裁剪並減面

將匯出後的模型在數位內容建立軟體(例如 Blender)中進行裁剪,減面,儲存為 Glb

提示

例子中使用的是 Blender 的 Decimate Modifier。

裁剪前

裁剪並減面後:

裁剪後

將遮擋模型匯入 Unity 並掛載到場景中 Block 節點下方

匯入遮擋模型

修改模型的 Transform

修改模型的 Transform 使 PositionRotation 均全部為 0

此時用於遮擋的白模應該和稠密模型貼合,這是因為在數位內容建立軟體中進行裁剪和減面操作時,並沒有改變 Block 座標系的定義。

遮擋模型貼合

為模型賦予遮擋材質

將模型材質修改為遮擋材質,可以使用 Unity 自帶的 SpatialMappingOcculusion

遮擋模型更換材質

使用 EIF 資料模擬執行或實機執行

使用 EIF 資料模擬執行或實機執行,檢視效果。

遮擋的效果預期

遮擋的效果主要由以下幾點影響:

  • 定位跟蹤本身的精度
  • 模型擺放的準確程度
  • 模型本身的精度(如果不是簡單的幾何體)

在定位漂移時出現數公分未對齊的情況是正常的。

遮擋用的模型面數太多容易影響效能,建議只在必要區域使用,並且儘量使用簡單的幾何體作為遮擋。

相關主題