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