Scene Rendering og Eksport
@aspose/3d er et behandlings- og konverteringsbibliotek, og det udfører ikke GPU-rendering eller producerer billedfiler. “Rendering” i denne biblioteks kontekst betyder eksportere en scene til et format, som en efterfølgende renderer, spilmotor eller visningsprogram kan bruge.
Denne side dækker alle eksportveje: filbaseret gemning, output til buffer i hukommelsen, format‑specifikke indstillinger og hvordan man forbereder scener til almindelige efterfølgende mål (Three.js, Babylon.js, model‑visere og spilmotorer).
Grundlæggende eksport
Kald scene.save() med en filsti. Biblioteket udleder outputformatet ud fra filendelsen:
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
Eksport til GLB (anbefalet til web og spil)
GLB (binær glTF 2.0) er en enkelt selvstændig fil, der indlejrer al mesh‑data, materialer og teksturer. Det er det anbefalede outputformat for web‑visere (Three.js, Babylon.js, model-viewer) og spilmotorer (Godot, Unity via importør):
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');Indstil binaryMode = true for at producere en selvstændig GLB-fil. Når false, outputtet er en .gltf JSON-fil med en separat .bin buffer-sidecar.
Eksport til glTF (JSON‑format til inspektion)
JSON-varianten (.gltf + .bin) er nyttig under udvikling, fordi JSON er menneskelæselig:
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);Eksport til STL (3D‑print‑arbejdsgange)
STL indeholder kun geometri (ingen materialer, ingen animation). Det er standardudvekslingsformatet for 3D‑print‑slicere:
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);Indstil binaryMode = false for at producere ASCII STL, som er tekstlæselig men større.
Eksport til FBX (DCC‑værktøjsarbejdsgange)
Bemærk: FBX-import- og eksportklasser findes i biblioteket, men automatisk genkendelse af FBX-format er ikke integreret i scene.open() eller scene.save(). Kald scene.save('output.fbx', opts) vil ikke aktivere FBX-eksportøren — den .fbx udvidelsen genkendes ikke af gemme-dispatcheren, og kaldet falder tilbage til OBJ-output. Brug FbxExporter klasse direkte, hvis du har brug for FBX I/O. Formatunderstøttelsestabellen markerer FBX som No* af denne grund.
Hvis du har brug for at eksportere til et format, der accepteres af Blender, Maya eller Unreal Engine, skal du i stedet bruge GLB eller COLLADA — begge er fuldt integreret i 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);In-Memory-eksport med saveToBuffer()
For serverløse funktioner, HTTP-svar og streaming-pipelines, eksporter direkte til en Buffer uden at skrive til disk:
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() tager en formatstreng som første argument (f.eks. 'glb', 'stl', 'obj') og de samme options objects som save().
Kombinering openFromBuffer() og saveToBuffer()
En fuldstændig in‑memory konverterings‑pipeline uden disk‑I/O på noget trin:
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);
}Forberedelse af scener til specifikke renderere
Three.js / Babylon.js (Web)
Disse renderere indlæser GLB-filer nativt. Eksporter med binaryMode = true. Hvis teksturer refereres fra kilde-OBJ’en, skal du sikre at .mtl og billedfiler er placeret sammen ved indlæsning.
model-viewer (Web‑komponent)
Accepterer .glb direkte. Samme eksportindstillinger som Three.js.
Godot Engine
Importér GLB via Godots importør (Project → Import). Brug binaryMode = true. Godot understøtter PBR-materialer fra glTF 2.0 nativt.
Blender
For den bedste importnøjagtighed brug glTF (output.gltf + output.bin) eller GLB (output.glb). Blenders glTF 2.0-importør håndterer PBR-materialer og animation. Bemærk: FBX-output via scene.save() er ikke understøttet — FBX-formatets automatisk genkendelse er ikke indbygget i gemme-dispatcheren.
3D Printing (Slicers: Cura, PrusaSlicer, Bambu Studio)
Eksporter til STL eller 3MF. Brug 3MF når du har brug for at bevare farve‑ eller materialmetadata. Brug STL for maksimal kompatibilitet.
Sammenligning af eksportformater
| Format | Filtype | Materialer | Animation | Enkelt fil | Bedst til |
|---|---|---|---|---|---|
| GLB | .glb | PBR (glTF 2.0) | Ja | Ja | Web, spil, generel levering |
| glTF | .gltf | PBR (glTF 2.0) | Ja | Nej (+ .bin) | Udvikling, inspektion |
| STL | .stl | Nej | Nej | Ja | 3D printing, geometry-only |
| FBX | .fbx | Phong/PBR | Nej* | Nej* | Importer/exporter findes, men er ikke tilknyttet automatisk genkendelse |
| COLLADA | .dae | Ja | Ja | Ja | Cross-DCC-udveksling |
| 3MF | .3mf | Farve/materiale | Nej | Ja | Moderne 3D-printning |
Almindelige eksportproblemer
| Symptom | Årsag | Løsning |
|---|---|---|
| Output-GLB åbnes som JSON i viseren | binaryMode efterladt som false | Sæt opts.binaryMode = true |
| Teksturer mangler i output-GLB | binaryMode ikke indstillet | Indstil opts.binaryMode = true til selvstændig GLB |
| STL-fil har ingen farve i sliceren | STL-format understøtter ikke farve | Brug 3MF til farvedata |
saveToBuffer returnerer tom buffer | Formatstreng-argument mangler eller er forkert | Videregiv formatstrengen, f.eks. 'glb', 'stl', eller 'obj' |
| FBX åbnes uden animation i Blender | Kildefil (OBJ/STL) har ingen animation | Animation overføres kun, hvis den er til stede i kilden |
| Outputfilen er meget stor | Kilde-OBJ har mange duplikerede vertexer | GLB-binæroutput deduplicerer allerede; tjek kilde‑asset‑kvaliteten |
Se også
- Modelindlæsning: indlæser 3D-filer fra disk og buffers
- Scene‑graf: opbygning og modificering af scenen før eksport
- Formatunderstøttelse: komplet læse/skriv-matrix
- API-oversigt: alle klasser og enumerationer