警告! 空間網格功能(néng)被标記為(wèi)實驗性,因為(wèi)當前包和 Snapdragon Spaces 服務(wù)的優化可(kě)能(néng)導緻版本間的不兼容。 |
此示例演示了如何生成和可(kě)視化空間網格,從而近似現實世界中(zhōng)的環境。有(yǒu)關空間網格的基本信息以及 AR Foundation 的 AR Mesh Manager 組件的功能(néng),請參考 Unity 文(wén)檔。要使用(yòng)此功能(néng),必須在 OpenXR 插件設置中(zhōng)啓用(yòng)它,路徑為(wèi):Project Settings > XR Plug-in Management > OpenXR (> Android Tab)。
示例工(gōng)作(zuò)原理(lǐ)
ARMeshManager
ARMeshManager 組件必須附加到 ARSessionOrigin GameObject 的子對象上,該組件會引用(yòng)當網格可(kě)用(yòng)時生成的 MeshFilter。
警告! 将 ARMeshManager 組件附加到相機對象上會導緻該對象的縮放發生變化,從原始的 (1, 1, 1) 變為(wèi) (10, 10, 10)。這會導緻佩戴設備上的應用(yòng)程序渲染出現問題,直到将相機縮放恢複到原始狀态。 |
以下屬性不受支持:
● 當前不支持更改生成網格的密度。
● 切線(xiàn)、紋理(lǐ)坐(zuò)标和顔色不會作(zuò)為(wèi)網格的一部分(fēn)生成。訪問 ARMeshManager 組件中(zhōng)這些屬性的緩沖區(qū)可(kě)能(néng)會返回空值。
● Concurrent Queue Size目前不支持更改。
Normals默認情況下啓用(yòng)該屬性。
提示! 對不受支持的 ARMeshManager 組件屬性進行更改時,在構建應用(yòng)程序時會在控制台中(zhōng)顯示警告。 |
通過訂閱 ARMeshManager 組件的 meshesChanged 回調,可(kě)以獲取有(yǒu)關網格添加、更新(xīn)或删除的相關數據。
示例代碼
Spaces AR Mesh Manger 配置
ARMeshManager 組件包含一些 Snapdragon Spaces Unity 包的子系統實現不支持的屬性。嘗試使用(yòng)這些不受支持的屬性時,構建時會顯示警告,且如果啓用(yòng)了空間網格(實驗性)功能(néng),可(kě)能(néng)會出現問題。建議使用(yòng)(可(kě)選的)Spaces AR Mesh Manager Config 組件,它提供了更多(duō)配置生成網格的選項。使用(yòng)此組件後,空間網格提供器還可(kě)以處理(lǐ)來自運行時的 TrackingOriginMode.Floor 相關的相機高度偏移。如果不使用(yòng)此組件,網格可(kě)能(néng)會出現在錯誤的位置。
此組件必須附加到與 ARMeshManager 組件相同的 GameObject 上。
● 計算 CPU 法線(xiàn):
○ 如果啓用(yòng),将為(wèi)網格中(zhōng)的每個頂點計算 CPU 法線(xiàn)。
○ 網格中(zhōng)可(kě)能(néng)會出現重複的頂點(使用(yòng)不同的索引)。
○ 這可(kě)能(néng)導緻生成的網格中(zhōng)出現可(kě)見的縫隙。
○ 對于網格中(zhōng)的每個索引,每個引用(yòng)該索引的三角形都會對最終的法線(xiàn)産(chǎn)生影響,但不同的索引(即重複的頂點)可(kě)能(néng)具(jù)有(yǒu)不同的法線(xiàn)。
○ 如果 Calculate CPU Normals 屬性和 ARMeshManager 組件上的 Normals 屬性沒有(yǒu)同時啓用(yòng)或同時禁用(yòng),構建應用(yòng)程序時控制台會顯示解釋性警告。
使用(yòng)平滑法線(xiàn):
○ 如果啓用(yòng),CPU 法線(xiàn)會對每個頂點進行平滑處理(lǐ)
○ 所有(yǒu)引用(yòng)具(jù)有(yǒu)相同空間但不同索引的頂點的三角形會将這些重複的頂點視為(wèi)相同的頂點。
○ 這可(kě)能(néng)會導緻檢測到的幾何體(tǐ)中(zhōng)的硬邊緣不夠清晰,但可(kě)以減少縫隙的出現。
○ 計算平滑法線(xiàn)會增加處理(lǐ)能(néng)力的消耗,對性能(néng)産(chǎn)生影響。
默認情況下,打開示例時,生成的網格會根據檢測到的環境進行适配。
● 當啓用(yòng) Calculate CPU Normals 屬性時,網格将使用(yòng) Mesh With Cpu Normals Material 和标準着色器進行可(kě)視化。
● 禁用(yòng) Calculate CPU Normals 屬性時,網格将使用(yòng)自定義的 MeshVisualization.shader 進行可(kě)視化,僅用(yòng)于生成法線(xiàn)以便顯示。