Scenos atvaizdavimas ir eksportavimas
@aspose/3d yra apdorojimo ir konvertavimo biblioteka, ir ji neatlieka GPU atvaizdavimo ar nesukuria paveikslų failų. „Atvaizdavimas“ šioje bibliotekoje reiškia eksportuoja sceną į formatą, kurį gali naudoti tolimesnis atvaizdavimo variklis, žaidimų variklis arba peržiūros programa.
Šiame puslapyje aptariami visi eksporto keliai: išsaugojimas į failą, išvedimas į atminties buferį, formatui būdingos parinktys ir kaip paruošti scenas dažniausiai naudojamiems vėlesniems tikslams (Three.js, Babylon.js, modelių peržiūros programoms ir žaidimų varikliams).
Pagrindinis eksportas
Iškvietimas scene.save() su failo keliu. Biblioteka iššakoja išvesties formatą iš failo plėtinio:
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
Eksportavimas į GLB (rekomenduojama žiniatinkliui ir žaidimams)
GLB (binarinis glTF 2.0) yra vienas savarankiškas failas, kuriame įterpti visi tinklo duomenys, medžiagos ir tekstūros. Tai rekomenduojamas išvesties formatas žiniatinklio peržiūros programoms (Three.js, Babylon.js, model-viewer) ir žaidimų varikliams (Godot, Unity per importuotoją):
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');Nustatyti binaryMode = true sukurti savarankišką GLB failą. Kai false, išvestis yra .gltf JSON failas su atskiru .bin buferio šoniniu failu.
Eksportavimas į glTF (JSON formatas peržiūrai)
JSON variantas (.gltf + .bin) yra naudingas kūrimo metu, nes JSON yra žmonėms skaitomas:
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);Eksportavimas į STL (3D spausdinimo procesai)
STL yra tik geometrija (be medžiagų, be animacijos). Tai standartinis keitimosi formatas 3D spausdinimo pjaustymo programoms:
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);Nustatyti binaryMode = false sukurti ASCII STL, kuris yra tekstu skaitomas, bet didesnis.
Eksportavimas į FBX (DCC įrankių procesai)
Pastaba: Bibliotekoje yra FBX importavimo ir eksportavimo klasės, tačiau FBX formato automatinis aptikimas nėra integruotas į scene.open() arba scene.save(). Kviečiant scene.save('output.fbx', opts) nebus iškviestas FBX eksportuotojas — šis .fbx plėtinys nėra atpažįstamas išsaugojimo dispečerio ir kvietimas grįš prie OBJ išvesties. Naudokite šį FbxExporter klasę tiesiogiai, jei jums reikia FBX I/O. Formato palaikymo lentelė žymi FBX kaip No* dėl šios priežasties.
Jei reikia eksportuoti į formatą, kurį priima Blender, Maya arba Unreal Engine, vietoj to naudokite GLB arba COLLADA – abu yra visiškai integruoti į 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);Eksportavimas į atmintį su saveToBuffer()
Serverless funkcijoms, HTTP atsakymams ir srautinėms konvejerei, eksportuokite tiesiogiai į Buffer be įrašymo į 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() priima formato eilutę kaip pirmą argumentą (pvz. 'glb', 'stl', 'obj') ir tas pačias parinkčių objektus kaip save().
Kombinuojant openFromBuffer() ir saveToBuffer()
Visuškai atminties pagrindu veikianti konversijos konvejerio grandinė be jokio disko I/O jokiu etapu:
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);
}Scenų paruošimas konkretiems rendereriams
Three.js / Babylon.js (žiniatinklis)
Šie rendereriai natūraliai įkelia GLB failus. Eksportuokite su binaryMode = true. Jei tekstūros yra nuorodojamos iš šaltinio OBJ, įsitikinkite, kad .mtl ir paveikslų failai yra kartu patalpinti įkėlimo metu.
model-viewer (žiniatinklio komponentas)
Priima .glb tiesiogiai. Tie patys eksporto nustatymai kaip Three.js.
Godot variklis
Importuokite GLB per Godot importuotoją (Project → Import). Naudokite binaryMode = true. Godot natūraliai palaiko PBR medžiagas iš glTF 2.0.
Blender
Norint pasiekti geriausią importo tikslumą, naudokite glTF (output.gltf + output.bin) arba GLB (output.glb). Blender glTF 2.0 importuotojas apdoroja PBR medžiagas ir animaciją. Pastaba: FBX išvestis per scene.save() nepalaikoma — FBX formato automatinis aptikimas nėra sujungtas su išsaugojimo dispečeru.
3D Printing (Slicers: Cura, PrusaSlicer, Bambu Studio)
Eksportuokite į STL arba 3MF. Naudokite 3MF, kai reikia išsaugoti spalvą arba medžiagos metaduomenis. Naudokite STL didžiausiam suderinamumui.
Eksporto formatų palyginimas
| Formatas | Plėtinys | Medžiagos | Animacija | Vienas failas | Geriausiai tinka |
|---|---|---|---|---|---|
| GLB | .glb | PBR (glTF 2.0) | Taip | Taip | Internetas, žaidimai, bendras pristatymas |
| glTF | .gltf | PBR (glTF 2.0) | Taip | Ne (+ .bin) | Kūrimas, patikrinimas |
| STL | .stl | Ne | Ne | Taip | 3D printing, geometry-only |
| FBX | .fbx | Phong/PBR | Ne* | Ne* | Importuotojas/eksportuotojas egzistuoja, bet nėra prijungtas prie automatinio aptikimo |
| COLLADA | .dae | Taip | Taip | Taip | Kryžminis DCC keitimas |
| 3MF | .3mf | Spalva/medžiaga | Ne | Taip | Modernus 3D spausdinimas |
Bendros eksporto problemos
| Simptomas | Priežastis | Pataisa |
|---|---|---|
| Išvesties GLB atveriamas kaip JSON peržiūros programoje | binaryMode paliktas kaip false | Nustatyti opts.binaryMode = true |
| GLB išvestyje trūksta tekstūrų | binaryMode nenustatyta | Nustatyti opts.binaryMode = true savarankiškam GLB |
| STL failas slicer’yje neturi spalvos | STL formatas nepalaiko spalvų | Naudokite 3MF spalvų duomenims |
saveToBuffer grąžina tuščią buferį | Formato eilutės argumentas trūksta arba neteisingas | Pateikite formato eilutę, pvz. 'glb', 'stl', arba 'obj' |
| FBX atveriamas be animacijos Blender programoje | Šaltinio failas (OBJ/STL) neturi animacijos | Animacija perduodama tik jei ji yra šaltinyje |
| Išvesties failas yra labai didelis | Šaltinio OBJ turi daug pasikartojančių viršūnių | GLB dvejetainis išvestis jau pašalina dublikatus; patikrinkite šaltinio turto kokybę |
Žr. taip pat
- Modelio įkėlimas: įkeliami 3D failai iš disko ir buferių
- Scenos grafas: scenos kūrimas ir modifikavimas prieš eksportavimą
- Formato palaikymas: pilna skaitymo/rašymo matrica
- API apžvalga: visos klasės ir enumeracijos