Kako optimizovati 3D modele u TypeScript-u

Kako optimizovati 3D modele u TypeScript-u

Aspose.3D FOSS za TypeScript pruža nekoliko strategija za smanjenje veličine izlaznog fajla i poboljšanje propusnosti obrade. Ovaj vodič pokriva izbor formata, binarno ugrađivanje, in‑memory pipeline‑e i optimizacije na nivou Node.js‑a.

Vodič korak po korak

Korak 1: Izaberite pravi izlazni format

GLB (binarni glTF) proizvodi najkompaktniji izlaz uz dobru podršku alata. OBJ je tekstualni i veći. STL je kompaktan za radne tokove koji sadrže samo geometriju.

FormatVeličinaUključuje materijaleUključuje animacijuNajbolja upotreba
GLBMaliDa (ugrađeno)DaWeb, igre, opšta razmena
glTFMediumDa (odvojeno)DaRazvoj, inspekcija
STLMaloNeNe3D printing, geometry-only
OBJVelikoOdvojeni .mtlNeLegacy alati, široka kompatibilnost
FBXSrednjeNe*Ne*Uvoznik/izvoznik postoji, ali nije integrisan u automatsko otkrivanje
3MFMaloDaNeModerno 3D štampanje

Korak 2: Izvezite u binarni GLB

Pri čuvanju u GLB, postavite GltfSaveOptions.binaryMode = true da proizvedete jedinstvenu samostalnu binarnu datoteku. Ovo izbegava odvojeni .bin sidecar i neophodan je za mnoge 3D preglednike:

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');

Korak 3: Koristite Buffer I/O za in‑memory pipeline‑e

Kada obrađujete fajlove u web servisu, koristite openFromBuffer i saveToBuffer da izbegnete upisivanje na sistem fajlova:

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');
}

Korak 4: Grupno procesirajte fajlove pomoću radnih niti

Za velike zadatke konverzije, raspodelite posao preko Node.js radnih niti kako biste iskoristili više CPU jezgara:

// 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}`));
}

Korak 5: Pratite memoriju za velike modele

Za fajlove veće od 50 MB, pratite upotrebu heap‑memorije i procesirajte fajlove sekvencijalno ako je memorija ograničena:

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');

Povećajte Node.js heap za veoma velike modele:

node --max-old-space-size=8192 convert.js

Često postavljana pitanja

Koji je najkompaktniji izlazni format?

GLB (binarni glTF) sa ugrađenim asset‑ima proizvodi najkompaktniji jednofajl izlaz za scene sa materijalima i teksturama. STL je kompaktniji za sadržaj koji sadrži samo geometriju.

Da li @aspose/3d primenjuje pojednostavljenje mreže ili LOD?

Ne. Biblioteka čita i piše izvornu geometriju bez izmene topologije mreže. Pojednostavljenje mreže (smanjenje vrhova, generisanje LOD‑a) nije podržano.

Mogu li ukloniti materijale da smanjim veličinu fajla?

Postavite ObjSaveOptions.enableMaterials = false prilikom čuvanja u OBJ. Za glTF, svi podaci o materijalu su uvek uključeni; koristite STL za izlaz koji sadrži samo geometriju.


Vidi takođe

 Српски