TypeScript में 3D मॉडल को कैसे अनुकूलित करें
Aspose.3D FOSS for TypeScript आउटपुट फ़ाइल के आकार को कम करने और प्रसंस्करण पारगमन में सुधार करने के लिए कई रणनीतियां प्रदान करता है. यह गाइड प्रारूप चयन, बाइनरी इनब्रेडिंग, स्मृति में पाइपलाइनों और Node.js स्तर पर अनुकूलन को कवर करता हैं.
कदम-दर-चरण गाइड
चरण 1: सही आउटपुट प्रारूप का चयन करें
GLB (बिनारी glTF) अच्छे उपकरण समर्थन के साथ सबसे कॉम्पैक्ट उत्पादन का उत्पादन करता है. OBJ पाठ आधारित और बड़ा है।.
| प्रारूप | आकार | सामग्री शामिल है | एनीमेशन शामिल है | सर्वश्रेष्ठ उपयोग |
|---|---|---|---|---|
| GLB | छोटे | हाँ (अनुकूलित) | हाँ | वेब, खेल, सामान्य विनिमय |
| ग्लोबल | मध्यम | हाँ (अलग से) | हाँ | विकास, निरीक्षण |
| STL | छोटे | नहीं | नहीं | 3D printing, geometry-only |
| OBJ | बड़े | अलग .mtl | नहीं | विरासत उपकरण, व्यापक संगतता |
| FBX | मध्यम | नहीं * | नहीं * | आयातक / निर्यातक मौजूद हैं लेकिन स्व-प्रमाण में नहीं लाया गया है |
| 3MF | छोटे | हाँ | नहीं | 3D प्रिंटिंग आधुनिक |
चरण 2: बाइनरी GLB में निर्यात करें
जब आप GLB पर बचत करते हैं, तो सेट करें GltfSaveOptions.binaryMode = true एक ही स्व-सामग्री बाइनरी फ़ाइल बनाने के लिए. यह अलग से बचता है .bin यह 3D दृश्यों के लिए आवश्यक है:
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');चरण 3: In-Memory पाइपलाइन के लिए Buffer I/O का उपयोग करें
एक वेब सेवा में फ़ाइलों को संसाधित करते समय, उपयोग करें openFromBuffer और saveToBuffer फ़ाइल सिस्टम में लिखने से बचें:
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');
}चरण 4: कार्यकर्ताओं के खतरे के साथ बैच-प्रोसेस फ़ाइलों
बड़े रूपांतरण कार्यों के लिए, Node.js श्रमिकों की तारों पर काम वितरित करें और कई सीपीयू कोर्स का उपयोग करें:
// 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}`));
}चरण 5: बड़े मॉडल के लिए मेमोरी की निगरानी करें
50 एमबी से अधिक फ़ाइलों के लिए, हेप उपयोग और संसाधित फ़ील्ड को क्रमशः निगरानी करें यदि स्मृति सीमित है:
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');बहुत बड़े मॉडलों के लिए Node.js की छड़ी बढ़ाएं:
node --max-old-space-size=8192 convert.jsअक्सर पूछे जाने वाले प्रश्न
सबसे कॉम्पैक्ट आउटपुट प्रारूप क्या है?
ग्लबी (बिनारी glTF) में अंतर्निहित संपत्तियों के साथ सबसे कॉम्पैक्ट एक फ़ाइल आउटपुट बनाता है सामग्री और संरचनाओं के दृश्यों के लिए. STL केवल भूमेट्रिक-सामान्य सामग्री के रूप में अधिक कॉंपैक्स है।.
क्या @aspose/3d मस्जिद सरलता या LOD लागू करता है?
नहीं. पुस्तकालय स्रोत भूमेट्री को पढ़ता है और लिखता था, बिना मश टोपोलॉजी को संशोधित किए. मेश सरलता (वर्टेक्स कटौती, एलओडी जनरेटिंग) का समर्थन नहीं किया जाता है।.
क्या मैं फ़ाइल आकार को कम करने के लिए सामग्री काट सकता हूं?
सेट ObjSaveOptions.enableMaterials = false जब आप ओबीजे में बचत करते हैं. glTF के लिए, सभी सामग्री डेटा हमेशा शामिल होते हैं; केवल आउटपुट के रूप में जीओएमटी का उपयोग करें।.