Sådan optimeres 3D-modeller i TypeScript

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.

FormatStørrelseInkluderer materialerInkluderer animationBedste anvendelse
GLBLilleJa (indlejret)JaWeb, spil, generel udveksling
glTFMellemJa (separat)JaUdvikling, inspektion
STLLilleNejNej3D-udskrivning, kun geometri
OBJStorSeparat .mtlNejÆldre værktøjer, bred kompatibilitet
FBXMellemNej*Nej*Importer/exporter findes, men er ikke integreret i automatisk genkendelse
3MFLilleJaNejModerne 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.js

Ofte 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.


Se også

 Dansk