STEP、IGES、STL各类3D模型转换为适用Web的glb,gltf格式并压缩

格式介绍

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,安装和使用都很方便,转换脚本简单明了
  • gltf-pipeline环境

实现转换(方法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_file
    
    input_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_file
    
    input_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 进行文件压缩

总结

初次接触经验不足,欢迎批评指正,感谢「藏锋入鞘」的文章引导!

本文参考CSDN博主「藏锋入鞘」的原创文章,原文链接:https://blog.csdn.net/qq_34177812/article/details/104726405

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值