Hvordan optimalisere 3D-modeller i TypeScript
Aspose.3D FOSS for TypeScript tilbyr flere strategier for å redusere utdatafilstørrelse og forbedre behandlingsgjennomstrømning. Denne guiden dekker formatvalg, binær innbygging, minnebaserte pipelines og optimaliseringer på Node.js-nivå.
Steg-for-steg guide
Steg 1: Velg riktig utdataformat
GLB (binær glTF) gir den mest kompakte utdataen med god verktøystøtte. OBJ er tekstbasert og større. STL er kompakt for kun‑geometri arbeidsflyter.
| Format | Størrelse | Inkluderer materialer | Inkluderer animasjon | Beste bruk |
|---|---|---|---|---|
| GLB | Liten | Ja (innebygd) | Ja | Nett, spill, generell utveksling |
| glTF | Middels | Ja (separat) | Ja | Utvikling, inspeksjon |
| STL | Liten | Nei | Nei | 3D printing, geometry-only |
| OBJ | Stor | Separat .mtl | Nei | Eldre verktøy, bred kompatibilitet |
| FBX | Middels | Nei* | Nei* | Importer/exporter finnes, men er ikke koblet til automatisk gjenkjenning |
| 3MF | Liten | Ja | Nei | Moderne 3D-utskrift |
Steg 2: Eksporter til binær GLB
Når du lagrer til GLB, sett GltfSaveOptions.binaryMode = true for å produsere en enkelt selvstendig binærfil. Dette unngår den separate .bin sidecar-filen og er påkrevd for mange 3D-visere:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('complex-model.obj', new ObjLoadOptions());
const opts = new GltfSaveOptions();
opts.binaryMode = true;
scene.save('optimized.glb', opts);
console.log('Saved compact binary GLB');Steg 3: Bruk Buffer I/O for minnebaserte pipelines
Når du behandler filer i en nettjeneste, bruk openFromBuffer og saveToBuffer for å unngå å skrive til filsystemet:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
function convertInMemory(inputBuffer: Buffer): Buffer {
const scene = new Scene();
scene.openFromBuffer(inputBuffer, new ObjLoadOptions());
return scene.saveToBuffer('glb');
}Steg 4: Batch-behandle filer med Worker Threads
For store konverteringsoppgaver, fordel arbeidet over Node.js worker threads for å bruke flere CPU‑kjerner:
// worker.ts
import { workerData, parentPort } from 'worker_threads';
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const { inputPath, outputPath } = workerData;
const scene = new Scene();
scene.open(inputPath, new ObjLoadOptions());
scene.save(outputPath);
parentPort?.postMessage({ done: true, output: outputPath });// main.ts: dispatch files to workers
import { Worker } from 'worker_threads';
import * as fs from 'fs';
import * as path from 'path';
const files = fs.readdirSync('./input').filter(f => f.endsWith('.obj'));
for (const file of files) {
const inputPath = path.join('./input', file);
const outputPath = path.join('./output', file.replace('.obj', '.glb'));
const worker = new Worker('./dist/worker.js', {
workerData: { inputPath, outputPath }
});
worker.on('message', msg => console.log(`Converted: ${msg.output}`));
worker.on('error', err => console.error(`Error: ${err}`));
}Steg 5: Overvåk minne for store modeller
For filer over 50 MB, overvåk heap‑bruk og prosesser filer sekvensielt hvis minnet er begrenset:
function logMemory(label: string) {
const used = process.memoryUsage();
console.log(`[${label}] heapUsed: ${Math.round(used.heapUsed / 1024 / 1024)} MB`);
}
logMemory('before load');
const scene = new Scene();
scene.open('large-model.obj');
logMemory('after load');
scene.save('output.glb');
logMemory('after save');Øk Node.js‑heapen for svært store modeller:
node --max-old-space-size=8192 convert.jsOfte stilte spørsmål
Hva er det mest kompakte utdataformatet?
GLB (binær glTF) med innebygde ressurser gir den mest kompakte enkeltfilutdataen for scener med materialer og teksturer. STL er mer kompakt for kun‑geometri innhold.
Bruker @aspose/3d mesh‑forenkling eller LOD?
Nei. Biblioteket leser og skriver kildegeometrien uten å endre mesh‑topologien. Mesh‑forenkling (reduksjon av vertex, generering av LOD) støttes ikke.
Kan jeg fjerne materialer for å redusere filstørrelsen?
Angi ObjSaveOptions.enableMaterials = false ved lagring til OBJ. For glTF er all materialdata alltid inkludert; bruk STL for kun geometriutdata.