modelo 3d citologia
This commit is contained in:
1 parent
65a4fdea9e
commit
369638bf98
15 files changed
+308
-56
No files matched your search
@@ -0,0 +1,56 @@
|
||||
// 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.`);
|
||||
Reference in new issue
Block a user