Rendering Adegan dan Eksport
@aspose/3d ialah perpustakaan pemprosesan dan penukaran, dan ia tidak melakukan rendering GPU atau menghasilkan fail imej. “Rendering” dalam konteks perpustakaan ini bermaksud mengeksport satu adegan ke format yang boleh digunakan oleh downstream renderer, game engine, atau viewer.
Halaman ini merangkumi semua laluan eksport: penyimpanan berasaskan fail, output penampan dalam memori, pilihan khusus format, dan cara menyediakan adegan untuk sasaran hiliran yang biasa (Three.js, Babylon.js, penonton model, dan enjin permainan).
Eksport Asas
Panggil scene.save() dengan laluan fail. Perpustakaan menentukan format output daripada sambungan fail:
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
Mengeksport ke GLB (Disyorkan untuk Web dan Permainan)
GLB (binary glTF 2.0) ialah satu fail berdiri sendiri yang mengandungi semua data mesh, bahan, dan tekstur. Ia merupakan format output yang disyorkan untuk penonton web (Three.js, Babylon.js, model‑viewer) dan enjin permainan (Godot, Unity melalui pengimport):
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');Tetapkan binaryMode = true untuk menghasilkan fail GLB yang berdiri sendiri. Apabila false, outputnya ialah fail JSON .gltf dengan buffer sidecar .bin yang berasingan.
Mengeksport ke glTF (Format JSON untuk Pemeriksaan)
Varian JSON (.gltf + .bin) berguna semasa pembangunan kerana JSON boleh dibaca oleh manusia:
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);Mengeksport ke STL (Alur Kerja Pencetakan 3D)
STL adalah hanya geometri (tiada bahan, tiada animasi). Ia adalah format pertukaran standard untuk pemotong cetakan 3D:
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);Tetapkan binaryMode = false untuk menghasilkan ASCII STL, yang boleh dibaca teks tetapi lebih besar.
Mengeksport ke FBX (Alur Kerja Alat DCC)
Nota: Kelas import dan eksport FBX wujud dalam perpustakaan, tetapi pengesanan automatik format FBX tidak disambungkan ke
scene.open()atauscene.save(). Memanggilscene.save('output.fbx', opts)tidak akan memanggil eksport FBX — sambungan.fbxtidak dikenali oleh penyelaras simpanan dan panggilan akan kembali kepada output OBJ. Gunakan kelasFbxExportersecara langsung jika anda memerlukan I/O FBX. Jadual sokongan format menandakan FBX sebagaiNo*atas sebab ini.
Jika anda perlu mengeksport ke format yang diterima oleh Blender, Maya, atau Unreal Engine, gunakan GLB atau COLLADA sebagai gantinya — kedua‑duanya sudah terintegrasi sepenuhnya ke dalam 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);Eksport Dalam Memori dengan saveToBuffer()
Untuk fungsi tanpa pelayan, respons HTTP, dan paip penstriman, eksport secara langsung ke Buffer tanpa menulis ke cakera:
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() mengambil rentetan format sebagai argumen pertama (contohnya 'glb', 'stl', 'obj') dan objek pilihan yang sama seperti save().
Menggabungkan openFromBuffer() dan saveToBuffer()
Saluran penukaran sepenuhnya dalam memori tanpa I/O cakera pada mana-mana peringkat:
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);
}Menyiapkan Adegan untuk Renderer Tertentu
Three.js / Babylon.js (Web)
Renderer ini secara asli memuatkan fail GLB. Eksport dengan binaryMode = true. Jika tekstur dirujuk daripada OBJ sumber, pastikan .mtl dan fail imej berada dalam lokasi yang sama semasa memuat.
model-viewer (Komponen Web)
Menerima .glb secara langsung. Tetapan eksport yang sama seperti Three.js.
Enjin Godot
Import GLB melalui pengimport Godot (Project → Import). Gunakan binaryMode = true. Godot menyokong bahan PBR dari glTF 2.0 secara natif.
Blender
Untuk kesetiaan import terbaik gunakan glTF (output.gltf + output.bin) atau GLB (output.glb). Pengimport glTF 2.0 Blender mengendalikan bahan PBR dan animasi. Nota: Output FBX melalui scene.save() tidak disokong — pengesanan automatik format FBX tidak disambungkan ke penghantar simpan.
Pencetakan 3D (Pemotong: Cura, PrusaSlicer, Bambu Studio)
Eksport ke STL atau 3MF. Gunakan 3MF apabila anda memerlukan warna atau metadata bahan dipelihara. Gunakan STL untuk keserasian maksimum.
Perbandingan Format Eksport
| Format | Sambungan | Bahan | Animasi | Fail Tunggal | Terbaik Untuk |
|---|---|---|---|---|---|
| GLB | .glb | PBR (glTF 2.0) | Ya | Ya | Web, permainan, penghantaran umum |
| glTF | .gltf | PBR (glTF 2.0) | Ya | Tidak (+ .bin) | Pembangunan, pemeriksaan |
| STL | .stl | Tidak | Tidak | Ya | Pencetakan 3D, hanya geometri |
| FBX | .fbx | Phong/PBR | Tidak* | Tidak* | Pengimport/pengexport wujud tetapi tidak disambungkan ke pengesanan automatik |
| COLLADA | .dae | Ya | Ya | Ya | Pertukaran silang-DCC |
| 3MF | .3mf | Warna/bahan | Tidak | Ya | Pencetakan 3D moden |
Isu Eksport Biasa
| Symptom | Cause | Fix |
|---|---|---|
| Output GLB opens as JSON in viewer | binaryMode ditinggalkan sebagai false | Tetapkan opts.binaryMode = true |
| Textures missing in output GLB | binaryMode tidak ditetapkan | Tetapkan opts.binaryMode = true untuk GLB berdiri sendiri |
| STL file has no color in slicer | Format STL tidak menyokong warna | Gunakan 3MF untuk data warna |
saveToBuffer returns empty buffer | Argumen rentetan format hilang atau salah | Hantar rentetan format, contohnya 'glb', 'stl', atau 'obj' |
| FBX opens without animation in Blender | Fail sumber (OBJ/STL) tidak mempunyai animasi | Animasi hanya diteruskan jika ada dalam sumber |
| Output file is very large | OBJ sumber mempunyai banyak verteks duplikat | Output binari GLB sudah menghapus duplikasi; semak kualiti aset sumber |
Lihat Juga
- Model Loading: memuatkan fail 3D dari cakera dan penimbal
- Scene Graph: membina dan mengubah suai adegan sebelum dieksport
- Format Support: matriks baca/tulis lengkap
- API Overview: semua kelas dan enumerasi