Blender 到 Web 的 3D 模型管線
幼苗 3D 美術
建立於 2025年11月8日
blender gltf 3d pipeline
為什麼需要一套管線
在將 Blender 製作的 3D 模型放到網頁上展示時,我發現直接匯出的 GLB 檔案往往過大。一個中等複雜度的工業機台模型,未經處理可能達到 30-50MB,這在 Web 環境下完全無法接受。因此我建立了一套從 Blender 到瀏覽器的標準化管線。
匯出格式選擇
glTF 2.0 是目前 Web 3D 的事實標準。有兩種打包方式:
- glTF + bin + textures:分離式,適合需要個別替換貼圖的場景
- GLB:單一二進位檔案,適合部署
本專案統一使用 GLB 格式,簡化部署流程。
優化流程
1. Blender 端
在匯出前先做幾件事:
- 套用所有 modifier(特別是 Subdivision Surface,降到合理的 level)
- 合併不需要獨立操作的 mesh
- 刪除隱藏的物件和未使用的材質
- 確認 UV 是否正確展開
匯出時選擇「glTF Binary (.glb)」,勾選 Draco compression。
2. gltf-transform 後處理
Blender 的 Draco 壓縮選項有限。我用 gltf-transform CLI 做更精細的優化:
# 執行完整優化管線
npx gltf-transform optimize input.glb output.glb \
--compress draco \
--texture-compress webp
主要操作:
- Draco 壓縮:geometry 資料壓縮率通常可達 80-90%
- 貼圖轉 WebP:比 PNG 小 25-35%,比 JPEG 品質更好
- 合併 mesh:減少 draw call
- 移除未使用的資源:清理 Blender 匯出時殘留的冗餘資料
3. 大小分界
本專案的規則:
- < 2MB 的 GLB → 放在
public/models/,隨網站部署 -
= 2MB 的 GLB → 上傳到 Cloudflare R2,透過 CDN 載入
實際成果
以一個自動化機台的模型為例:
- Blender 原始匯出:42MB
- Draco + WebP 優化後:3.8MB
- 壓縮率約 91%
載入時間從 Wi-Fi 環境的 8 秒降到 0.7 秒。
載入端注意事項
在 Three.js 端使用 GLTFLoader 搭配 DRACOLoader 載入壓縮過的模型。Draco decoder 的 WASM 檔案需要正確設定路徑。同時所有載入的資源都要經過 ResourceTracker 註冊,確保頁面切換時正確釋放。
待整理
- LOD(Level of Detail)在 Web 端的實作方式
- 動畫資料的壓縮策略
- 與 Gaussian Splatting 格式的比較