إعادة إنتاج السينما وإيرادها
@aspose/3d هي مكتبة معالجة وتحويل، ولا تقوم بعملية التصيير على وحدة معالجة الرسوميات أو إنتاج ملفات صور. “التصيير” في سياق هذه المكتبة يعني تصدير مشهد إلى تنسيق يمكن لمُصوّر لاحق أو محرك ألعاب أو عارض أن يستهلكه.
تغطي هذه الصفحة جميع مسارات التصدير: الحفظ إلى ملف، الإخراج إلى مخزن مؤقت في الذاكرة، الخيارات الخاصة بكل صيغة، وكيفية إعداد المشاهد للأهداف الشائعة التالية (Three.js، Babylon.js، عارضات النماذج، ومحركات الألعاب).
التصدير الأساسي
استدعاء scene.save() مع مسار ملف. المكتبة تستنتج تنسيق الإخراج من امتداد الملف:
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('input.obj'); // use a supported format (OBJ, glTF, GLB, STL, 3MF, COLLADA)
scene.save('output.glb'); // GLB (binary glTF)
scene.save('output.stl'); // STL
scene.save('output.dae'); // COLLADA
scene.save('output.3mf'); // 3MF
التصدير إلى GLB (مُوصى به للويب والألعاب)
GLB (glTF 2.0 ثنائي) هو ملف واحد مستقل يحتوي على جميع بيانات الشبكات، المواد، والملمس. وهو الصيغة الموصى بها للإخراج للعارضات على الويب (Three.js، Babylon.js، model-viewer) ومحركات الألعاب (Godot، Unity عبر المستورد):
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('source.obj');
const opts = new GltfSaveOptions();
opts.binaryMode = true; // produce .glb instead of .gltf + .bin
scene.save('output.glb', opts);
console.log('GLB export complete');تعيين binaryMode = true لإنتاج ملف GLB مستقل. عندما false,، يكون الإخراج .gltf ملف JSON مع .bin ملف جانبي للذاكرة المؤقتة.
التصدير إلى glTF (صيغة JSON للفحص)
نسخة JSON (.gltf + .bin) مفيدة أثناء التطوير لأن JSON قابلة للقراءة من قبل البشر:
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('input.dae'); // COLLADA is fully supported; FBX is not wired into scene.open()
const opts = new GltfSaveOptions();
opts.binaryMode = false; // JSON + .bin sidecar
scene.save('output.gltf', opts);التصدير إلى STL (سير عمل الطباعة ثلاثية الأبعاد)
STL يقتصر على الهندسة (بدون مواد، بدون تحريك). وهو صيغة التبادل القياسية لأدوات تقطيع الطباعة ثلاثية الأبعاد:
import { Scene } from '@aspose/3d';
import { StlSaveOptions } from '@aspose/3d/formats/stl';
const scene = new Scene();
scene.open('model.obj');
const opts = new StlSaveOptions();
opts.binaryMode = true; // binary STL is more compact than ASCII
scene.save('output.stl', opts);تعيين binaryMode = false لإنتاج ASCII STL، وهو قابل للقراءة كنص لكنه أكبر حجماً.
التصدير إلى FBX (سير عمل أدوات DCC)
ملاحظة: توجد فئات مستورد ومصدّر FBX في المكتبة، لكن الكشف التلقائي عن تنسيق FBX غير مدمج في scene.open() أو scene.save(). استدعاء scene.save('output.fbx', opts) لن يستدعي مُصدّر FBX — الـ .fbx الامتداد غير معترف به من قبل موزّع الحفظ وستعود المكالمة إلى إخراج OBJ. استخدم الـ FbxExporter الفئة مباشرةً إذا كنت بحاجة إلى إدخال/إخراج FBX. جدول دعم الصيغ يضع FBX كـ No* لهذا السبب.
إذا كنت بحاجة إلى تصدير إلى صيغة مقبولة من قبل Blender أو Maya أو Unreal Engine، استخدم GLB أو COLLADA بدلاً من ذلك — كلاهما مدمجان بالكامل في scene.save():
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('input.dae');
// GLB is fully supported and widely accepted by DCC tools
const opts = new GltfSaveOptions();
opts.binaryMode = true;
scene.save('output.glb', opts);التصدير في الذاكرة مع saveToBuffer()
للوظائف بدون خادم، استجابات HTTP، وأنابيب البث، صدّر مباشرةً إلى Buffer دون الكتابة إلى القرص:
import { Scene } from '@aspose/3d';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
function convertToGlbBuffer(inputPath: string): Buffer {
const scene = new Scene();
scene.open(inputPath);
const opts = new GltfSaveOptions();
opts.binaryMode = true;
return scene.saveToBuffer('glb', opts);
}
// Express.js / HTTP response example
// const glbBuffer = convertToGlbBuffer('model.obj');
// res.setHeader('Content-Type', 'model/gltf-binary');
// res.send(glbBuffer);
saveToBuffer() يأخذ سلسلة تنسيق كوسيط أول (مثال:. 'glb', 'stl', 'obj') و نفس كائنات الخيارات كـ save().
دمج openFromBuffer() و saveToBuffer()
خط أنابيب تحويل كامل في الذاكرة دون أي عمليات إدخال/إخراج للقرص في أي مرحلة:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
function objBufferToGlbBuffer(objData: Buffer): Buffer {
const scene = new Scene();
const loadOpts = new ObjLoadOptions();
loadOpts.enableMaterials = true;
scene.openFromBuffer(objData, loadOpts);
const saveOpts = new GltfSaveOptions();
saveOpts.binaryMode = true;
return scene.saveToBuffer('glb', saveOpts);
}تحضير المشاهد لمحركات العرض المحددة
Three.js / Babylon.js (ويب)
هذه العارضات تقوم بتحميل ملفات GLB أصلاً. صدّر باستخدام binaryMode = true. إذا تم الإشارة إلى القوام من ملف OBJ المصدر، تأكد من .mtl وأن ملفات الصورة موجودة في نفس الموقع عند التحميل.
model-viewer (مكوّن ويب)
يقبل .glb مباشرةً. نفس إعدادات التصدير كما في Three.js.
محرك Godot
استيراد GLB عبر مستورد Godot (Project → Import). استخدم binaryMode = true. يدعم Godot مواد PBR من glTF 2.0 بشكل أصلي.
Blender
لتحقيق أعلى دقة استيراد استخدم glTF (output.gltf + output.bin) أو GLB (output.glb). يتعامل مستورد glTF 2.0 في Blender مع مواد PBR والرسوم المتحركة. ملاحظة: إخراج FBX عبر scene.save() غير مدعوم — الكشف التلقائي عن تنسيق FBX غير مدمج في موزع الحفظ.
3D Printing (Slicers: Cura, PrusaSlicer, Bambu Studio)
صدّر إلى STL أو 3MF. استخدم 3MF عندما تحتاج إلى الحفاظ على اللون أو بيانات تعريف المادة. استخدم STL لأقصى توافق.
مقارنة صيغ التصدير
| تنسيق | امتداد | مواد | الرسوم المتحركة | ملف واحد | الأفضل لـ |
|---|---|---|---|---|---|
| GLB | .glb | PBR (glTF 2.0) | نعم | نعم | الويب، الألعاب، التسليم العام |
| glTF | .gltf | PBR (glTF 2.0) | نعم | لا (+ .bin) | التطوير، الفحص |
| STL | .stl | لا | لا | نعم | 3D printing, geometry-only |
| FBX | .fbx | Phong/PBR | لا* | لا* | المستورد/المصدر موجودان لكن غير موصولين بالكشف التلقائي |
| COLLADA | .dae | نعم | نعم | نعم | تبادل Cross-DCC |
| 3MF | .3mf | اللون/المادة | لا | نعم | الطباعة ثلاثية الأبعاد الحديثة |
مشكلات التصدير الشائعة
| عرض | سبب | إصلاح |
|---|---|---|
| يفتح GLB الناتج كـ JSON في العارض | binaryMode متروك كـ false | تعيين opts.binaryMode = true |
| الملمس مفقود في GLB الناتج | binaryMode غير مُعيّن | تعيين opts.binaryMode = true لـ GLB ذاتي الاحتواء |
| ملف STL لا يحتوي على لون في slicer | تنسيق STL لا يدعم اللون | استخدم 3MF لبيانات اللون |
saveToBuffer يعيد مخزنًا مؤقتًا فارغًا | معامل سلسلة التنسيق مفقود أو غير صحيح | مرّر سلسلة التنسيق، على سبيل المثال. 'glb', 'stl', أو 'obj' |
| يفتح FBX بدون حركة في Blender | ملف المصدر (OBJ/STL) لا يحتوي على أي حركة | تستمر الرسوم المتحركة فقط إذا كانت موجودة في المصدر |
| ملف الإخراج كبير جدًا | ملف OBJ المصدر يحتوي على العديد من الرؤوس المكررة | الإخراج الثنائي GLB يزيل التكرارات بالفعل؛ تحقق من جودة الأصل المصدر |
انظر أيضًا
- تحميل النموذج: تحميل ملفات 3D من القرص والمخازن
- مخطط المشهد: إنشاء وتعديل المشهد قبل التصدير
- دعم الصيغ: مصفوفة القراءة/الكتابة الكاملة
- نظرة عامة على API: جميع الفئات والتعدادات