首页 > 建站教程 > WebGL教程 Threejs教程 >  gltf和glb模型压缩正文

gltf和glb模型压缩

gltf和glb模型压缩,我爱模板网通常使用两种方法:


一、3D软件导出时压缩

以Blender为例,在导出时,勾选压缩选项,导出来的模型就被压缩了:

1.png


二、gltf-pipeline压缩

1、安装

gltf-pipeline  npm i -g gltf-pipeline


2、优点

gltf和glb模型相互转换

压缩gltf和glb 

可以选择分离纹理图片

获取glb或gltf信息资源


3、使用终端运行

gltf-pipeline -i model.gltf -o model.glb -d


4、参数详情

参数描述必须/默认
--help-h查看帮助No
--input-i输入一个gltf模型文件.✅ Yes
--output-o输出一个gltf或者glb文件,文件会存储在相同的目录No
--binary-b转换gltf模型到glb模型No, default false
--json-j转换glb模型到gltf模型No, default false
--separate-s分离纹理图片和bin文件至单独的文件No, default false
--separateTextures-t仅仅只分离纹理图片No, default false
--stats在终端输出gltf文件信息No, default false
--keepUnusedElements保存未使用过的材质,节点,网格对象No, default false
--draco.compressMeshes-d使用Draco经行压缩,默认不压缩No, default false
--draco.compressionLevel压缩的级别0-10 级别越大,压缩程度越大,文件越小No, default 7
--draco.quantizePositionBits使用 Draco 压缩时位置属性的量化位.  取值为0-29,值越小,文件越小 No, default 14
--draco.quantizeNormalBitsQuantization bits for normal attribute when using Draco compression.No, default 10
--draco.quantizeTexcoordBitsQuantization bits for texture coordinate attribute when using Draco compression.No, default 12
--draco.quantizeColorBitsQuantization bits for color attribute when using Draco compression.No, default 8
--draco.quantizeGenericBitsQuantization bits for skinning attribute (joint indices and joint weights) and custom attributes when using Draco compression.No, default 12
--draco.unifiedQuantizationQuantize positions of all primitives using the same quantization grid. If not set, quantization is applied separately.No, default false


5、具体使用

使用node写了一个批处理文件,运行之前先安装gltf-pipeline和fs-extra包

const gltfPipeline = require('gltf-pipeline');
const fsExtra = require('fs-extra');
const glbToGlb = gltfPipeline.processGlb;
let dirs = fsExtra.readdirSync('./originModels')
let count = 0 , total = dirs.length
dirs.map(dir => {
    fsExtra.readFile(`./originModels/${dir}`).then(glb => {
        glbToGlb(glb, {
            dracoOptions: {
                compressionLevel: 10,
                compressMeshes : true
            },
            stats : true
        }).then(({glb}) => {
            fsExtra.writeFile(`./targetModels/${dir}`, glb).then(() => {
                count++
                console.log(`模型压缩${count}/${total}`)
                if(count == total) {
                    console.log('模型压缩完成')
                }
            })
        })
    })
})


目录如下,在该文件下面建立两个originModels和targetModels文件夹

2.png


模型压缩完成对比图

3.png


4.png