GitHub – wangerzi/3d-model-convert-to-gltf:将 3D 模型 (STL/IGES/STEP/OBJ/FBX) 转换为 gltf 并压缩
| Name | ||
|---|---|---|
|
a7d5e02 · 4 months ago
|
||
|
|
4 years ago
|
|
|
|
4 years ago
|
|
|
|
4 years ago
|
|
|
|
4 years ago
|
|
|
|
4 years ago
|
|
|
|
5 years ago
|
|
|
|
4 years ago
|
|
|
|
4 years ago
|
|
|
|
6 months ago
|
|
存储库文件导航
中文(简体) |中文
这个项目的主要原因是遇到了一个场景,需要在 Web 上展示 STEP 和 IGES 模型,但市面上的 web3d 库不支持这种格式,用户上传的 STL 文件直接展示会消耗大量带宽或 CDN 流量, 转换为压缩的 GLTF 会更合适。
演示资产模型效果比较:
| 型号类型 | 文件路径 | 转换时间 | 原点大小 | 后尺寸 |
|---|---|---|---|---|
| STL | assets/test.stl | 2368.890毫秒 | 7.6 兆字节 | 86 KB |
| 伊格斯 | assets/test.iges | 1641.226 毫秒 | 1 米 | 111 KB |
| 标准化 | assets/test.stp | 2969.200毫秒 | 5.1 兆字节 | 217 KB |
| FBX的 | 资产/Samba Dancing.fbx | <1000毫秒 | 3.7 兆字节 | 614 KB |
支持输入格式:STL/IGES/STP/OBJ/FBX
支持输出格式:GLTF/GLB
我将我的想法整理成一个博客:STEP 和 IGES 模型被转换为 Web 友好的 glb 格式
PS:我的博客是中文写的,如果你不是中文母语人士,你应该带上谷歌翻译工具。
项目状态:稳定
- 基本项目结构规划和界面设计
- 转换和压缩代码实现
- 将 obj 格式添加到 darco gltf
-
相关 API 实现(没那么有用,已删除) - docker镜像打包
- 编写易于使用的 convert.sh
- 在线转换预览
- [bug] stp 转换为 glTF 太大
- [bug] stl 转换为 glTF 缺少节点(结果:stl 格式没有节点信息,https://en.wikipedia.org/wiki/STL_(file_format))
- [bug] STP/IGES 转换为 GLTF 缺失节点
- GRPC 支持
- rpc 应响应错误详细信息
- RPC API 应不支持 Draco
- [bug] RPC Docker 服务器日志输出问题
- Lexcent 3D Printing
You can scan this following qrcode by Wechat, it’s helpful for 3d printing and preview everywhere.
convert.sh 支持无天龙机选项
较小的 docker 镜像,从 4.42GB 到 1.87GB,修复了 docker 无法运行的问题。
修复部分bug,支持无draco转换
支持GRPC,转换代码重构,修复bug。
添加英文文档,修复错误。
基础提交,核心功能齐全,支持 shell 转换。
我尝试使用assimp,但是在转换测试下的结果并不好。我用 https://hub.docker.com/r/dylankenneally/assimp docker环境进行测试,大家可以试试。stl/iges/obj
模型转换是一项非常耗性能且速度慢的服务。模型的上传和下载会消耗带宽。如果直接部署在自己的服务器上,将是一项非常耗费带宽和 CPU 的任务。对于上传和下载大文件最常见的方法是引入 OSS 和 CDN,动态扩展队列和后端服务,但部署成本和实施成本会相对较高。
由于环境配置的麻烦等原因,命令行模式还是需要依赖docker的。命令行模式适合在服务器端进行简单调用。转换过程阻塞了要同步的进程,不能分布式部署,增加并发性。最推荐的方式是用grpc搭配docker部署做rpc,可以同步也可以异步,会很容易扩展。
PS:当命令行模式下同时转换模型过多或单个模型过大时,存在提供Web服务的服务器卡顿的风险
您可以在线转换模型 (<100MB) 由 modelbox-sdk 提供支持,预览链接:https://wangerzi.gitee.io/modelbox-sdk/examples/index.html
基于 GRPC,构建动态扩展的服务集群会更方便,我们支持上传 zip/模型源文件,为了每个模型的兼容性,响应文件都是 zip 的,拿到后需要解压。
您应该通过 docker 运行服务器端 rpc 服务,请确保 8999 端口可用且镜像是最新的,命令:wj2015/3d-model-convert-to-gltf:latest
$ docker pull wj2015/3d-model-convert-to-gltf:latest
$ docker run -d -p 8999:8999 wj2015/3d-model-convert-to-gltf:latest
在本项目中使用 grpc 时,请复制,并根据调用者的语言生成代码模板并享受。官方文档:支持语言server/rpc/protos/converter.proto
如果这个项目对你有帮助,可以提交其他示例和 PR,比如 php/golang/Nodejs rpc 调用示例。
| 名字 | 法典 | 评论 |
|---|---|---|
| Python rpc 客户端使用示例 | 服务器/示例/python/rpc_client.py | 转换并保存 |
下载,并授予执行权限,执行以下命令,第二个参数应选择,请根据文件类型确定convert.shstl|stp|iges|obj|fbx
脚本取决于 docker 环境,因此您应该先准备 Docker 环境。命令模式不支持 zip 文件转换,因为 docker 卷会自动将图片或 mtl 资产同步到 docker 容器。
convert.sh stl inputpath.stl outputpath.glb # convert to glb single bin file
convert.sh stl inputpath.stl outputpath.gltf # generate gltf file
在目录中,有四个测试文件,复制到项目路径中,可以看到转换结果。assets test.stltest.stp`` test.igsE 45 Aircraft_obj.objSamba Dancing.fbx
如果您在使用 php-fpm 或其他语言执行器执行 convert.sh 时遇到此错误,您可以将执行用户添加到 docker 组以避免此问题。
用户模组 -a -G docker nginx
docker:在尝试连接到 Docker 守护程序套接字时被拒绝权限 unix:///var/run/docker.sock:发布 http://%2Fvar%2Frun%2Fdocker.sock/v1.40/containers/create:拨打 unix /var/run/docker.sock: connect:权限被拒绝。
通过调用其他语言,可以同步判断输出文件是否存在,判断转换是否成功,例如:
<?php
$out = 'out.glb';
$input = 'test.stl';
$type = 'stl';
// please be careful about execution attack
shell_exec('convert.sh '.$type.' '.$input.' '.$out);
if (file_exists($out)) {
echo "convert result:" . $out;
} else {
echo "convert failed";
}
在安装了docker的docker主机下,运行以下命令拉取镜像(约4G)
docker pull wj2015/3d-model-convert-to-gltf
在容器内部执行可以同步转换模型。conda run -n pythonocc python convert.py [stl|step|iges|obj|fbx] input.stl out.glb
如果有多机负载的需求,可以使用nginx代理/docker容器搭配rpc做简单的负载均衡,或者使用消息队列搭配生产者和消费者。HTTP API 或队列需要实现您自己的逻辑。
Docker 开发环境
初次安装时,请参阅官方文档:Docker Desktopdockerdocker-compose
然后,进入文档,执行,执行结果如下,表示成功environment/docker-compose up
user@MacBook-Pro environment % docker-compose up
Recreating 3d-model-convert-to-gltf-app ... done
Starting 3d-model-convert-to-gltf-redis ... done
Attaching to 3d-model-convert-to-gltf-redis, 3d-model-convert-to-gltf-app
3d-model-convert-to-gltf-redis | 1:C 09 Oct 2020 03:03:29.150 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
3d-model-convert-to-gltf-redis | 1:C 09 Oct 2020 03:03:29.150 # Redis version=6.0.1, bits=64, commit=00000000, modified=0, pid=1, just started
3d-model-convert-to-gltf-redis | 1:C 09 Oct 2020 03:03:29.150 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
3d-model-convert-to-gltf-redis | 1:M 09 Oct 2020 03:03:29.152 * Running mode=standalone, port=6379.
3d-model-convert-to-gltf-redis | 1:M 09 Oct 2020 03:03:29.152 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
3d-model-convert-to-gltf-redis | 1:M 09 Oct 2020 03:03:29.152 # Server initialized
如果出现端口冲突、初始化失败等异常情况,请根据错误信息进行查询和搜索。
新建一个终端,针对当前执行的docker容器执行,执行结果如下,表示成功docker ps
user@MacBook-Pro 3d-model-convert-to-gltf % docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
69b684ed7755 wj2015/3d-model-convert-to-gltf "conda run -n python…" 3 seconds ago Up 2 seconds 3d-model-convert-to-gltf-app
接下来,进入容器执行命令,进入conda环境。在这种环境下执行脚本可以方便代码更改和调试pythonocc
wangjie@MacBook-Pro 3d-model-convert-to-gltf % docker exec -it 3d-model-convert-to-gltf-app /bin/bash
(base) root@5efd6ef96814:/opt/3d-model-convert-to-gltf# conda activate pythonocc
(pythonocc) root@69b684ed7755:/opt/3d-model-convert-to-gltf# python server/convert.py
Params not found, format: python convert.py [type] [file path] [out file path]
主要对于无法运行docker的开发者,可以尝试使用这种方法来构建开发环境。
创建 conda 虚拟环境:
conda create -n 3d-model-convert-to-gltf-pythonocc -c dlr-sc -c pythonocc pythonocc-core=7.4.0rc1
conda activate 3d-model-convert-to-gltf-pythonocc
pip install -r server/requirements.txt
您的本地节点版本需要 ,或者在运行命令时出错,您应该安装和打包。12.0.0gltf-pipelinegltf-pipelineobj2gltf
通过此脚本(MacOs 或 Linux)安装,您可以从 https://github.com/coreybutler/nvm-windows 下载.exe可执行文件nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
安装并使用节点 12.0.0 以及其他软件包。
nvm install 12.0.0
nvm use 12.0.0
npm install -g gltf-pipeline obj2gltf
然后,从 https://github.com/facebookincubator/FBX2glTF 下载 FBX2glTf 并将其放入环境目录。
PS:统一调用时,应该将FBX2Gltf重命名为fbx2gltf
了解代码和文件结构,修改后提交PR。欢迎给我发邮件 admin@wj2015.com。
3DModelConvertToGltf 根据 Apache 许可证 2.0 版获得许可。有关完整的许可证文本,请参阅 LICENSE。
2. 分享目的仅供大家学习和交流,请不要用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性
GLB下载网 - GLB/GLTF模型与格式资源免费下载,支持在线浏览与转换 » 将 3D 模型 (STL/IGES/STEP/OBJ/FBX) 转换为 gltf 和压缩
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载要提取码
- 分享过期和重复下载怎么办
- 模型和平台不兼容怎么办
