Draco

更新於 發佈於 閱讀時間約 5 分鐘

Draco 是開源的3D 圖形壓縮,

前些陣子在處理的專案,需要用到放置3D模型,
問題來了,上百個幾千幾萬K大大小小的gltf模型,一次載入超級慢的,
公司配備電腦等級還不錯,
本機load的快,也需要大概1分鐘內時間,
但一上到客戶server之後,loding大概卡了5分多鐘吧,
不知道的還以為斷線了😂
當然跟現場的網路也有關係,但是減少loading還是有必要的,

拜訪google大神之後得到的答案,

便是 Draco 3D Data Compression

PS: 在專案內放置3D模型時,我用的是Three.js,所以範例js都會是用此,
另外如果你跟一我樣使用Windows環境,
那麼你在cmd壓縮時可能會遇到權限阻擋問題,
請記得以系統管理員身分開啟命令提示字元😎

那麼就先來說說怎麼壓縮3D模型,再提供放置範例。

3D模型壓縮及放置

1.安裝NodeJS

為了能夠使用npm指令安裝套件,在此之前你需先安裝NodeJS

2.檢查是否有npm

按理來說裝好新版NodeJs應該就有npm管理工具了,
但還是打開你的終端機輸入一下npm -v 來測試是否成功安裝

3.安裝 gltf-pipeline

輸入 npm install -g gltf-pipeline

這個就是我們拿來壓縮用的套件

4.壓縮模型檔案

為了方便,先cd到你的模型路徑下,之後只要打檔名就好😂

壓縮指令: gltf-pipeline -i 模型檔名 -o 壓縮後模型檔名 -d

壓縮範例:

單一壓縮 gltf-pipeline -i A-1.gltf -o A-1_drc.gltf -d

批次壓縮 for %i in ('dir *.gltf ') do gltf-pipeline -i %i -o %~ni_drc.gltf -d

PS: 有很多種模型格式支援,但由於我的專案需要,範例會是gltf to gltf

5.檢查壓縮過的模型

看到沒有這個壓縮後的檔案大小,

這當然視模型的貼圖材質而定壓縮比例不同,

但壓縮率實在是很高

raw-image

6.Three.js讀取壓縮過的模型

//加載GLTF 模型需要的js
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
//加載解碼需要的js
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js';
//建立解碼加載器
let dacLoader = new DRACOLoader();

/*
* https://www.gstatic.com/draco/v1/decoders/
* 為解碼器源碼目錄,
* 如果有下載就可以使用第二種自己指定路徑主要是這三隻需要存在
* draco_decoder.js— Emscripten 編譯的解碼器,兼容任何現代瀏覽器。
* draco_decoder.wasm— WebAssembly 解碼器,兼容較新的瀏覽器和設備。
* draco_wasm_wrapper.js— WASM 解碼器的 JavaScript 包裝器。
*/
dacLoader.setDecoderPath('https://www.gstatic.com/draco/v1/decoders/');
//dacLoader.setDecoderPath('/draco/');
//建立模型加載器
const loader = new GLTFLoader();
loader.setDRACOLoader(dacLoader);
loader.load('/model/A-1_drc.gltf',
(gltf) => {
this.scene.add(gltf.scene);
});

優缺點

  • 很明白的檔案大小差異非常大
  • 壓縮過的檔案增加了解碼時間,如果你本身檔案很小就沒必要用此方式
  • 跟壓縮圖片一樣,模型有機會有失真問題
  • 實測專案本頁讀取速度在本機直接剩下10-20秒,客戶端server約1分鐘內,比原本少了5倍時間


雖然縮短了很多的時間,但客戶還是說好慢,

畢竟還是花了1分鐘左右在載入網頁,

對使用者體驗來說,還是有差,

後來採用的方式除了壓縮之外,也減少初次載入模型量,

需要查看再自行開啟載入其他項目。

此專案的模型原始總檔案大小約1G多,

3D繪圖本身就很消耗資源,

所以無可避免需要找各種方式減少loading,

總之3D模型很多奇妙的坑,但也造就很多網站新的呈現方式,

非常有趣 😂😂😂

繼續往新世界前進吧~~

