Απόδοση Σκηνής και Εξαγωγή
@aspose/3d είναι μια βιβλιοθήκη επεξεργασίας και μετατροπής, και δεν εκτελεί απόδοση GPU ή παράγει αρχεία εικόνας. Η «Απόδοση» στο πλαίσιο αυτής της βιβλιοθήκης σημαίνει εξαγωγή μιας σκηνής σε μορφή που ένας επακόλουθος renderer, κινητήρας παιχνιδιών ή προβολέας μπορεί να καταναλώσει.
Αυτή η σελίδα καλύπτει όλες τις διαδρομές εξαγωγής: αποθήκευση σε αρχείο, έξοδο σε ενδιάμεση μνήμη, επιλογές ειδικές για μορφές, και πώς να προετοιμάσετε σκηνές για κοινά επόμενα στόχους (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 (Συνιστάται για Web και Παιχνίδια)
Το 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 πρόσθετο buffer.
Εξαγωγή σε 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 (Διαδικασίες 3D Εκτύπωσης)
Το STL είναι μόνο γεωμετρία (χωρίς υλικά, χωρίς κίνηση). Είναι η τυπική μορφή ανταλλαγής για slicers 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);Ορίστε 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 απαντήσεις και ροές δεδομένων, εξάγετε απευθείας σε ένα 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);
}Προετοιμασία Σκηνών για Συγκεκριμένους Renderers
Three.js / Babylon.js (Web)
Αυτοί οι αποδοχείς φορτώνουν εγγενώς αρχεία 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 και animation. Σημείωση: η έξοδος 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 | Χρώμα/υλικό | Όχι | Ναι | Σύγχρονη 3D εκτύπωση |
Κοινά προβλήματα εξαγωγής
| Σύμπτωμα | Αιτία | Διόρθωση |
|---|---|---|
| Το αρχείο εξόδου GLB ανοίγει ως JSON στον προβολέα | binaryMode απομένει ως false | Ορισμός opts.binaryMode = true |
| Τα textures λείπουν στο GLB εξόδου | binaryMode δεν έχει οριστεί | Ορισμένο opts.binaryMode = true για αυτόνομο GLB |
| Το αρχείο STL δεν έχει χρώμα στον slicer | Η μορφή STL δεν υποστηρίζει χρώμα | Χρησιμοποιήστε 3MF για δεδομένα χρώματος |
saveToBuffer επιστρέφει κενό buffer | Το όρισμα της συμβολοσειράς format string λείπει ή είναι λανθασμένο | Περάστε τη συμβολοσειρά format string, π.χ. 'glb', 'stl', ή 'obj' |
| Το FBX ανοίγει χωρίς animation στο Blender | Το αρχείο προέλευσης (OBJ/STL) δεν έχει animation | Το animation μεταφέρεται μόνο αν υπάρχει στην πηγή |
| Το αρχείο εξόδου είναι πολύ μεγάλο | Το OBJ προέλευσης έχει πολλές διπλότυπες κορυφές | Η δυαδική έξοδος GLB αφαιρεί ήδη τα διπλότυπα· ελέγξτε την ποιότητα του πηγαίου περιουσιακού στοιχείου |
Δείτε επίσης
- Φόρτωση Μοντέλου: φόρτωση αρχείων 3D από δίσκο και buffers
- Γράφημα Σκηνής: δημιουργία και τροποποίηση της σκηνής πριν από την εξαγωγή
- Υποστήριξη μορφών: πλήρης πίνακας ανάγνωσης/εγγραφής
- Επισκόπηση API: όλες οι κλάσεις και οι απαριθμήσεις