gltf-pipeline批量压缩处理

gltf模型批量压缩

const gltfPipeline = require("gltf-pipeline");
const fs = require("fs");
const fsExtra = require("fs-extra");
const files = fs.readdirSync('./')
const taskArr = [] // 模型压缩任务
const statArr = [] // 信息统计
files.forEach((fileName) => {
  const extname = fileName.replace(/.+\./,"");
  const fileNameNoExt = fileName.replace(/(.*\/)*([^.]+).*/ig,"$2");
  if(extname == 'gltf'){
    statArr.push(fs.statSync(fileName))
    const options = {
      dracoOptions: {
        compressionLevel: 10,
      },
    };
    taskArr.push(new Promise((resolve,reject) => {
      console.log(`${fileNameNoExt}.gltf------模型开始压缩。。。`)
      return fsExtra.readJson(fileName).then((gltf) => {
        return gltfPipeline.processGltf(gltf, options).then(function (res) {
          console.log(`${fileNameNoExt}.gltf------模型压缩完成`)
          resolve({
            res: res,
            name: fileNameNoExt,
          })
        });
      });
    }))
  }
})
Promise.all(taskArr).then((minifiedModelArr) => {
  minifiedModelArr.forEach((model) => {
    console.log(`${model.name}.min.gltf------文件写入中。。。`)
    fsExtra.writeJsonSync(`${model.name}.min.gltf`, model.res.gltf);
    console.log(`${model.name}.min.gltf------文件写入完成`)
  })
  let initTotalSize = 0
  let afterTotalSize = 0
  statArr.forEach(item => initTotalSize += item.size)

  const files = fs.readdirSync('./')
  files.forEach((fileName) => {
    if(fileName.endsWith('.min.gltf')){
      afterTotalSize += fs.statSync(fileName).size
    }
  })
  console.log(`模型压缩完成(共${taskArr.length}个),\n原始总大小:${initTotalSize/1024/1024}Mb,\n压缩后总大小:${afterTotalSize/1024/1024}Mb`)
})

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值