كيفية تحسين النماذج 3D في TypeScript
يوفر Aspose.3D FOSS for TypeScript عدة استراتيجيات للحد من حجم الملف الناتج وتحسين نطاق المعالجة.هذا الدليل يغطي اختيار النماذج، والاندماج الثنائي، وأنابيب الذاكرة، وتحفيزات مستوى Node.js.
خطوة بخطوة دليل
الخطوة 1: اختر النموذج المناسب للخروج
GLB (glTF الثنائي) تنتج النتيجة الأكثر صعوبة مع دعم أدوات جيدة. OBJ هو على أساس النص وأكبر. STL هو صغير لحركات العمل فقط الهندسة الجيومترية.
| شكل | حجم | يحتوي على المواد | يضم الرسوم المتحركة | أفضل استخدام |
|---|---|---|---|---|
| GLB | صغير | نعم (مخفية ) | نعم | الويب, الألعاب, التبادل العام |
| GLTF | متوسط | نعم ( منفصلة ) | نعم | التطوير، الفحص |
| 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: استخدم بوفر 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 ميغابايت، يراقب استخدام الملف و المعالجة بشكل متتالي إذا كانت الذاكرة محدودة:
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 --max-old-space-size=8192 convert.jsالأسئلة المتكررة
ما هو أكثر تنسيقات الصعود صغيرة؟?
GLB (glTF الثنائي) مع الأصول المدمجة تنتج أداء واحد من أكثر التقنيات للمشاهد مع المواد والنسيج. STL هو أكثر تقنية للحصول على محتوى فقط الهندسة.
هل يطبق @aspose/3d تبسيط الماس أو LOD؟?
لا. تقرأ المكتبة وتكتب الهندسة المصدرية دون تعديل توبولوجيا الماش.مش تبسيط (تخفيض التمثال، توليد LOD) غير مدعوم.
هل يمكنني قطع المواد لخفض حجم الملفات؟?
مجموعة ObjSaveOptions.enableMaterials = false عند توفير إلى OBJ. بالنسبة ل glTF ، يتم تضمين جميع البيانات المادية دائمًا ؛ استخدم STL للإنتاج الوحيد في الهندسة الجيولوجية.