• 正文概述
  • GitHub – wangerzi/3d-model-convert-to-gltf:将 3D 模型 (STL/IGES/STEP/OBJ/FBX) 转换为 gltf 并压缩

    存储库文件导航

    3DModelConvertToGltf – 统一的模型格式转换工具

    公文

    中文(简体) |中文

    这个项目的主要原因是遇到了一个场景,需要在 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. 

    版本更新

    v1.7 预发布

    convert.sh 支持无天龙机选项

    v1.6 2021-10-10 13:08

    较小的 docker 镜像,从 4.42GB 到 1.87GB,修复了 docker 无法运行的问题。

    1.5版 2021-07-25 16:06

    修复部分bug,支持无draco转换

    v1.4 2021-06-11 17:20

    支持GRPC,转换代码重构,修复bug。

    1.3版 2020-06-24 17:19

    添加英文文档,修复错误。

    1.0版 2020-05-21 19:08

    基础提交,核心功能齐全,支持 shell 转换。

    为什么不assmip

    我尝试使用assimp,但是在转换测试下的结果并不好。我用 https://hub.docker.com/r/dylankenneally/assimp docker环境进行测试,大家可以试试。stl/iges/obj

    为什么不在这个项目中实现 API

    模型转换是一项非常耗性能且速度慢的服务。模型的上传和下载会消耗带宽。如果直接部署在自己的服务器上,将是一项非常耗费带宽和 CPU 的任务。对于上传和下载大文件最常见的方法是引入 OSS 和 CDN,动态扩展队列和后端服务,但部署成本和实施成本会相对较高。

    快速入门

    由于环境配置的麻烦等原因,命令行模式还是需要依赖docker的。命令行模式适合在服务器端进行简单调用。转换过程阻塞了要同步的进程,不能分布式部署,增加并发性。最推荐的方式是用grpc搭配docker部署做rpc,可以同步也可以异步,会很容易扩展

    PS:当命令行模式下同时转换模型过多或单个模型过大时,存在提供Web服务的服务器卡顿的风险

    在线转换预览器

    您可以在线转换模型 (<100MB) 由 modelbox-sdk 提供支持,预览链接:https://wangerzi.gitee.io/modelbox-sdk/examples/index.html

    GRPC 模式

    基于 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的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 或队列需要实现您自己的逻辑。

    1583754967257

    加入我们

    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 开发环境

    主要对于无法运行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

    1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
    2. 分享目的仅供大家学习和交流,请不要用于商业用途!
    3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
    4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
    5. 如有链接无法下载、失效或广告,请联系管理员处理!
    6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
    7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
    8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
    声明如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性

    GLB下载网 - GLB/GLTF模型与格式资源免费下载,支持在线浏览与转换 » 将 3D 模型 (STL/IGES/STEP/OBJ/FBX) 转换为 gltf 和压缩

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载要提取码
    百度网盘提取码都是gltf。
    分享过期和重复下载怎么办
    分享过期请使用备份下载,重复下载是不另扣费的,请放心下载。
    模型和平台不兼容怎么办
    可以用网站在线编辑功能,修改模型属性,大小,方向,坐标,中心,透明等问题,然后重新导出既可https://glbxz.com/38636.html
    开通VIP 享更多特权,建议使用 QQ 登录