Kuinka optimoida 3D-mallit TypeScriptissä
Aspose.3D FOSS for TypeScript tarjoaa useita strategioita tulostetiedoston koon pienentämiseksi ja käsittelyn läpimenon parantamiseksi. Tämä opas kattaa formaatin valinnan, binäärisen upottamisen, muistissa tapahtuvat putkistot ja Node.js-tason optimoinnit.
Vaiheittainen opas
Vaihe 1: Valitse oikea tulostusformaatti
GLB (binäärinen glTF) tuottaa tiiviimmän tulosteen hyvän työkalutuen kanssa. OBJ on tekstipohjainen ja suurempi. STL on tiivis geometria‑vain työnkulkuihin.
| Muoto | Koko | Sisältää materiaaleja | Sisältää animaation | Paras käyttö |
|---|---|---|---|---|
| GLB | Pieni | Kyllä (upotettu) | Kyllä | Web, pelit, yleinen vaihto |
| glTF | Keskikokoinen | Kyllä (erillinen) | Kyllä | Kehitys, tarkastus |
| STL | Pieni | Ei | Ei | 3D printing, geometry-only |
| OBJ | Suuri | Erota .mtl | Ei | Perintötyökalut, laaja yhteensopivuus |
| FBX | Keskikokoinen | Ei* | Ei* | Tuonti-/vientitoiminto on olemassa, mutta sitä ei ole kytketty automaattitunnistukseen |
| 3MF | Pieni | Kyllä | Ei | Moderni 3D-tulostus |
Vaihe 2: Vie binääriseen GLB‑muotoon
Kun tallennat GLB-muotoon, aseta GltfSaveOptions.binaryMode = true luodaksesi yhden itsenäisen binääritiedoston. Tämä estää erillisen .bin sivutiedoston ja on monille 3D-katselijoille pakollinen:
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');Vaihe 3: Käytä Buffer‑I/O:ta muistissa tapahtuvissa putkistoissa
Kun käsittelet tiedostoja verkkopalvelussa, käytä openFromBuffer ja saveToBuffer välttääksesi kirjoittamista tiedostojärjestelmään:
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');
}Vaihe 4: Eräprosessoi tiedostoja työntekijä‑säikeiden avulla
Suureissa muunnostöissä jaa työ Node.js‑työntekijä‑säikeiden kesken hyödyntääksesi useita CPU‑ytimiä:
// 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}`));
}Vaihe 5: Seuraa muistinkäyttöä suurille malleille
Tiedostoille, jotka ylittävät 50 Mt, seuraa keon käyttöä ja käsittele tiedostot peräkkäin, jos muisti on rajoitettu:
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');Kasvata Node.js‑keon kokoa erittäin suurille malleille:
node --max-old-space-size=8192 convert.jsUsein kysytyt kysymykset
Mikä on tiiviinin tulostusformaatti?
GLB (binäärinen glTF) upotetuilla resursseilla tuottaa tiiviimmän yhden tiedoston tulosteen kohtauksille, joissa on materiaaleja ja tekstuureja. STL on tiiviimpi pelkästään geometria‑sisällölle.
Sovelletaanko @aspose/3d:ssä verkon yksinkertaistusta tai LOD:ia?
Ei. Kirjasto lukee ja kirjoittaa lähtegeometrian muuttamatta verkon topologiaa. Verkon yksinkertaistusta (solmujen vähentäminen, LOD‑generointi) ei tueta.
Voinko poistaa materiaalit pienentääkseni tiedoston kokoa?
Aseta ObjSaveOptions.enableMaterials = false Kun tallennetaan OBJ-muotoon. glTF:ssä kaikki materiaalitiedot sisältyvät aina; käytä STL:ää vain geometriaa sisältävään tulosteeseen.