Sådan optimeres 3D-modeller i TypeScript
Aspose.3D FOSS for TypeScript tilbyder flere strategier til at reducere outputfilstørrelsen og forbedre behandlingsgennemløbet. Denne vejledning 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 til kun‑geometri arbejdsprocesser.
| Format | Størrelse | Inkluderer materialer | Inkluderer animation | Bedste anvendelse |
|---|---|---|---|---|
| GLB | Lille | Ja (indlejret) | Ja | Web, spil, generel udveksling |
| glTF | Mellem | Ja (separat) | Ja | Udvikling, inspektion |
| STL | Lille | Nej | Nej | 3D-udskrivning, kun geometri |
| OBJ | Stor | Separat .mtl | Nej | Ældre værktøjer, bred kompatibilitet |
| FBX | Mellem | 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 som 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‑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');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‑behandle filer med arbejdertråde
For store konverteringsopgaver, fordel arbejdet på tværs af Node.js worker-tråde for at bruge 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 enkeltfiloutput 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. Mesh‑forenkling (vertex‑reduktion, LOD‑generering) understøttes ikke.
Kan jeg fjerne materialer for at reducere filstørrelsen?
Indstil ObjSaveOptions.enableMaterials = false, når du gemmer til OBJ. For glTF er al materialedata altid inkluderet; brug STL til kun‑geometri‑output.