Hoe 3D-modellen te optimaliseren in TypeScript
Aspose.3D FOSS voor TypeScript biedt verschillende strategieën om de grootte van uitvoerbestanden te verkleinen en de verwerkingsdoorvoer te verbeteren. Deze gids behandelt formatselectie, binaire insluiting, in‑memory pipelines en optimalisaties op Node.js-niveau.
Stapsgewijze handleiding
Stap 1: Kies het juiste uitvoerformaat
GLB (binaire glTF) levert de meest compacte output met goede toolondersteuning. OBJ is tekstgebaseerd en groter. STL is compact voor workflows die alleen geometrie bevatten.
| Formaat | Grootte | Bevat materialen | Bevat animatie | Beste gebruik |
|---|---|---|---|---|
| GLB | Klein | Ja (ingesloten) | Ja | Web, games, algemene uitwisseling |
| glTF | Medium | Ja (apart) | Ja | Ontwikkeling, inspectie |
| STL | Klein | Nee | Nee | 3D printing, geometry-only |
| OBJ | Groot | Aparte .mtl | Nee | Legacy-tools, brede compatibiliteit |
| FBX | Middel | Nee* | Nee* | Importer/exporter bestaat, maar is niet gekoppeld aan automatische detectie |
| 3MF | Klein | Ja | Nee | Modern 3D-printen |
Stap 2: Exporteer naar binaire GLB
Bij het opslaan naar GLB, stel GltfSaveOptions.binaryMode = true in om een enkel zelfvoorzienend binair bestand te produceren. Dit voorkomt de aparte .bin sidecar en is vereist voor veel 3D-viewers:
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');Stap 3: Gebruik Buffer I/O voor in‑memory pipelines
Bij het verwerken van bestanden in een webservice, gebruik openFromBuffer en saveToBuffer om te voorkomen dat er naar het bestandssysteem wordt geschreven:
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');
}Stap 4: Batchverwerk bestanden met worker threads
Voor grote conversietaken, verdeel het werk over Node.js worker threads om meerdere CPU-kernen te benutten:
// 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}`));
}Stap 5: Houd het geheugen in de gaten voor grote modellen
Voor bestanden groter dan 50 MB, houd het heap‑gebruik in de gaten en verwerk bestanden opeenvolgend als het geheugen beperkt is:
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');Verhoog de Node.js-heap voor zeer grote modellen:
node --max-old-space-size=8192 convert.jsVeelgestelde vragen
Wat is het meest compacte uitvoerformaat?
GLB (binaire glTF) met ingesloten assets levert de meest compacte single‑file output voor scènes met materialen en texturen. STL is compacter voor alleen‑geometrie‑inhoud.
Past @aspose/3d mesh‑simplificatie of LOD toe?
Nee. De bibliotheek leest en schrijft de brongeometrie zonder de mesh‑topologie te wijzigen. Mesh‑simplificatie (vertexreductie, LOD‑generatie) wordt niet ondersteund.
Kan ik materialen verwijderen om de bestandsgrootte te verkleinen?
Stel ObjSaveOptions.enableMaterials = false bij het opslaan naar OBJ. Voor glTF worden alle materiaalgegevens altijd meegeleverd; gebruik STL voor alleen-geometry output.