Meshdiff: STL, 3MF 與 OBJ 檔案的用戶端 3D 網格比較工具

Meshdiff 可在瀏覽器中進行視覺化 3D 網格差異比對

Meshdiff 是一款專為視覺化比較兩個 3D 模型版本而設計的用戶端工具。它允許使用者上傳兩個 STL、3MF 或 OBJ 格式的檔案,並生成基於體素(voxel)的差異圖,其中新增的材料以綠色標示,移除的材料則以紅色標示。該工具提供體積增量指標,以及 0.05mm 到 1mm 之間的可調容差範圍,以精細化比較結果。

技術架構與實作

Meshdiff 以隱私與效能為核心,透過在使用者的瀏覽器中於本地執行所有運算來建構。

用戶端處理

為了確保數據隱私並防止伺服器端上傳,Meshdiff 利用 Web Worker 來處理差異比對過程中的繁重運算。技術棧包含:

  • React 與 TypeScript: 用於應用程式框架與型別安全。
  • React Three Fiber: 用於瀏覽器中的 3D 渲染。
  • 自定義體素差異引擎 (Custom Voxel Diff Engine): 一款專門開發的引擎,用於處理「三角形湯」(triangle soup)——即現實世界 STL 檔案中常見的非流形(non-manifold)幾何結構。

基於體素的比對 vs. CSG

不同於依賴 Manifold 或 CGAL 等建構實體幾何(CSG)函式庫的工具(這些工具需要乾淨、水密性的拓撲結構才能正常運作),Meshdiff 使用基於體素的方法。這確保了工具在處理經常包含拓撲錯誤或間隙的現實世界網格時,仍能保持穩健性。

社群回饋與功能需求

Hacker News 上的使用者與社群成員針對工具的可用性與整合性提出了幾項潛在的改進建議:

視窗同步

多位使用者要求加入「鎖定視圖」或「同步變換」功能。這將允許使用者旋轉或平移其中一個視窗,並讓其他視窗同步旋轉,從而更容易比較不同模型版本在特定角度下的差異。

整合與自動化

為了讓工具在專業工作流程中更具實用性,有人提出了 CI/CD 整合的建議:

  • GitHub PR 觸發器: 將 Meshdiff 整合為 GitHub Pull Requests 的觸發器,以自動預覽分支間的 3D 檔案變更。
  • CLI 工具: 開發命令列介面 (CLI) 以允許自動化生成差異圖供日後檢查。

錯誤報告與邊緣案例

部分使用者指出目前版本中的特定技術限制:

  • 多群組 OBJ 檔案: 有報告指出目前會忽略多群組 OBJ 檔案,僅渲染第一個群組。
  • 重複檔案警告: 使用者建議加入警告,當同一個檔案被重複上傳兩次時,以避免混淆。

"我開發 Meshdiff 是因為客戶一直寄給我 part_v3_FINAL.stl,而我沒有快速的方法可以查看變更了什麼。只要丟入兩個 STL/3MF/OBJ 檔案——體素差異比對就會在你的瀏覽器中渲染出來。"

– @projscope

Sources