Sådan optimeres 3D-modeller i TypeScript
Aspose.3D FOSS for TypeScript leverer flere strategier for at reducere outputfilstørrelse og forbedre behandlingsgennemløb. Denne guide dækker formatvalg, binær indlejring, in-memory pipelines og optimeringer på Node.js-niveau.
Trin-for-trin guide
Trin 1: Vælg det rigtige outputformat
GLB (binary glTF) producerer den mest kompakte output med god værktøjsunderstøttelse. OBJ er tekstbaseret og større. STL er kompakt for kun-geometri arbejdsprocesser.
| Format | Størrelse | Inkluderer materialer | Inkluderer animation | Bedste brug |
|---|---|---|---|---|
| GLB | Lille | Ja (indlejret) | Ja | Web, spil, generel udveksling |
| glTF | Mellem | Ja (separat) | Ja | Udvikling, inspektion |
| STL | Lille | Nej | Nej | 3D printing, geometry-only |
| OBJ | Stor | Separér .mtl | Nej | Ældre værktøjer, bred kompatibilitet |
| FBX | Medium | Nej* | Nej* | Importer/exporter findes, men er ikke integreret i automatisk genkendelse |
| 3MF | Lille | Ja | Nej | Moderne 3D-udskrivning |
Trin 2: Eksporter til binær GLB
Når du gemmer til GLB, skal du indstille GltfSaveOptions.binaryMode = true for at producere en enkelt selvstændig binær fil. Dette undgår den separate .bin sidecar og er påkrævet for mange 3D-fremvisere:
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');Trin 3: Brug Buffer I/O til In-Memory Pipelines
Når du behandler filer i en webtjeneste, skal du bruge openFromBuffer og saveToBuffer for at undgå at 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');
}Trin 4: Batch-behandl filer med Worker Threads
For store konverteringsopgaver, fordel arbejdet på tværs af Node.js worker threads for at udnytte flere CPU‑kerner:
// 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}`));
}Trin 5: Overvåg hukommelse for store modeller
For filer over 50 MB, overvåg heap‑forbruget og behandl filer sekventielt, hvis hukommelsen er begrænset:
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');Øg Node.js‑heap’en for meget store modeller:
node --max-old-space-size=8192 convert.jsOfte stillede spørgsmål
Hvad er det mest kompakte outputformat?
GLB (binary glTF) med indlejrede assets producerer den mest kompakte output i en enkelt fil for scener med materialer og teksturer. STL er mere kompakt for kun-geometri indhold.
Anvender @aspose/3d meshforenkling eller LOD?
Nej. Biblioteket læser og skriver kildegeometrien uden at ændre mesh‑topologien. Meshforenkling (vertex‑reduktion, LOD‑generering) understøttes ikke.
Kan jeg fjerne materialer for at reducere filstørrelsen?
Indstil ObjSaveOptions.enableMaterials = false ved lagring til OBJ. For glTF er al materialedata altid inkluderet; brug STL til kun‑geometri output.