método gltf-pipeline processGltf en el entorno del nodo

Como todos sabemos, además del formato glb, el formato GLTF también tiene un método de almacenamiento de GLTF+BIN+Texture. Cuando usamos node para llamar a gltf-popeline para comprimir (GLTF+BIN+Texture) este último, hay varios puntos a tener en cuenta.

1. No utilice el módulo fs proporcionado por el nodo, fs.writeFile para escribir archivos.

var gltfPipeline = require('gltf-pipeline');
const fs = require('fs');
var processGltf = gltfPipeline.processGltf;
var gltf = fs.readFileSync('./44/untitled.gltf');
var options = {
    dracoOptions: {
        compressionLevel: 10
    }
}
console.log(gltf)
processGltf(gltf, options).then(function(results) {
    console.log(results)
    fs.writeFileSync('model1.gltf', results.gltf);
});

Aunque el código anterior puede generar con éxito el archivo model1.gltf, encontrará que el contenido del archivo generado y el archivo antes de la compresión no han cambiado. Es decir, la compresión Draco no tiene efecto. Por lo tanto, es necesario utilizar el método de lectura y escritura del complemento fs-extra recomendado por el autor para leer y escribir. el código se muestra a continuación:

var gltfPipeline = require('gltf-pipeline');
var fsExtra = require('fs-extra');
var processGltf = gltfPipeline.processGltf;
var gltf = fsExtra.readJsonSync('./44/untitled.gltf');
var options = {
    dracoOptions: {
        compressionLevel: 10
    }
}
processGltf(gltf, options).then(function (results) {
    fsExtra.writeJsonSync('./123.gltf', results.gltf);
}).catch(function (err) {
    console.log(err)
});

2. Necesita agregar el parámetro resourceDirectory.

Para el formato GLTF de GLTF+BIN+Texture, se debe agregar un parámetro al comprimir: resourceDirectory. Es decir, especifique la carpeta donde se almacena el archivo GLTF. Si no se agrega, solicitará que el modelo glTF haga referencia a archivos separados, pero no se proporciona un directorio de recursos. El código correcto es el siguiente:

var gltfPipeline = require('gltf-pipeline');
var fsExtra = require('fs-extra');
var processGltf = gltfPipeline.processGltf;
var gltf = fsExtra.readJsonSync('untitled.gltf');
var options = {
    resourceDirectory: './',
    dracoOptions: {
        compressionLevel: 10
    }
}
processGltf(gltf, options).then(function (results) {
    fsExtra.writeJsonSync('untitled1.gltf', results.gltf);
}).catch(function (err) {
    console.log(err)
});

Después de generar el archivo, abra el formato GLTF y encontrará que la referencia original a BIN ha programado una cadena de datos: application/octet-stream; al comienzo del código, y la introducción de texturas también ha cambiado, es decir, el efecto del archivo GLTF comprimido es el mismo que el de GLB. gltf-popeline integra todas las texturas originales y los archivos bin en el archivo .gltf.

Supongo que te gusta

Origin blog.csdn.net/QiZi_Zpl/article/details/106923168
Recomendado
Clasificación