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_Ka、map_Kd);
紋理貼圖的路徑必須是相對路徑,不能是絕對路徑; - 紋理貼圖的其他可選參數不是必須的,如果提供了系統並不會採用。
模型準備
您可以通過多種方式來準備符合規範的 OBJ 格式模型檔案。
從已有模型中匯出
使用 Autodesk Maya / 3ds Max 等專業工具,匯入現有 FBX 或其他格式的模型,匯出時選擇 “OBJ Export”,並確保 “Materials” 和 “UVs” 選項啟用。建立全新的模型
使用 Autodesk Maya / 3ds Max 等建模工具建立/繪製 3D 模型並輸出為 OBJ 格式。掃描真實物體並進行 3D 重建
使用 Autodesk ReCap、Bentley ContextCapture 等三維掃描建模軟體,或者雷射掃描器對真實物體進行 3D 重建,並將重建結果匯出為 OBJ 格式。
重要事項
模型貼圖必須準確還原真實物體的視覺特徵,否則識別與跟踪功能將無法正常工作。
模型最佳實踐
以下列出一些常見的在準備模型時會遇到的問題和例子,供您快速參考以便檢查。
確保豐富的紋理細節
模型的貼圖應當具有豐富的紋理細節。
參考圖左:可以被 EasyAR 檢測和跟踪。參考圖右:無法檢測和跟踪,紋理太少。
模型的形狀
模型支援不同的形狀,但主體結構是凸的。
這兩個物體都可以被 EasyAR 檢測和跟踪。
檢查文件內引用路徑
模型文件內引用的路徑必須是相對路徑,不能是絕對路徑。
右側的模型無法被加載,因為 EasyAR 找不到使用了絕對路徑的文件。
模型文件內引用的路徑不能有空格或特殊字元。
右側的模型無法被加載,因為引用的路徑中包含了空格。
Check file encoding format
Model files should use UTF-8 encoding.
The model on the right cannot be loaded due to decoding errors caused by its file encoding issues.
Check model normals
The front-facing normal vectors of model faces should follow the right-hand rule.
The shaded face in the second cube has inverted normals. Such faces will be treated as invisible in EasyAR. When viewed from inside the model, it appears as shown in the third cube.
Models should avoid all faces with inverted normals.Model face count
The number of model faces should be minimized while preserving the object's geometry, typically not exceeding 100,000 triangles. Excessive face counts will cause:- Prolonged model loading times, negatively impacting the user experience during app startup.
- Increased computational load for texture projection, affecting the app's frame rate during tracking.
3D 模型的品質直接決定跟踪成功率。開發者需嚴格遵循格式規範,重點優化紋理細節,並確保檔案格式無誤。