การเรนเดอร์ฉากและการส่งออก

การเรนเดอร์ฉากและการส่งออก

@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.glbPBR (glTF 2.0)ใช่ใช่เว็บ, เกม, การส่งมอบทั่วไป
glTF.gltfPBR (glTF 2.0)ใช่ไม่ (+ .bin)การพัฒนา, การตรวจสอบ
STL.stlไม่ไม่ใช่3D printing, geometry-only
FBX.fbxPhong/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 มีการลบจุดยอดซ้ำอยู่แล้ว; ตรวจสอบคุณภาพของแอสเซ็ตต้นทาง

ดูเพิ่มเติม

 ภาษาไทย