STEP、IGES、STL各类3D模型转换为适用Web的glb,gltf格式并压缩
STEP、IGES、STL各類3D模型轉換為適用Web的glb,gltf格式并壓縮
- 格式介紹
-
- STEP和IGES格式
- STL格式
- GLTF格式
- 輸出GLTF格式的思路
-
- 環境安裝
- 實現轉換(方法1)
-
- pythonocc讀取轉換STP/IGS/STL
- stl2gltf(將STL轉換為GLTF)
- 實現轉換(方法2)
-
- 使用在線轉換網址得到GLB文件
- GLB文件壓縮
- 總結
格式介紹
STEP和IGES格式
簡單來說,這倆都是CAD的一種文件標準,STEP比IGES出現得更晚一些,由于IGES格式的最新版本是96年發布的,現在多由更高效的STEP等新格式替代,不支持材質。
IGES 可以安裝 iges viewer 免費工具查看。下載鏈接:https://igsviewer.com/download.aspx
但是,現行主流的web3d庫,比如 three.js、Babylon 均不支持 STEP 和 IGES 模型,需要解決這個問題有兩個思路:
- 深入了解格式含義,編寫代碼給對應庫提交對應的解析方案(想法很好,但是實踐不易)
- 將格式轉換為適合web展示的格式,比如稱為3d界JPG的 GLTF 格式(本文就是講這個的)
STL格式
STL格式更多出現在3D打印中,只能用來表示封閉的體或者面,且文件內部都用三角形表示,所以轉換精度比較粗的話,看起來效果比較詭異,包括 Ascii 編碼和二進制兩種編碼模式,一般采用二進制,因為體積相對較小,并且與STEP和IGES一樣不支持材質
比如同一個模型(STEP大小:4.81M),轉換精度不同可能就是如下兩種效果
粗精度(Ascii編碼:3.7M);細精度(Ascii編碼:63.3M,二進制編碼:12.1M)
GLTF格式
簡單來說,就是最小化的把模型資源整理起來,稱為3d模型界的JPG,支持材質貼圖等,在各個Web3D庫中得到了廣泛支持,具體怎么加載這里就不贅述了,網上demo很多
Github上的格式介紹和相關技術匯總 https://github.com/mrdoob/three.js/pull/14308
GLTF的詳細介紹中文資料: https://zhuanlan.zhihu.com/p/65265611
輸出GLTF格式的思路
使用 pythonocc 將 STEP/IGES/Ascii的STL文件 統一轉換為二進制模式的 STL,
再使用 stl2gltf 將STL轉換轉換為 gltf 格式,
最后使用 gltf-pipeline 將glb文件壓縮輸出即可
環境安裝
- pythonocc環境
Pythonocc是python的CAD,安裝和使用都很方便,轉換腳本簡單明了- 下載并安裝AnaConda
https://www.anaconda.com/distribution/#download-section - 創建 pythonocc 環境
在 Anaconda Prompt 中執行安裝命令
conda create -n pythonocct -c dlr-sc -c pythonocc pythonocc-core=7.4.0rc1
- 下載并安裝AnaConda
- gltf-pipeline環境
- 下載并安裝nodejs
https://nodejs.org/zh-cn/ - 安裝gltf-pipeline
npm install -g gltf-pipeline
- 下載并安裝nodejs
實現轉換(方法1)
pythonocc讀取轉換STP/IGS/STL
- 在 Anaconda Prompt 中執行進入環境命令
activate pythonocct - STP轉換為 STL 文件(StpConverter.py)
import os from OCC.Extend.DataExchange import read_iges_file,read_step_file,write_stl_fileinput_file = 'temp2.stp' output_file = 'out.stl' if not os.path.exists(input_file):print('Input file need exists')exit()shapes=read_step_file(input_file) write_stl_file(shapes, output_file, 'binary', 0.03, 0.5) - IGES轉換為 STL 文件(IgsConverter.py)
import os from OCC.Extend.DataExchange import read_iges_file,read_step_file,write_stl_fileinput_file = 'temp2.igs' output_file = 'out2.stl' if not os.path.exists(input_file):print('Input file need exists')exit()shapes=read_iges_file(input_file) write_stl_file(shapes, output_file, 'binary', 0.03, 0.5)
stl2gltf(將STL轉換為GLTF)
將二進制模式的 STL 文件轉換為 GLTF 文件,支持瀏覽器本地轉換、Python腳本以及C++源碼
- stl2gltf.py
- 執行轉換命令
python stl2gltf.py out.stl out.glb -b
實現轉換(方法2)
使用在線轉換網址得到GLB文件
3D模型在線轉換
GLB文件壓縮
直接轉換出來的 glb 文件可能比較大,對于WEB來說還是太大了,需使用 gltf-pipeline 進行文件壓縮
- 執行壓縮命令
gltf-pipeline -i out.glb -o out.glb -b -d - glb/gltf格式模型文件壓縮–gltf-pipeline相關參數說明
總結
初次接觸經驗不足,歡迎批評指正,感謝「藏鋒入鞘」的文章引導!
本文參考CSDN博主「藏鋒入鞘」的原創文章,原文鏈接:https://blog.csdn.net/qq_34177812/article/details/104726405
總結
以上是生活随笔為你收集整理的STEP、IGES、STL各类3D模型转换为适用Web的glb,gltf格式并压缩的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: P3992 [BJOI2017]开车
- 下一篇: 整除的判定