留言
avatar-img
留言分享你的想法!
avatar-img
Kitty的沙龍
5會員
6內容數
記錄各種美食、小吃、點心的分享文
你可能也想看
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
2025 vocus 推出最受矚目的活動之一——《開箱你的美好生活》,我們跟著創作者一起「開箱」各種故事、景點、餐廳、超值好物⋯⋯甚至那些讓人會心一笑的生活小廢物;這次活動不僅送出了許多獎勵,也反映了「內容有價」——創作不只是分享、紀錄,也能用各種不同形式變現、帶來實際收入。
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
嗨!歡迎來到 vocus vocus 方格子是台灣最大的內容創作與知識變現平台,並且計畫持續拓展東南亞等等國際市場。我們致力於打造讓創作者能夠自由發表、累積影響力並獲得實質收益的創作生態圈!「創作至上」是我們的核心價值,我們致力於透過平台功能與服務,賦予創作者更多的可能。 vocus 平台匯聚了
Thumbnail
在離線環境需要安裝Python套件時就相當的麻煩,需要先下載好套件包,在打指令安裝,若套件數量一多時就會相當麻煩。 本文將介紹如何利用兩行指令快速的安裝整個資料夾的套件。
Thumbnail
在離線環境需要安裝Python套件時就相當的麻煩,需要先下載好套件包,在打指令安裝,若套件數量一多時就會相當麻煩。 本文將介紹如何利用兩行指令快速的安裝整個資料夾的套件。
Thumbnail
我們在「【🎓 Python的深度問答集】torchaudio 對部分段落進行音訊解碼」有分享到如何對一包包的封包進行音訊解碼, 但隨著音檔越大, 最終解碼的速度會越來越慢, 而這並非串流的本意, 串流應該就像水管一樣, 收到多少資料就運算多少量, 並不會隨著累積的容量越大而導致效能下降。 但實際
Thumbnail
我們在「【🎓 Python的深度問答集】torchaudio 對部分段落進行音訊解碼」有分享到如何對一包包的封包進行音訊解碼, 但隨著音檔越大, 最終解碼的速度會越來越慢, 而這並非串流的本意, 串流應該就像水管一樣, 收到多少資料就運算多少量, 並不會隨著累積的容量越大而導致效能下降。 但實際
Thumbnail
套件(Package)是將程式或程式庫進行組織、分發和共享的一種方式。在軟體開發中,套件通常包含了相關的程式碼、資源文件和元數據,並提供了統一的名稱空間和版本管理。
Thumbnail
套件(Package)是將程式或程式庫進行組織、分發和共享的一種方式。在軟體開發中,套件通常包含了相關的程式碼、資源文件和元數據,並提供了統一的名稱空間和版本管理。
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
Draco 是開源的3D 圖形壓縮, 前些陣子在處理的專案,需要用到放置3D模型, 問題來了,上百個幾千幾萬K大大小小的gltf模型,一次載入超級慢的, 公司配備電腦等級還不錯, 本機load的快,也需要大概1分鐘內時間, 當然跟現場的網路也有關係,但是減少loading還是有必要的, 拜訪goog
Thumbnail
Draco 是開源的3D 圖形壓縮, 前些陣子在處理的專案,需要用到放置3D模型, 問題來了,上百個幾千幾萬K大大小小的gltf模型,一次載入超級慢的, 公司配備電腦等級還不錯, 本機load的快,也需要大概1分鐘內時間, 當然跟現場的網路也有關係,但是減少loading還是有必要的, 拜訪goog
Thumbnail
1.首先到http://www.gildor.org/downloads 下載所有檔案  2.解壓縮後把需要的upk檔複製到檔案資料夾  3.打開cmd.exe輸入umodel -export -md5 [upk檔案] 4.如果還需要其他指令  UE viewer / exporter Usa
Thumbnail
1.首先到http://www.gildor.org/downloads 下載所有檔案  2.解壓縮後把需要的upk檔複製到檔案資料夾  3.打開cmd.exe輸入umodel -export -md5 [upk檔案] 4.如果還需要其他指令  UE viewer / exporter Usa
Thumbnail
JavaScript 能做許多事,尤其透過瀏覽器的 API 或套件,我們得以悠游於巨量資料中,將資料轉換為與使用者溝通的介面,以下就來分享 15 個實用的 Vanilla JS 程式碼...
Thumbnail
JavaScript 能做許多事,尤其透過瀏覽器的 API 或套件,我們得以悠游於巨量資料中,將資料轉換為與使用者溝通的介面,以下就來分享 15 個實用的 Vanilla JS 程式碼...
Thumbnail
最近某專案弄完上線之後,因為想要加快 First Meaningful Paint 的速度,開始調查有沒有甚麼可以改進的地方。 看著看著就看到 242KB 的 D3... 🤭
Thumbnail
最近某專案弄完上線之後,因為想要加快 First Meaningful Paint 的速度,開始調查有沒有甚麼可以改進的地方。 看著看著就看到 242KB 的 D3... 🤭
Thumbnail
更改存檔、讀檔畫面使其簡潔。
Thumbnail
更改存檔、讀檔畫面使其簡潔。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News