36 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
			
		
		
	
	
			36 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
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!"); |