const gltfPipeline = require("gltf-pipeline"); const fs = require("fs"); const path = require("path"); const inputDir = "/data"; // 你的模型文件存放目录 const outputDir = "/data"; // 压缩后的输出目录 if (!fs.existsSync(outputDir)) { fs.mkdirSync(outputDir, { recursive: true }); } const processFile = async (file) => { const inputPath = path.join(inputDir, file); const outputPath = path.join(outputDir, file); const fileData = fs.readFileSync(inputPath); if (file.endsWith(".gltf")) { const gltf = JSON.parse(fileData.toString()); const options = { dracoOptions: { compressionLevel: 10 } }; // 使用 Draco 压缩 const result = await gltfPipeline.processGltf(gltf, options); fs.writeFileSync(outputPath, JSON.stringify(result.gltf)); } else if (file.endsWith(".glb")) { const result = await gltfPipeline.glbToGlb(fileData, { dracoOptions: { compressionLevel: 10 } }); fs.writeFileSync(outputPath, result.glb); } }; fs.readdirSync(inputDir).forEach((file) => { if (file.match(/\.(gltf|glb)$/)) { processFile(file).catch((err) => console.error(`Error processing ${file}:`, err)); } }); console.log("GLTF/GLB compression completed!");