30 lines
1.2 KiB
JavaScript
30 lines
1.2 KiB
JavaScript
// Otimiza o GLB bruto exportado pelo repose_and_export.py: solda vértices
|
|
// duplicados, remove dados não usados e quantiza as posições/normais pra
|
|
// menos bytes por vértice — sem precisar de um decoder novo no frontend
|
|
// (KHR_mesh_quantization já é suportado nativamente pelo GLTFLoader do
|
|
// three.js). A malha não tem textura (só cor sólida), então a UV é
|
|
// descartada antes de tudo — ela não serve pra nada e ainda impedia o
|
|
// quantize de comprimir aquele atributo.
|
|
import { NodeIO } from "@gltf-transform/core";
|
|
import { ALL_EXTENSIONS } from "@gltf-transform/extensions";
|
|
import { prune, dedup, weld, quantize } from "@gltf-transform/functions";
|
|
|
|
const INPUT = "/tmp/mannequin-realistic.glb";
|
|
const OUTPUT = "/tmp/mannequin-realistic.optimized.glb";
|
|
|
|
const io = new NodeIO().registerExtensions(ALL_EXTENSIONS);
|
|
const doc = await io.read(INPUT);
|
|
|
|
for (const mesh of doc.getRoot().listMeshes()) {
|
|
for (const prim of mesh.listPrimitives()) {
|
|
if (prim.getAttribute("TEXCOORD_0")) {
|
|
prim.setAttribute("TEXCOORD_0", null);
|
|
}
|
|
}
|
|
}
|
|
|
|
await doc.transform(weld({ tolerance: 0.0001 }), dedup(), quantize(), prune());
|
|
|
|
await io.write(OUTPUT, doc);
|
|
console.log(`Otimizado: ${INPUT} -> ${OUTPUT}`);
|