Table of Contents

在 Unity 中使用 EasyAR Mega 實現遮擋

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

開始之前

遮擋的實現方式

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

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

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

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

使用建圖結果中的遮罩文件

根據以下步驟,通過雲定位庫的 遮罩文件下載 入口下載建圖結果中的遮罩文件作爲遮擋白模,並導入場景。遮罩文件可以直接使用,也可以按需裁剪後使用。

附註

此下載方式僅適用於建圖版本 9.6 及以上的建圖結果。

下載遮罩文件

將 Block 添加到雲定位庫後,在該 Block 所在行的 操作 列中點擊 遮罩文件下載

遮罩文件下載入口

在彈窗中根據需要選擇標準精度或低精度,點擊對應的 下載 按鈕,下載 glb 格式的遮罩文件。

下載遮罩文件

[可選] 對模型進行裁剪

遮罩文件覆蓋整個 Block,如果其覆蓋範圍已經滿足遮擋需要,可以直接使用,跳過本步驟;如果只需要使用部分區域進行遮擋,再按以下步驟裁剪。

在數字內容創建軟件(例如 Blender)中打開下載的模型。

裁剪前

裁剪模型,只保留需要用於遮擋的部分,保存爲 glb 格式。裁剪時保持模型的位置、旋轉和縮放不變,以便導入 Unity 後與 Block 對齊。

裁剪後

將模型導入 Unity

將模型導入 Unity,並掛載至場景中對應的 Block 節點下,作爲其子節點。

附註

glb 模型導入 Unity 需要安裝 com.unity.cloud.gltfast 包,版本不低於 6.8。若項目中沒有安裝該包或版本過低,請通過 Package Manager 安裝或升級。

Inspector 面板中修改遮擋模型的 Transform,設置其相對 Block 節點的位置、旋轉和縮放:

  • Position 設置爲 (0, 0, 0)
  • Rotation 設置爲 (0, 180, 0)
  • Scale 設置爲 (1, 1, 1)

完成後,遮擋模型應與 Block 稠密模型的對應部分貼合。

導入遮擋模型

附註

從雲定位庫下載的遮罩文件與 Unity 的座標系定義不同,需要將 Rotation 的 Y 分量設置爲 180 才能對齊。此設置適用於本節從建圖結果下載的遮罩文件,後文通過 Mega 編輯器工具導出的稠密模型使用不同的旋轉設置。

爲模型賦予遮擋材質

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

遮擋模型更換材質

使用 EIF 數據模擬運行或實機運行

使用 EIF 數據模擬運行或實機運行,檢查虛擬物體是否被對應的實景區域遮擋。

使用幾何體作爲遮擋

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

擺放遮擋幾何體

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

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

根據全景圖微調遮擋

爲幾何體賦予遮擋材質

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

使用 EIF 數據模擬運行或實機運行

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

使用裁剪並減面的稠密模型作爲遮擋

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

Mega Blocks 中導出

點擊 Mesh 右邊的 Export 按鈕導出稠密模型。

導出稠密模型

修改導出選項

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

圖中 1 爲 LOD 層級,層級越低模型越簡單,面數越少,若需要最高的精度選擇最高層級。

圖中 2 爲導出貼圖選項,這裏只需要白模作爲遮擋,不需要貼圖。

對模型進行裁剪並減面

將導出後的模型在數字內容創建軟件(例如 Blender)中進行裁剪,減面,保存爲 glb 格式。

提示

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

裁剪前

裁剪並減面後:

裁剪後

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

附註

glb 模型導入 Unity 需要安裝 com.unity.cloud.gltfast 包,版本不低於 6.8。若項目中沒有安裝該包或版本過低,請通過 Package Manager 安裝或升級。

導入遮擋模型

修改模型的 Transform

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

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

遮擋模型貼合

爲模型賦予遮擋材質

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

遮擋模型更換材質

使用 EIF 數據模擬運行或實機運行

使用 EIF 數據模擬運行或實機運行,查看效果。

遮擋的效果預期

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

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

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

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

相關主題