Table of Contents

3D 模型準備與優化

本文將詳細講解如何準備符合 EasyAR 要求的 3D 模型,涵蓋格式規範、工具推薦及常見問題排查,幫助開發者從源頭提升跟蹤成功率。

模型格式與規範

EasyAR 3D 物體跟蹤僅支持 Wavefront OBJ 格式。使用時需遵循以下要求和規範。

模型文件結構

一個完整的 3D 模型必須包含以下文件:

  • .obj文件:幾何模型數據(包含頂點、面、UV 座標等)。
  • .mtl文件:材質定義(顏色、紋理貼圖路徑)。
  • 紋理貼圖:至少一張 JPEG 或 PNG 格式的圖片(建議分辨率512×512至2048×2048)。

文件要求

  • 所有文件必須放在同一文件夾內,且使用相對路徑引用(如 texture.jpg),禁止絕對路徑(如 C:\Models\texture.jpg)。
  • 文件名以及文件內部的路徑禁止包含空格,建議使用英文或數字。
  • 文件編碼格式必須爲 UTF-8(避免亂碼導致加載失敗)。

OBJ(.obj)文件最低要求

  • 必須包含 vertex
    幾何頂點,用 \((x, y, z [, w])\) 座標表示。\(w\) 爲可選項,默認爲1.0。頂點的色彩參數不是必須的,如果提供了色彩參數系統並不會加載。
  • 必須包含 texture coordinates
    紋理座標,用 \((u, v [,w])\) 座標表示,\(w\) 爲可選項,默認爲0。通常情況下,\(u\)\(v\) 的取值應該是在0至1之間。對於小於0或者大於1的情形,系統默認會以 REPEAT 模式進行處理,即座標的整數部分被忽略,然後構建一個無限複製的模式(與 OpenGL 中的 GL_REPEAT 處理方式相同)。
  • 必須包含 face
    面元素,應當至少包含頂點的索引,以及頂點的紋理座標的索引。超過3個頂點的多邊形(如四邊形)面片結構同樣支持。
  • 必須包含 mtllib
    材質文件的引用,要求至少指定一個外部 MTL 材質文件,文件路徑必須是相對路徑,不能是絕對路徑。
  • 必須包含 usemtl
    模型元素所引用的材質需指定材質名字,這個材質名字應當與外部 MTL 材質文件中定義的材質名字保持一致。

MTL(.mtl)文件最低要求

  • 一個 MTL 文件中應當定義至少一個材質。
  • 紋理貼圖是必須的。
    通常情況下,只需要指定環境光或者漫反射的紋理貼圖(map_Kamap_Kd);
    紋理貼圖的路徑必須是相對路徑,不能是絕對路徑;
  • 紋理貼圖的其他可選參數不是必須的,如果提供了系統並不會採用。

模型準備

您可以通過多種方式來準備符合規範的 OBJ 格式模型文件。

  1. 從已有模型中導出
    使用 Autodesk Maya / 3ds Max 等專業工具,導入現有 FBX 或其他格式的模型,導出時選擇 “OBJ Export”,並確保 “Materials” 和 “UVs” 選項啓用。

  2. 創建全新的模型
    使用 Autodesk Maya / 3ds Max 等建模工具創建/繪製 3D 模型並輸出爲 OBJ 格式。

  3. 掃描真實物體並進行 3D 重建
    使用 Autodesk ReCapBentley ContextCapture 等三維掃描建模軟件,或者激光掃描儀對真實物體進行 3D 重建,並將重建結果導出爲 OBJ 格式。

重要事項

模型貼圖必須準確還原真實物體的視覺特徵,否則識別與跟蹤功能將無法正常工作。

模型最佳實踐

以下列出一些常見的在準備模型時會遇到的問題和例子,供您快速參考以便檢查。

  1. 確保豐富的紋理細節
    模型的貼圖應當具有豐富的紋理細節。

    參考圖左:可以被 EasyAR 檢測和跟蹤。參考圖右: 無法檢測和跟蹤,紋理太少。

  2. 模型的形狀
    模型支持不同的形狀,但主體結構是凸的。

    這兩個物體都可以被 EasyAR 檢測和跟蹤。

  3. 檢查文件內引用路徑
    模型文件內引用的路徑必須是相對路徑,不能是絕對路徑。

    右側的模型無法被加載,因爲 EasyAR 找不到使用了絕對路徑的文件。

    模型文件內引用的路徑不能有空格或特殊字符。

    右側的模型無法被加載,因爲引用的路徑中包含了空格。

  1. 檢查文件的編碼格式
    模型文件應該使用 UTF-8 編碼格式。

    右側的模型無法被加載,因爲其文件編碼的問題導致讀取時解碼錯誤。

  2. 檢查模型法向
    模型面片的法向量的正向應遵循右手準則。

    第二個立方體中陰影部分的面片的法向量是負值取向。這種面片在 EasyAR 中會當成不可見面處理。如果從模型內部看出去,會顯示成第三個立方體的樣子。
    模型應當避免一切法向量負值取向的面片。

  3. 模型面片數量
    模型面片的數量在保證物體幾何形狀的前提下應儘可能少,通常不應超過 100,000 個三角面片。過多的面片數量會導致:

    • 模型加載時間過長,影響應用在啓動的用戶體驗
    • 面片紋理投影的計算量增加,影響應用在跟蹤時的幀率

3D 模型的質量直接決定跟蹤成功率。開發者需嚴格遵循格式規範,重點優化紋理細節,並確保文件格式無誤。