总结两种方式将3d模型进行压缩,一种借助nodejs
fbx2gltf
- npm i fbx2gltf;
- CMD到xx\node_modules\fbx2gltf\bin\Windows_NT文件夹下,可以看到FBX2glTF.exe该执行文件;
- 将你要转化的文件最好放在同层目录下,也可放在别的目录,输入命令:FBX2glTF.exe -i xx\node_modules\fbx2gltf\bin\Windows_NT\aa.FBX -o xx\node_modules\fbx2gltf\bin\Windows_NT\aa即可;
obj2gltf
- npm i obj2gltf;
- 到xx\node_modules的同级目录下,创建文件run.js,文件内容如下
const obj2gltf = require('obj2gltf'); const fs = require('fs'); obj2gltf('aa.obj').then(function (gltf) { const data = Buffer.from(JSON.stringify(gltf)); fs.writeFileSync('aa.gltf', data); });
3.CMD到该目录下,命令行执行 node run.js即可
gltf-pipeline
- npm i gltf-pipeline;
- 该压缩方式可将文件转为以下几种格式(glTF to glb,glb to glTF,glTF to Draco glTF)
- 同样,到xx\node_modules的同级目录下,
a. 创建文件glTFtoglb.js,文件内容如下
b.创建文件glbtoglTF.js,文件内容如下const gltfPipeline = require("gltf-pipeline"); const fsExtra = require("fs-extra"); const gltfToGlb = gltfPipeline.gltfToGlb; const gltf = fsExtra.readJsonSync("aa.gltf"); gltfToGlb(gltf).then(function (results) { fsExtra.writeFileSync("aa.glb", results.glb); });
c.创建文件glTFtoDracoglTF.js,文件内容如下const gltfPipeline = require("gltf-pipeline"); const fsExtra = require("fs-extra"); const glbToGltf = gltfPipeline.glbToGltf; const glb = fsExtra.readFileSync("aa.glb"); glbToGltf(glb).then(function (results) { fsExtra.writeJsonSync("aa.gltf", results.gltf); });
const gltfPipeline = require("gltf-pipeline"); const fsExtra = require("fs-extra"); const processGltf = gltfPipeline.processGltf; const gltf = fsExtra.readJsonSync("aa.gltf"); const options = { dracoOptions: { compressionLevel: 10, }, }; processGltf(gltf, options).then(function (results) { fsExtra.writeJsonSync("aa.gltf", results.gltf); });
4.同样CMD到该目录下,命令行执行 node xx.js即可
另一种借助3D建模工具
Blender
1.将要压缩的文件aa.fbx导入blender中
2.导出时,选择导出glb格式的文件
3.选择compress压缩,设置为6即可,这将会一个不错的办法。。
研究好久,有啥不足或有更好的办法,可以随时交流啊。。