57 lines
2.3 KiB
JavaScript
57 lines
2.3 KiB
JavaScript
// Lê citologia-raw.glb (gerado por fetch-cell-organelles.py a partir de
|
|
// dados REAIS de FIB-SEM do Janelia OpenOrganelle/CellMap — ver aquele
|
|
// script para a curadoria completa e a licença CC BY 4.0), simplifica e
|
|
// comprime com o MESMO recipe já usado pras malhas do Z-Anatomy em
|
|
// extract-manifest.mjs, e salva o resultado final em seed/models/citologia.glb.
|
|
//
|
|
// Diferente do Z-Anatomy, aqui não precisamos marcar nós excluídos nem
|
|
// resolver nomes duplicados — o .glb de entrada já tem exatamente 5 nós,
|
|
// um por organela, com o nome final (ex: "celula-nucleo") definido no
|
|
// próprio script Python. weld/simplify/dedup/meshopt só afetam a
|
|
// geometria, não o nome dos nós, então o "meshName" no manifesto
|
|
// (build-manifest-cell.mjs) pode confiar que bate exatamente com isso.
|
|
import { NodeIO } from "@gltf-transform/core";
|
|
import { ALL_EXTENSIONS } from "@gltf-transform/extensions";
|
|
import { prune, dedup, weld, simplify, meshopt } from "@gltf-transform/functions";
|
|
import { MeshoptSimplifier, MeshoptEncoder } from "meshoptimizer";
|
|
import path from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
import { mkdirSync } from "node:fs";
|
|
|
|
await MeshoptSimplifier.ready;
|
|
await MeshoptEncoder.ready;
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
const IN_PATH = path.resolve(__dirname, "../converted/citologia/citologia-raw.glb");
|
|
const OUT_DIR = path.resolve(__dirname, "../seed/models");
|
|
mkdirSync(OUT_DIR, { recursive: true });
|
|
|
|
const io = new NodeIO()
|
|
.registerExtensions(ALL_EXTENSIONS)
|
|
.registerDependencies({ "meshopt.encoder": MeshoptEncoder });
|
|
|
|
console.log(`Lendo ${IN_PATH}...`);
|
|
const doc = await io.read(IN_PATH);
|
|
|
|
const meshNames = doc
|
|
.getRoot()
|
|
.listNodes()
|
|
.map((n) => n.getName())
|
|
.filter(Boolean);
|
|
console.log(`Organelas encontradas: ${meshNames.join(", ")}`);
|
|
|
|
await doc.transform(
|
|
weld(),
|
|
// As organelas maiores (membrana, RE) chegam com bem mais geometria do
|
|
// que o necessário pra estudo interativo — mesmo ratio conservador já
|
|
// usado no resto do atlas.
|
|
simplify({ simplifier: MeshoptSimplifier, ratio: 0.5, error: 0.01 }),
|
|
prune(),
|
|
dedup(),
|
|
meshopt({ encoder: MeshoptEncoder, level: "medium" }),
|
|
);
|
|
|
|
const outPath = path.join(OUT_DIR, "citologia.glb");
|
|
await io.write(outPath, doc);
|
|
console.log(`✓ ${outPath} salvo.`);
|