Ako optimalizovať 3D modely v TypeScripte
Aspose.3D FOSS pre TypeScript poskytuje niekoľko stratégií na zníženie veľkosti výstupného súboru a zlepšenie priepustnosti spracovania. Tento sprievodca pokrýva výber formátu, binárne vkladanie, pipeline v pamäti a optimalizácie na úrovni Node.js.
Postupný návod
Krok 1: Vyberte správny výstupný formát
GLB (binárny glTF) produkuje najkompaktný výstup s dobrým podporovaním nástrojov. OBJ je textovo založený a väčší. STL je kompaktný pre workflow iba s geometriou.
| Formát | Veľkosť | Obsahuje materiály | Obsahuje animáciu | Najlepšie použitie |
|---|---|---|---|---|
| GLB | Malý | Áno (vložené) | Áno | Web, hry, všeobecná výmena |
| glTF | Stredný | Áno (samostatne) | Áno | Vývoj, kontrola |
| STL | Malý | Nie | Nie | 3D printing, geometry-only |
| OBJ | Veľký | Oddeliť .mtl | Nie | Staré nástroje, široká kompatibilita |
| FBX | Stredné | Nie* | Nie* | Importér/exportér existuje, ale nie je prepojený s automatickým rozpoznávaním |
| 3MF | Malé | Áno | Nie | Moderné 3D tlač |
Krok 2: Exportovať do binárneho GLB
Pri ukladaní do GLB nastavte GltfSaveOptions.binaryMode = true na vytvorenie jedného samostatného binárneho súboru. Tým sa vyhnete samostatnému .bin príslušnému súboru a je požadované pre mnohé 3D prehliadače:
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');Krok 3: Použiť Buffer I/O pre pipeline v pamäti
Pri spracovávaní súborov vo webovej službe použite openFromBuffer a saveToBuffer aby ste sa vyhli zápisu do súborového systému:
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');
}Krok 4: Dávkovo spracovávať súbory pomocou worker vlákien
Pre veľké konverzné úlohy rozdeľte prácu medzi worker vlákna Node.js, aby ste využili viacero jadier CPU:
// 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}`));
}Krok 5: Monitorovať pamäť pre veľké modely
Pre súbory nad 50 MB monitorujte využitie heapu a ak je pamäť obmedzená, spracovávajte súbory sekvenčne:
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');Zvýšte heap Node.js pre veľmi veľké modely:
node --max-old-space-size=8192 convert.jsČasto kladené otázky
Aký je najkompaktný výstupný formát?
GLB (binárny glTF) s vloženými assetmi produkuje najkompaktný jednosúborový výstup pre scény s materiálmi a textúrami. STL je kompaktný pre obsah obsahujúci iba geometriu.
Aplikuje @aspose/3d zjednodušenie siete alebo LOD?
Nie. Knižnica číta a zapisuje zdrojovú geometriu bez úpravy topológie siete. Zjednodušenie siete (zníženie počtu vrcholov, generovanie LOD) nie je podporované.
Môžem odstrániť materiály, aby som zmenšil veľkosť súboru?
Nastavte ObjSaveOptions.enableMaterials = false pri ukladaní do OBJ. Pre glTF sú všetky údaje o materiáloch vždy zahrnuté; použite STL pre výstup len s geometriou.