رندر صحنه و خروجی
@aspose/3d یک کتابخانه پردازش و تبدیل است و رندرینگ با GPU انجام نمیدهد یا فایلهای تصویری تولید نمیکند. «رندرینگ» در زمینه این کتابخانه به معنای صادر کردن یک صحنه به فرمتی که یک رندرر پاییندست، موتور بازی یا نمایشگر بتواند مصرف کند.
این صفحه تمام مسیرهای خروجی را پوشش میدهد: ذخیرهسازی مبتنی بر فایل، خروجی بهصورت بافر در حافظه، گزینههای مخصوص هر فرمت، و چگونگی آمادهسازی صحنهها برای هدفهای رایج پاییندست (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 (binary 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 بافر sidecar.
خروجی به 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 کلاس بهصورت مستقیم استفاده کنید اگر به I/O برای 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 بلندر مواد PBR و انیمیشن را مدیریت میکند. نکته: خروجی FBX از طریق scene.save() پشتیبانی نمیشود — تشخیص خودکار فرمت FBX در save dispatcher پیادهسازی نشده است.
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 در اسلایسر رنگی ندارد | فرمت STL از رنگ پشتیبانی نمیکند | برای دادههای رنگی از 3MF استفاده کنید |
saveToBuffer یک بافر خالی برمیگرداند | آرگومان رشته قالب گم شده یا نادرست است | رشته قالب را پاس دهید، به عنوان مثال. 'glb', 'stl', یا 'obj' |
| فایل FBX در بلندر بدون انیمیشن باز میشود | فایل منبع (OBJ/STL) انیمیشنی ندارد | انیمیشن فقط در صورتی منتقل میشود که در منبع موجود باشد |
| فایل خروجی بسیار بزرگ است | فایل OBJ منبع دارای رئوس تکراری زیادی است | خروجی باینری GLB قبلاً تکراریها را حذف میکند؛ کیفیت دارایی منبع را بررسی کنید |
همچنین ببینید
- بارگذاری مدل: بارگذاری فایلهای سهبعدی از دیسک و بافرها
- گراف صحنه: ساخت و اصلاح صحنه قبل از خروجی
- پشتیبانی از فرمتها: ماتریس کامل خواندن/نوشتن
- نمای کلی API: تمام کلاسها و شمارشها