كيفية تحسين النماذج 3D في TypeScript

كيفية تحسين النماذج 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 للإنتاج الوحيد في الهندسة الجيولوجية.


انظر أيضا

 العربية