# 3d-model-convert-to-gltf **Repository Path**: antonetwo_admin/model-convert-to-gltf ## Basic Information - **Project Name**: 3d-model-convert-to-gltf - **Description**: Convert 3d model (STL/IGES/STEP/OBJ/FBX) to gltf and compression - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 21 - **Created**: 2021-04-04 - **Last Updated**: 2021-04-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 3DModelConvertToGltf 统一模型格式转换工具 此项目产生的主要原因是工作中遇到了需要**在Web中展示 STEP 和 IGES 模型的场景**,但是市面上的web3d类库均不支持此格式,并且用户上传的STL文件直接展示会占用大量带宽或CDN流量,转换为压缩后的gltf会比较合适。 样例文件压缩效果如下表: | 文件类型 | 文件名 | 转换时间 | 原大小 | 转换后大小 | | -------- | ------------------------ | ---------- | ------ | ---------- | | stl | assets/test.stl | 2368.890ms | 7.6 MB | 86 KB | | iges | assets/test.iges | 1641.226ms | 1 M | 111 KB | | stp | assets/test.stp | 2969.200ms | 5.1 MB | 217 KB | | fbx | assets/Samba Dancing.fbx | <1000ms | 3.7 MB | 614 KB | **支持输入格式:** STL/IGES/STP/OBJ/FBX **支持输出格式:** GLTF/GLB 本项目即采用了博客中总结的思路:[STEP和IGES模型转换为适用Web的glb格式](https://blog.wj2015.com/2020/03/08/step%e5%92%8ciges%e6%a8%a1%e5%9e%8b%e8%bd%ac%e6%8d%a2%e4%b8%ba%e9%80%82%e7%94%a8web%e7%9a%84glb%e6%a0%bc%e5%bc%8f/) **项目状态:** 维护中 ## 文档 中文|[English](README.md) ## 待完成任务 - [x] 基本项目结构规划及接口设计 - [x] 转换及压缩代码实现 - [x] 增加 obj 的格式转换 - [x] ~~相关API接口实现(考虑了下模型转换功能的特性,单纯提供API用处不大)~~ - [x] docker镜像打包 - [x] 一键转换脚本封装 - [x] 在线转换预览 - [ ] [bug] stp 转 gltf 最终文件太大 ## 为什么不用 assmip 我尝试用过 [assimp](https://github.com/assimp/assimp),但是在 `stl/iges/obj` 转换场景测试下结果不大理想,我使用的 [https://hub.docker.com/r/dylankenneally/assimp](https://hub.docker.com/r/dylankenneally/assimp) 打包好的环境进行测试,感兴趣的也可以试一试。 ## 为什么不直接在本项目提供API 模型转换是一个非常消耗性能并且速度不快的服务,模型的上传和下载都会非常的耗费带宽,如果**直接部署在自己的服务器上会是一个非常耗费带宽和CPU的工作**,针对这种大型文件上传和下载比较通用的方式是**引入 OSS 和 CDN 配合队列和后端服务动态扩容**来做,但是部署成本和实施成本都会比较高,有商业需求请联系 admin@wj2015.com 获取商业API支持。 ## 快速上手 由于环境配置麻烦等原因,命令行模式依旧需要依赖docker,**命令行模式适合服务端简单调用**,转换过程阻塞进程同步进行,无法分布式部署增加并发量等 > PS:命令行模式同步转换模型过多或者单个模型过大时,有把提供Web服务的服务器卡住的风险 ### 在线转换预览 可以使用 [modelbox-sdk](https://github.com/wangerzi/modelbox-sdk) 在线转换模型(<100MB),链接:[https://wangerzi.gitee.io/modelbox-sdk/examples/index.html](https://wangerzi.gitee.io/modelbox-sdk/examples/index.html) ### 命令行模式 下载代码中的 `convert.sh`,赋予执行权限,执行如下指令即可,第二个参数可支持 `stl|stp|iges|obj|fbx`,根据文件类型而定。 > 脚本依赖于docker环境,所以 Docker 环境先准备好吧。 ```shell convert.sh stl inputpath.stl outputpath.glb # 生成二进制glb文件 convert.sh stl inputpath.stl outputpath.gltf # 非单一二进制文件 gltf ``` 在 `assets` 目录中,有五个测试文件 `test.stl` `test.stp` `test.igs` `E 45 Aircraft_obj.obj` `Samba Dancing.fbx`,将其复制到项目路径下,按照上述指令执行即可看到生成了对应结果。 如果在运行过程中遇到如下错误,可以执行如下指令,将其他语言执行器对应用户加到 docker 用户组中。 报错信息: > docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create: dial unix /var/run/docker.sock: connect: permission denied. 执行指令: > usermod -a -G docker nginx 通过其他语言调用可同步判断输出文件是否存在,来判断是否转换成功,如: ```php PS: 为保证调用命名统一,需要将指令重命名为 fbx2gltf,否则转换 FBX 出错 简单了解下代码结构,修改完毕后提交PR即可,欢迎邮箱 admin@wj2015.com 与我讨论 ## 开源协议 3DModelConvertToGltf is licensed under the Apache License, Version 2.0. See [LICENSE](https://github.com/GitbookIO/gitbook/blob/master/LICENSE) for the full license text.