Files
anatomia/data-pipeline/scripts/mannequin-asset/optimize.mjs
T

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}`);