การเรนเดอร์ฉากและการส่งออก
@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 (กระบวนการพิมพ์ 3 มิติ)
STL มีเฉพาะเรขาคณิต (ไม่มีวัสดุ, ไม่มีแอนิเมชัน). มันเป็นรูปแบบแลกเปลี่ยนมาตรฐานสำหรับซลายเซอร์พิมพ์ 3 มิติ:
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 I/O ตารางการสนับสนุนรูปแบบระบุ 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()
สำหรับฟังก์ชันแบบ serverless, การตอบสนอง HTTP, และ pipeline การสตรีม, ส่งออกโดยตรงเป็น 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()
Pipeline การแปลงทั้งหมดในหน่วยความจำโดยไม่มีการ I/O กับดิสก์ในขั้นตอนใดเลย:
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 (Web Component)
รับ .glb โดยตรง การตั้งค่าการส่งออกเดียวกับ Three.js.
Godot Engine
นำเข้า 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 | ใช่ | ใช่ | ใช่ | การแลกเปลี่ยนข้าม DCC |
| 3MF | .3mf | สี/วัสดุ | ไม่ | ใช่ | การพิมพ์ 3 มิติสมัยใหม่ |
ปัญหาการส่งออกทั่วไป
| อาการ | สาเหตุ | แก้ไข |
|---|---|---|
| ไฟล์ GLB ที่ส่งออกเปิดเป็น JSON ในตัวดู | binaryMode เหลือเป็น false | ตั้งค่า opts.binaryMode = true |
| ไม่มีเทกเจอร์ใน GLB ที่ส่งออก | binaryMode ไม่ได้ตั้งค่า | ตั้งค่า opts.binaryMode = true สำหรับ GLB แบบอิสระ |
| ไฟล์ STL ไม่มีสีในโปรแกรมสไลเซอร์ | รูปแบบ STL ไม่รองรับสี | ใช้ 3MF สำหรับข้อมูลสี |
saveToBuffer คืนค่าเป็นบัฟเฟอร์ว่าง | อาร์กิวเมนต์สตริงรูปแบบหายหรือผิด | ส่งสตริงรูปแบบ, เช่น. 'glb', 'stl', หรือ 'obj' |
| FBX เปิดโดยไม่มีแอนิเมชันใน Blender | ไฟล์ต้นฉบับ (OBJ/STL) ไม่มีแอนิเมชัน | แอนิเมชันจะคงอยู่ต่อได้เฉพาะเมื่อมีในไฟล์ต้นฉบับ |
| ไฟล์ผลลัพธ์มีขนาดใหญ่มาก | ไฟล์ OBJ ต้นทางมีจุดยอดซ้ำจำนวนมาก | ผลลัพธ์ไบนารี GLB มีการลบจุดยอดซ้ำอยู่แล้ว; ตรวจสอบคุณภาพของแอสเซ็ตต้นทาง |
ดูเพิ่มเติม
- การโหลดโมเดล: กำลังโหลดไฟล์ 3D จากดิสก์และบัฟเฟอร์
- กราฟฉาก: กำลังสร้างและแก้ไขฉากก่อนการส่งออก
- การสนับสนุนรูปแบบ: เมทริกซ์การอ่าน/เขียนที่ครบถ้วน
- ภาพรวม API: คลาสและการนับประเภททั้งหมด