TypeScript में 3D मॉडल को कैसे अनुकूलित करें

TypeScript में 3D मॉडल को कैसे अनुकूलित करें

Aspose.3D FOSS for TypeScript कई रणनीतियाँ प्रदान करता है जो आउटपुट फ़ाइल आकार को कम करने और प्रोसेसिंग थ्रूपुट को सुधारने में मदद करती हैं। यह गाइड फ़ॉर्मेट चयन, बाइनरी एम्बेडिंग, इन‑मेमोरी पाइपलाइन्स, और Node.js‑स्तर के अनुकूलन को कवर करता है।.

स्टेप बाय स्टेप गाइड

चरण 1: सही आउटपुट फ़ॉर्मेट चुनें

GLB (binary glTF) सबसे कॉम्पैक्ट आउटपुट उत्पन्न करता है और इसमें अच्छा टूलिंग समर्थन है। OBJ टेक्स्ट‑आधारित है और बड़ा होता है। STL ज्योमेट्री‑केवल वर्कफ़्लो के लिए कॉम्पैक्ट है।.

फ़ॉर्मेटआकारसामग्री शामिल हैंएनिमेशन शामिल हैसर्वोत्तम उपयोग
GLBछोटाहाँ (एम्बेडेड)हाँवेब, गेम्स, सामान्य विनिमय
glTFMediumहाँ (अलग)हाँविकास, निरीक्षण
STLछोटानहींनहीं3D printing, geometry-only
OBJबड़ाअलग .mtlनहींपुराने उपकरण, व्यापक संगतता
FBXमध्यमनहीं*नहीं*Importer/exporter मौजूद हैं लेकिन ऑटो-डिटेक्शन में जोड़े नहीं गए हैं
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: इन‑मेमोरी पाइपलाइन्स के लिए बफ़र 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 वर्कर थ्रेड्स में वितरित करें ताकि कई 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}`));
}

चरण 5: बड़े मॉडलों के लिए मेमोरी की निगरानी करें

50 MB से बड़ी फ़ाइलों के लिए, हीप उपयोग की निगरानी करें और यदि मेमोरी सीमित है तो फ़ाइलों को क्रमिक रूप से प्रोसेस करें:

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

अक्सर पूछे जाने वाले प्रश्न

सबसे कॉम्पैक्ट आउटपुट फ़ॉर्मेट कौन सा है?

GLB (binary glTF) जिसमें एम्बेडेड एसेट्स होते हैं, सामग्री और टेक्सचर वाले दृश्यों के लिए सबसे कॉम्पैक्ट सिंगल‑फ़ाइल आउटपुट उत्पन्न करता है। STL ज्योमेट्री‑केवल सामग्री के लिए अधिक कॉम्पैक्ट है।.

क्या @aspose/3d मेष सरलीकरण या LOD लागू करता है?

नहीं। लाइब्रेरी स्रोत ज्योमेट्री को पढ़ती और लिखती है बिना मेष टोपोलॉजी को बदले। मेष सरलीकरण (वर्टेक्स कमी, LOD जनरेशन) समर्थित नहीं है।.

क्या मैं फ़ाइल आकार कम करने के लिए मैटीरियल्स को हटा सकता हूँ?

सेट करें ObjSaveOptions.enableMaterials = false OBJ में सहेजते समय। glTF के लिए, सभी सामग्री डेटा हमेशा शामिल रहता है; केवल ज्यामिति आउटपुट के लिए STL का उपयोग करें।.


संबंधित देखें

 हिन्दी